java dsp printer
TRANSCRIPT
-
8/3/2019 Java Dsp Printer
1/32
Java for Digital Signal Processing
In a Nut Shell
(Draft: February 1, 2007)
Jarmo T. Alander
University of Vaasa, Finland
Department of Electrical Engineering and Automation
Java for
Digital Signal Processing
(AUTO1030 course)Spring 2007
int[] A = {1,2,1};
int[] S5 = FIR(mult(10,S3),A);
S3
A={1,2,1}
S510* FIR
--
-r
r
r r r r r
r
r r
r
r
r r r
r r
r
r r
int[] S4 = derivative1(add(S1,S2));
S1
S2
S1+S2S4
r r
r r r r r r
r r
r
r
r r r r r
r
r r
add --
-r
r
r r r r r
r
r r
derivative1 --r
r
r r r r
r
r
r r
p
p
p
p
p
p
pp
ppppp
p
ppp
p
ppppp
ppp
pppp
ppppp
p
pp
ppp
ppp
pppp
pp
p
pp
pp
ppp
pp
ppp
p
pp
p
p
ppp
ppp
pppp
p
pppp
ppp
ppp
ppp
pp
pp
pp
pp
pp
pp
p
pp
pp
pppp
pp
ppp
pp
pp
ppp
pp
pppppp
p
p
ppp
pp
pp
pppppp
pppppp
pppppppppp
pppp
ppp
pp
pppppp
pp
pppp
pp
pppp
ppp
ppppp
ppppp
pppppppppppppppp
pppppppp
ppppppppppp
ppppp
ppppppppppppppppppppppppp
ppp
pppppppp
pppppppppppppppppppp
pppp
pp
pppppppp
pppppppppppppppppppppppppppppp
pppppppppp
ppppppppppppppp
ppppppppppppppp
pppppppppppppppp
pppppppppppppp
ppppppppppppppppppppp
ppppppppppppppppppp
ppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppppppppp
ppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppp
pppppppp
pppppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppp
pppppppppppppppppppp
pppp
p
p
pppppppppppp
pppppp
ppppppppppppppppppp
pppppppppppppppppp
ppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppp
pppppppp
pppppppp
ppppppp
p
pppppp
pp
pppppp
ppppppppppppp
ppp
ppppppppppppppppppppp
p
p
p
p
p
p
ppppp
pp
pppppppppp
ppppppppppp
p
ppppppp
pp
pppppp
p
pppppppppppppp
ppppppp
p
pppppp
pp
p
ppppppppp
pp
p
p
pppppp
p
ppppppppp
pp
pp
p
p
pp
p
p
pp
p
pp
pppp
p
pp
pppppp
This document can be found in the Web at
ftp://ftp.uwasa.fi/cs/AUTO/AUTO1030/JavaDSPprinter.pdf
as this printer friendly hand-out version, or at
ftp://ftp.uwasa.fi/cs/AUTO/AUTO1030/JavaDSP.pdf
as a slide show. All comments are warmly welcome.
ftp://ftp.uwasa.fi/cs/AUTO/AUTO1030/DSP.java
contains the Java source code used in this document.
c2006, 2007 Jarmo T. Alander. These are the revised (February 1, 2007) web notes of a lecture of Java usage for DSP.
1
-
8/3/2019 Java Dsp Printer
2/32
Java & DSP CONTENTS
Contents
1 Introduction 4
1.1 Project group . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 Why Programming and DSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Why Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4 Why not DSP assembler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.5 Why not Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.6 Why mathematics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.7 Why image processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.8 Why in English . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.9 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.10 Examples of signal processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2 Numerics 6
2.1 Arithmetic operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 Division and multiplication by 2n can be done efficiently . . . . . . . . . . . . . . . . . . 6
3 Methods 7
3.1 Methods and classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.2 Example 1: constant vector or signal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73.3 Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.4 Constant vector by Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.5 Example 2: Moving average . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.6 Method as a black box . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.7 Example 3: combining methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.8 Example 4: derivative1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.9 Example 5: method add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.10 Example 6: FIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.11 Example N (long): NIRS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.12 Sqrt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.13 S/N . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4 Classes 19
4.1 DSP class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.2 Example class DSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.3 Graphical representation: container . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5 Image Processing 23
6 Hyperimage processing 24
6.1 What is hyperimage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
7 Conclusions and Future 25
7.1 Future . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
7.2 Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
7.3 Further reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
A Solutions to problems 27
A.1 Abbreviations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
A.2 Useful links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2
-
8/3/2019 Java Dsp Printer
3/32
Java & DSP CONTENTS
Trademarks
Java is a registered trademark of Sun Microsystems, Inc.
This document was typeset by the author using Leslie Lamports LATEX (http://www.latex-project.org/ )
extension of Donald Knuths TEX typesetting system and Beamer (http://latex-beamer.sourceforge.net/ )
extension of LATEX for slides.
3
-
8/3/2019 Java Dsp Printer
4/32
Java & DSP 1 INTRODUCTION
1 Introduction
Abstract
This is a draft for a tutorial for Java programming for solving basic signal processing problems. The
goal of this tutorial is to help students to learn how to use computer programming as a tool to design
and implement signal processing methods. This tutorial contains basics of Java syntax and semantics,
examples of DSP problems solved by Java, and references to further reading.
Keywords: digital signal processing, image processing, Java, object-oriented programming,
1.1 Project group
Persons more or less influenced this tutorial include
Prof. Jarmo Alander: first draft
DI Janne Koljonen: Java examples (Virtual Keeper)
Econ. Olli Snellman: Java multimedia programming
DI Petri Vlisuo: Java examples
Dr. Timo Mantere: Java examples and testing
BSc Olli Kanniainen: Java examples.
The idea and need to write this tutorial emerged from the difficulties encountered by the students to
solve exercises using programming approach essential in modern engineering design and creativity.
Programming is like eating an elephantdo it piece by piece.
1.2 Why Programming and DSP
Signals is digital format are suitable only for digital electronics and computer processing, the latter of
which is more flexible and also the main processing type. This means that most signal processing is done
by computer programs in computers and embedded systems like mobile phones, CD-players, and digital
cameras. Before microprocessors, signal processing was done by analog electronics.
1.3 Why Java
The high level programming language Java is gaining more and more popularity as a tool for programming
large software systems for smaller and smaller devices. It is a general purpose programming language also
suitable for signal processing. In this tutorial we will only take some parts of the language, and leave the
rest for the main programming studies.
Java programmers do it more modularly,
1.4 Why not DSP assembler
Signal processing is done much with special DSP processors having special tailored commands to do nu-
merical calculations. Java was preferred here because it can be used also in very many other applications,contrary to DSP programming, which is not used much outside the DSP community.
1.5 Why not Matlab
This programming introduction to DSP could also have been done using Matlab. However, Java is a general
purpose language useful also in more general setting of automation software and beyond. Hence program-
ming skills in Java are more useful for anybody not intending to concentrate only on DSP.
4
-
8/3/2019 Java Dsp Printer
5/32
Java & DSP 1 INTRODUCTION
1.6 Why mathematics
Digital signal processing is based on mathematical methods and notations, most of which are easy 1 to
implement using any programming language. These mathematical concepts include real and complex
arithmetics, basic functions, iteration, vectors, and matrices. We will look these by a few simple examples
taken from DSP.
1.7 Why image processing
Vision is perhaps the most important sense:
it makes human-computer interaction natural.
it has endless number of applications, and
it is in a rapid development phase due to computing and digital electronics.
More and more tasks are aided by graphical user-interfaces with extremely high quality image features. In
these kinds of applications Java is a good choise for a programming language.
Information as images are often excellent for human interpretation and consultations. The human eye,
even if being in very many ways an excellent device, has some weak points that can be quite easily assisted
by a modern computer system. The weaknesses include:
Limited contrast resolution, which can be often adjusted by rather simple scaling algorithms.
Lack of absolute image memory makes it difficult to monitor slow processes like tumour growth or
tensile testing []. A computer can memorise precisely image information as long as needed. There
are also rather simple algorithms to compare images, display the differences, and to calculate the
amount of differences. [?]
Hence we will use quite many image processing examples in what follows.
1.8 Why in English
These notes are written in English so that both Finnish and foreign students can use these notes.
1.9 Motivation
Before going into details of Java and DSP, a word of motivation: Remember, that programming skills are
highly esteemed in labour market. About half (50%) of industrial productivity is due to ITC development,
and that is based on programming new applications.2
1.10 Examples of signal processing
The following list gives an example of signal processing applications done by our group.
Under construction ...
1This is really true.2The rest is due to all the other engineering branches altogether, hence what ever you develop, half of it should be ICT, on the
average.
5
-
8/3/2019 Java Dsp Printer
6/32
Java & DSP 2 NUMERICS
2 Numerics
The basic numerical types in Java are shown in table 1. As can be seen the integer type is long enough for
any basic signal processing, where ADC signals are processed. Typically ADC signals contain only 8 to 16,
sometimes even 24, significant bits. In what follows we are mainly using integers (int 32bits) to represent
signal values and integer arrays (int[]) to represent signal sequences like time series.
Table 1: Numerical types in Java.
type size range
byte 1 byte (8 bits) -128 ... 127
short 2 bytes (16 bits) -32 768 ... 32 767
int 4 bytes (32 bits) -2 147 483 648 ... 2 147 483 647
long 8 bytes (64 bits) -263 ... 2631
float 4 bytes (32 bits) 3.41038 about 7 decimal positionsdouble 8 bytes (64 bits) 1.710308 about 15 decimal positions
2.1 Arithmetic operations
Evaluating a formula in floating point arithmetics is sensitive to the execution order of the operations. Here
some advice:
Always sum in increasing order. Otherwise precision may be lost in floating point scaling.
Avoid subtraction of nearly equal values. Again the floating point scaling is the potential reason of
loss of precision.
Division of zero is always a headache for a programmer of numerical software. Test before division
that the denominator is not too small ( 0).
Using integers instead of floating point values we can avoid some problems, while unfortunately geting
some integer dependent problems like imprecise function values. A decent compromise is fixed pointnumbers that use integers to represent decimal numbers of given decimal places. In practise we can e.g.
compute by values 100 times larger than the real ones (from ADC etc) and output values with decimal point
between the second and third less significant digit positions.
2.2 Division and multiplication by 2n can be done efficiently
In case we have division (or multiplication) of a binary coded integer by 2n the fastest way to do it is just to
shift the integer n steps right:
i/8 is equivalent to i3.
The -operator shifts the bits of the first operand to the right by the amount given as the second operand
(here 3; 23 = 8). The reverse -operator can be used when multiplication by 2n is needed:16*i is equivalent to i4.
6
-
8/3/2019 Java Dsp Printer
7/32
Java & DSP 3 METHODS
3 Methods
In what follows we will briefly introduce the most important concepts and constructions of Java -language
in the framework of introductory signal processing application. We will not be extremely purist with respect
to Java definitions. When in doubt, please make experiments with our Java interpreter or consult the Java
tutorials by the Sun Microsystems (http://java.sun.com/docs/books/tutorial/ ) or still better do
both.
Allways remember the KISS principle: Keep It Simple Stupid.
3.1 Methods and classes
Subroutines, functions, and procedures are all called methods in Java. Here we will collect a set of methods
to a subroutine package, called class in Java language terminology.
Before looking classes more carefully, we start by writing a few methods and by that way learn basic
constructions of Java.
3.2 Example 1: constant vector or signal
Our first method will create a vector of n integer items all set to a given constant c:
public static int[] constant(int n, int c) ///** create an n item constant vector = c*/ // comment
{ // create a constant vector
int[] R = new int[n]; // reserve space
for(int i=0; i
-
8/3/2019 Java Dsp Printer
8/32
Java & DSP 3 METHODS
int c parameter c of type integer.
int[] R = new int[n]; allocation of space (creation of an object) for the result. When returning a
non-scalar value we have to reserve memory space (new) for it. Operator = is an assignment of the
created vector to variable R (or actually a link to the memory).
for(int i=0; i
-
8/3/2019 Java Dsp Printer
9/32
Java & DSP 3 METHODS
3.4 Constant vector by Java
In Java we can also write directly constant initialisation vectors:
int[] ZeroVector = {0, 0, 0};
Which one is better depends on the situation: tiny vectors are usually easier to write explicitly than program
while it is best to program longer vectors. Writing constant(10000,999999) will save a lot, lot, ... of
boring and errorprone typing.
Exercise 3.1 Implement the delta function: i,j = 1, when i = j, andi,j = 0, when i = j, outputting aninteger array of given length (parameter n).
Observe, that due to maintenance reasons it is usually good to avoid scattering constants other than 0
and 1 around the program code. Use symbolic constants instead.
3.5 Example 2: Moving average
Our second example will be a method that evaluates a moving average of a given time series x[] using
moving window of width 2n+1:
public static int[] moving(int[] x, int n) // COMMENTS:
/** average of x using window size 2x+1 */ // comment
{ // moving average of window 2n+1
if (n
-
8/3/2019 Java Dsp Printer
10/32
Java & DSP 3 METHODS
S += x[I-]+x[J++]; Operators - and ++ are shorthand notations for expressions I = I - 1 and J = J + 1.
This notation is inhereted from C-language, and used where utmost efficiency is needed. Namely they
are often found as machine level commands (increment or decrement by 1). Similarly S+=x is a short
hand notation for S=S+x also this is usually translated into an efficient special machine code command
(the contents of the accumulator register is increased by x).
Summing is done starting from the center of the window and proceeding towards the ends of the
window.
R[i] = S/W; In a finished program every division should be checked to be valid. W should not be zero,
which is true because W=2*n+1= 0, for nIN.
3.6 Method as a black box
In order to clarify Java concepts we use some simple graphics like rectangular boxes and other similar
constructions. The methods constant and moving are shown in figure 1. Parameters are represented by
arrows pointing to the left side of the method box, while the type returned by the method is shown by an
arrow pointing outwards from the right side of the method box. The types of the parameters and the output
are shown above or under the arrows.
The term black box means that the observer i.e. the one who is using a method does not know the details
of its implementation inside the black box. It is enough to know the interface, the parameter and outputtypes, and what the method should do.
The details of the method could not interest less the observerthe details are left just for the programmer
of the method.
constant -int[]-int-int
int[] constant(int,int)
moving -int[]-int[]-int
int[] moving(int[],int)
Figure 1: Box representation of the definition of the methods constant and moving.
3.7 Example 3: combining methods
In this example we will combine our two methods into a simple signal filtering example. Our task is to
apply the moving average filter to a constant time series to see what really happens.
Let the constant time series be ten (10) times one (1) and the window size of the moving average filter
W= 22+1 = 5.
Our codeline is shown in the graphical representation of figure 2.
int[] S1 = moving(constant(1, 10), 2);
int[]constant --n=10
-c=1 r r r r r r r r r r moving -
-
-n=2 r r
r r r r r r
r r
S1
Figure 2: Box representation of command int[] S1 = moving(constant(10,1),2).
Exercise 3.2 Take a moving average of the output of a delta function method of the exercise 3.1.
10
-
8/3/2019 Java Dsp Printer
11/32
Java & DSP 3 METHODS
3.8 Example 4: derivative1
Our next method called derivative1 will estimate the derivative of a time series by taking the difference
between the consecutive items of the time series.
public static int[] derivative1(int[] x) //
/** the 1st derivative of series x */ //
{ // derivative by difference xi - xi+1
int N = x.length; // length ofxint[] R = new int[N]; // reserve space for result
for(int i=1; i
-
8/3/2019 Java Dsp Printer
12/32
Java & DSP 3 METHODS
int[] S4 = derivative1(add(S1,S2));
S1
S2
S1+S2S4
r r
r r r r r r
r r
r
r
r r r r r
r
r r
add --
-r
r
r r r r r
r
r r
derivative1 --r
r
r r r r
r
r
r r
Figure 4: Application of method derivative1 to the added output of our previous examples.
/** FIR filter of x using coeff a */ // FIR filter; coeffa
{ //
int N = x.length; // length ofx
int M = a.length; // length ofa
int[] R = new int[N]; // reserve space for result
int W=0; //
for(int i=0; i
-
8/3/2019 Java Dsp Printer
13/32
Java & DSP 3 METHODS
Figure 6 below shows a typical NIR spectrum of human skin taken for clinical research purposes. You can
find more information on this medical application of signal processing from the web address below:
More information from:
ftp://ftp.uwasa.fi/cs/report05-4/TTIprinter.pdf or
ftp://ftp.uwasa.fi/cs/report05-4/TTI.pdf
p pp p p p p p p p p p p pp p p p p pp p p p p p p p p p p p pp pp pp p p p p pp pp p pp p pp p p
p p pp p p p pp p p pp pp p p p p p p p ppp pp p p pp p pp pp p pp pp p pp p
p pp pp p p p pp p p p pp p p p p p
p p p p p p p p p p p pp pp pp p pp pp p pp p p p p p p p p p p p p p p pp p
p pp p
p p p p pp pp p p pp p p p p p p p p pp p p p
p pp p
ppp p
pp
p
p
p
p
p
p
pp
p p p ppp
p
p
p
pp
pp
pp
pp
pp p p p p p p p pp p
pp p
pp p
p p pp pp
p
p
p
p
pp p p
p
p
p
p
p
p
p
p
p
pp p p p
pp p
pp p
p
p
p
p
pp p
p
1000 1200 1400 1600 1800 2000
Figure 6: A NIR spectrum of human skin (spectrum A)
There should be some small details in the spectrum, peaks and valleys, that are of interest to the clinician
for diagnostic purposes. In order to find them we try to filter away the background by derivating the
spectrum by our derivative1 method. The result is shown in figure 7.
p
p
p
ppp
pp
pp
pp
p
pp
p
p
pp
pp
p
p
p
pp
pp
p
p
p
ppp
p
pp
p
p
ppppp
pp
p
ppp
p
pp
pppp
pp
p
p
pppppppp
ppp
pppp
p
pppp
pppppppp
pppp
pppp
ppp
ppppppp
ppp
p
p
p
p
pppppp
pppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppppp
pppppppppppppppppppppppppppppppppppppppppppp
ppppppppppppppp
ppppppp
ppppppppppppp
p
p
p
p
p
ppp
p
p
p
p
p
p
pppp
pppp
pp
pppp
pppppppppp
pppppp
ppppp
pppp
pppppp
pppppp
pppp
p
p
p
p
ppp
p
p
p
p
ppppppp
pppppp
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
ppp
p
p
pp
pp
ppp
p
p
p
p
p
p
pp
pppp
pp
ppppp
pp
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p1000 1200 1400 1600 1800 2000
Figure 7: The first derivative of NIR spectrum A using derivative1 method.
Our derivative1 method is not good in suppressing noise. According to theory a better method should
be e.g. der101. The result of applying der101 to our example spectrum is shown in figure 8.
Exercise 3.7 Method der101 estimates the derivative of a series x by formula x[i] = x[i+1]-x[i-1].
Implement methodder101 returning the derivative series.
The peaks and valleys in NIRS vary much in size. The basic properties of peaks and valleys are their
location and height. The peak location gives the wavelength, which is further inversely proportional to
the energy difference between the vibrational states of the molecule, which further give information on
the physics and chemistry of the object measured. In our example case the peaks correspond to certain
13
-
8/3/2019 Java Dsp Printer
14/32
Java & DSP 3 METHODS
ppp
pp
p
p
p
ppp
pp
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
pppp
pp
p
pp
p
p
ppppp
pppp
pp
pp
ppppp
ppp
ppp
pppppp
ppppp
ppp
pppppppppp
pppp
pppp
pppppppp
ppppp
pppppp
pppp
pppppppppppppppppppppppppppppp
ppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppppppppppppppppp
pppppp
ppppppppppppppppp
ppppppppppppppppppppppppp
pppppppppp
ppppp
pppp
ppppp
ppppppppp
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
pp
pp
p
p
p
pppppppp
pppp
ppppppppp
pppppppp
pppp
pppp
pppppp
p
p
pp
ppppp
pp
p
pp
ppp
pp
p
pppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
pp
p
pp
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
pp
p
p
p
pp
pp
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
Figure 8: The first derivative of NIR spectrum A using der101 method.
molecules or parts of molecules and their interactions that strongly absorb certain NIR wavelengths. The
peak height is proportional to the concentration of the given molecule.
Geometrically in the first derivative spectrum the peak or valley location i.e. the highest or lowest point
correspond to points where the derivative signal crosses zero.
The third important property of peak or valley is its width. There are several ways to define width, how-
ever. Here we will approximate the width by the distance between the peak and valley of the corresponding
second derivative signal at the peak or valley.
In order to evaluate the basic properties of peaks and valleys we need methods to evaluate derivatives
and peak locations. The easies way of implementing the second derivative is to apply the first derivative
twice, like:
int[] D1 = der101(S);
int[] D2 = der101(D1);The fourth important peak/valley property is its area, which can be estimated once the local background
is estimated.
The details of spectra vary much. Hence, the values of derivatives also vary much. This complicates
the graphical display of derivatives. The dynamics of derivation can be suppressed by a logarithm or root
function for graphical display. Figure ?? shows the results of applying square root function (method Sqrt)
to the output of our der101 derivation method. Similarly figure 9 shows the derivative of another skin
spectrum done by applying der101 and square root dampening.
3.12 Sqrt
Method Sqrt compressing signal dynamics for graphical display is as follows:
public static int[] Sqrt(int[] x, double a) //
/** square root of abs x scaled by a */ //sign(x) a sqrt(|x|){ //
int N = x.length; // length ofx
int[] R = new int[N]; // reserve space for result
for(int i=0; i
-
8/3/2019 Java Dsp Printer
15/32
-
8/3/2019 Java Dsp Printer
16/32
-
8/3/2019 Java Dsp Printer
17/32
-
8/3/2019 Java Dsp Printer
18/32
-
8/3/2019 Java Dsp Printer
19/32
Java & DSP 4 CLASSES
4 Classes
A Java class is an aggregation of attributes (variables) and methods (functions). In addition we can create
new copies of class variables. In Java, and in general in other object-oriented langueges, these copies in
computers memory are called objects.
4.1 DSP classThe simplest class contains only methods and can be seen as a method or subroutine package, where some
of the methods may call other methods in the same class.
4.2 Example class DSP
The following class called DSP was used in our first method examples.
public class DSP //
{ //
public static int[] constant(int n, int c) //
/** ... */ // create a constant vector
{ //
int[] R = new int[n]; // reserve space
for(int i=0; i
-
8/3/2019 Java Dsp Printer
20/32
-
8/3/2019 Java Dsp Printer
21/32
-
8/3/2019 Java Dsp Printer
22/32
Java & DSP 4 CLASSES
4.3 Graphical representation: container
Because the most important function of a class is to be a container holding all methods and attributes
together, we will use an oval shaped container as the symbol of a class and object of a class:
DSP
add()-
-
-
DSP
fun()-
-
-
?6
a1 a2
Figure 17: Method add of class DSP using no attributes of DSP. Another method fun updating attribute a1
and reading another attribute a2 of class DSP.
Still working on this subject ... hold on, please.
22
-
8/3/2019 Java Dsp Printer
23/32
Java & DSP 5 IMAGE PROCESSING
5 Image Processing
In this section we will see how basic image processing methods can be implemented in Java. An image is
typically represented by a two-dimensional integer array:
int[][] Image = new int[1024][1024];
reserves space for a 10241024 pixel one color (grey tone) image.
For processing an image array we need two loops like this:public static int[][] Ifun(int[][] Image) //
/** ... */ // an image processing function
{ //
int N = Image.length; // height of Image
int M = Image[0].length; // width of Image
int[][] R = new int[N][M]; // space for result
for(int i=0; i
-
8/3/2019 Java Dsp Printer
24/32
Java & DSP 6 HYPERIMAGE PROCESSING
6 Hyperimage processing
6.1 What is hyperimage
The by far most common image types are grey tone and color images. It is also possible to increase the
number of colors in a color image far beyond the three necessary for visible color images as well as going
beyond visible light to ultraviolet and infrared even beyond. Figure 19 shows schematically the relation
between pixel, image, and hyperimage.
HyperimageProcessing
6
?
Image Processing
6
?
Chemometrics(Spectroscopy)
image[][](photo)
6
?
pixel[](spectrum)
hyperimage[][][]
-
6
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq66
melanoma??
ulcers
a
Figure 19: Pixel, image, and hyperimage
Still working on this subject ... hold on, please.
24
-
8/3/2019 Java Dsp Printer
25/32
Java & DSP 7 CONCLUSIONS AND FUTURE
7 Conclusions and Future
7.1 Future
The anticipated future activities could include signal processing Java package, exercises, some of which
interactive, graphical tools for demonstrating the above, and graphical tools for teaching programming in
Java.
7.2 Acknowledgements
Mr. P. Vlisuo is acknowledged for introducing Beamer slide processing.
7.3 Further reading
Arto Wikla, "Ohjelmoinnin perusteet Java-kielell [Principles of Programming using Java Language]", Ota-
DATA, Espoo, 1999.
25
-
8/3/2019 Java Dsp Printer
26/32
Java & DSP 7 CONCLUSIONS AND FUTURE
ppp
ppppppppp
ppppppp
ppppppppppp
pppp
ppppppppppp
ppppppppppppppppp
pppppppppppppp
pppppppppppppppppppp
pppppppppppppppppppppppp
pppppppppppppppppppp
ppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppp pppppppppppppppppp pppppppppppppppppp pppppppppppppppp
pppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppp pppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppppp
p
p
p
p
p1000 1200 1400 1600 1800 2000
ppp
ppp
pppppp
pppppppppppppp
pppppppp
ppppppppp
pppppppppp
pppppppppppppppppppp
pppppppppppppppppppp
pppppppppppppppppppppp
pppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppp pppppppppppppppppp
ppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppp pppppppppppppppppp ppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppp pppppp
pp
pp
pppppppppppppppppppppppppppppppppppppppppppppppppp
ppppp
ppppppp
p
p
p
p
1000 1200 1400 1600 1800 2000
pppppppppppppppppp
pppppppp
ppppppppppppppp
ppppppppppppppppppp
pppppppppp
pppppppppppppppppppppppppppp
pppppppppppppppppppppppppp
pppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppp ppppppppppppppppppppppp pppppppppppppppppp pppp
ppppppppppppp pppppppppppppppppp pppppppppppppppppppppppppppppppppppp pppppppppppppp pppppppppppppppppp pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppp ppppppppppppp ppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
pp1000 1200 1400 1600 1800 2000
pppppp
ppppppp
pppppppppppp
ppp
ppppp
pppppppppppppppppp
ppppppppppppppppppp
ppppppppppppppppppppppp
ppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppp ppppp
pppppppppppp ppppppppppppppppppppppp pppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppp p
pppppppppppp ppppppppppppppppppppppppppp pppppppppppp
pppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppp
p
pppp
1000 1200 1400 1600 1800 2000
pppppppppppp
pppp
ppppppppppp
ppp
pppp
ppp
ppppppppppppppp
ppppppppppppppppppppp
pppppppppppppppppppppp
pppppppppppppppppppppppppp
pppppppppppppppppppppppppp
pppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppp ppppppppppppppppppppppp pppppppppppppppppppppppppp pppppppppppppppppppppppppppp pppppppppppppppppppppp pppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppp
ppppp
ppppppppppppppppppppppppp
ppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppp
pp
p
p
pppppppppppppppp
pppppp
pppppppppppppppppppppp
ppppppp
pppppp
ppp
ppp
p
pp1000 1200 1400 1600 1800 2000
pppppppppppp
ppppppppppp
pppppppppppppp
pppppppppppp
pppppppppppppppppppp
ppppppppppppppppppp
ppppppppppppppppppppp
pppppppppppppppppp
pppppppppppppppppppppppppp
ppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppp pppppppppppppp pppppppppppppppppp pppppppppppppppp
ppppppppppp pppppppppppppppppppppppppp pppppppppppppppppppppppppppp pppppppppppppppppppppp ppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppp
pppppppppppppppppppppppppppppp ppppppppppppppppppp ppppppppppp
ppp
ppp
1000 1200 1400 1600 1800 2000
pppppppppppppp
ppppppppp
pppppppppppp
pppppppppppppp
pppppppppppppppppppp
ppppppppppppppppppp
pppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppp pppppppppppppp pppppppppppppppppppppp pppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppp pppppppppppppppppppppppppppp pppppppppppppppppp ppppppppp
ppppppppppppp pppppppppppppppppppppp pppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppp
pppp
1000 1200 1400 1600 1800 2000
ppppppp
ppppppp
pppppppppppppp
ppppppppppppp
ppppppppppppppppppppp
pppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppp
ppppppppppppppp ppppppppppppp ppppppppppppppppppp ppppppppppppp pppppppppppppp p
pppppppppppp ppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppp
ppppppppppppp pppppppppppppp pppppppppppppppppppppp pppppppppppppppp
pppp
pppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pp
p
p
p
pppppppppppp
ppppppppp
ppppppppppppppppppppppppppp
pppppp
ppppppp
pppp
p
1000 1200 1400 1600 1800 2000
pppppp
pppp
ppppppppp
ppppppppppppppppppp
pppppppppppppppppp
ppppp
ppppppppppppppppppp
pppppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppppppp pppppppppppppppppppppppppp ppppp
pppppppppppppp ppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppp ppppppppppppp pppppppppppppppppppppppppppppppppppp pppppppppppppp ppppppppppppppppppppppp pppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppp
ppppp
ppppp
p
1000 1200 1400 1600 1800 2000
ppppppp
ppppppppp
ppppppp
pppppppppp
pppppppp
ppppppppppppppp
ppppppppppppppppp
ppppppppppppppp
pppppppppppppppppppppp
pppppppppppppppppppp
pppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppp pppppppppppppppp
ppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppp
p
1000 1200 1400 1600 1800 2000
Figure 20: Comparison of spectra of figure 14
26
-
8/3/2019 Java Dsp Printer
27/32
Java & DSP A SOLUTIONS TO PROBLEMS
A Solutions to problems
Not any yet, sorryplease supply some.
A.1 Abbreviations
ADC Analog Digital Converter
CAD Computer Aided Design
DI Diplomi-Insinri (MSc eng.)
DSP Digital Signal Processing
FIR Finite Impulse Response (filter)
HCI Human-Computer Interface
NIR Near-InfraRed
NIRS NIR Spectroscopy
A.2 Useful links
Our homepage:
http://www.uwasa.fi/TAU
AUTO1030 homepage:
http://www.uwasa.fi/TAU/AUTO1030
27
-
8/3/2019 Java Dsp Printer
28/32
-
8/3/2019 Java Dsp Printer
29/32
Java & DSP A SOLUTIONS TO PROBLEMS
pppp
ppppppppp
pppp
ppppppppppppppp
pppppppppppp
pppppppppppppppppp
pppppppppppppppppp
ppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppp
pppppppppppppppppppppp ppppppppppppp pppppppppppppp pppppppppppppppppp ppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppp p
pppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppppp
pp
pp
p
1000 1200 1400 1600 1800 2000
ppp
ppppp
pppppppppppp
ppppppppppppppppppppppp
ppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppp
pppppppppppppppppppppp ppppppppppppppppppppppppp
ppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
pppp
1000 1200 1400 1600 1800 2000
ppppp
p
ppppppppppp
ppp
ppppp
pppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppppppp ppp
pppppppppppppppppppppppp pppppppppppppppppp pppppppppppppppppppppppppppp pppppppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppppppppppppp pppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppp
ppppppp
p
1000 1200 1400 1600 1800 2000
pppppp
pppppppp
p
pppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppp pppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppp pppppppppppppp ppppp
ppppppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppp ppppp
pppppppppppppppppppppppppppppppppppp pppppppppppppppppppppp p
pppppp
p
p1000 1200 1400 1600 1800 2000
p
p
p
ppppp
pp
pppp
p
pppp
p
pppppp
ppp
pppp
pppppppppp
pppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppp ppppppppppppppppppppppp pppppppppppppppppp pppppppppppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppp pppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppp
p
p
1000 1200 1400 1600 1800 2000
ppppppp
p
ppppppppp
ppppppppp
ppppppppppppp
pppppppppppppppp
pppppppppppppppppp
ppppppppppppppppppppp
pppppppppppppppppppppppppp
pppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppp
ppppppppppp ppppppppppppp pppppppppppppppppp pppppppppppppp pppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppp ppppppppppp
pp
pppp
pppppppppppppppppppppppppppppppppppppppppppppppppp
pppppp
ppppppp
1000 1200 1400 1600 1800 2000
pppppp
pppppppppppp
ppppppppppppppppp
pppp
ppppppppppppppppp
ppppppppppppppppppppp
pppppppppppppppppppppp
pppppppppppppppppppppppppppp
pppppppppppppppppppppppp
pppppppppppppppppppppppp
ppppppppppppppppppppppppp
pppppppppppppppppppppppp
ppppppppppppppppppppp
ppppppppppppppppppppppppppppp pppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppp
ppppppppppp pppppppppppppppppppppp pppppppppppppppppp pppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppp
pppppppppppp pppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppp
pp
p1000 1200 1400 1600 1800 2000
pppppp
pppppppppppp
ppppppppppppppppppppppppppppppppppppp
ppp
ppppppppppppppppppp
pppppppppppppppppppppp
pppppppppppppppppp
pppppppppppppppppppppp
ppppppppppppppppppppppp
ppppppppppppppppppppppp
pppppppppppppppppppppppp
pppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppppp
p
1000 1200 1400 1600 1800 2000
pppppppp
pppppppppp
ppppppppppppppppp
ppppppppp
ppppppppppppppppppp
ppppppppppppppppppp
ppppppppppppppppppp
pppppppppppppppppppppp
ppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppp pp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppppppppp pppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppp
ppppppp
ppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppp pppppppp
p
p
pppppppppppp
ppppppppppppppppppppppppppppppppppppppp
pppppp
ppp
pppppp
1000 1200 1400 1600 1800 2000
ppp
pppppp
pppppppppppp
ppppppppp
ppppp
pppppppppp
ppppppppp
pppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppp
pppp
ppppp
ppppppppppppppp ppppppppp
pppppppppppppppppppppppppppppppp pppppppppppppppppppppp pppppppppppppppppppppppppppppppp pppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppppppp
p
pp
p
1000 1200 1400 1600 1800 2000
Figure 22: Comparison of spectra of figure 14
29
-
8/3/2019 Java Dsp Printer
30/32
-
8/3/2019 Java Dsp Printer
31/32
Java & DSP A SOLUTIONS TO PROBLEMS
ppp
pppppp
pppppppppp
ppppp
ppppppppp
ppp
ppppppppppp
ppppppp
ppppppp
pppppppppp
ppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppp ppppppppppppp ppppppppppppppppppp pppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppp ppppppppppppppppppppppppppppppppppp ppppppppppppppppppp pppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppppp
p
p
p
p1000 1200 1400 1600 1800 2000
ppppp
ppp
ppppppppppppp
ppppppp
pppppppppppppppppppp
pppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppp
pppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppppppp ppppppppppppp pppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppp
ppppp
p
pp1000 1200 1400 1600 1800 2000
ppppppppppppp
ppppppppppppppp
ppp
pppppppppppppppppp
pppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp pp
pppppppppppp pppppppppppppppppp pppppppppppppppppppppp pppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppp
1000 1200 1400 1600 1800 2000
ppp
pp
ppppp
ppppppp
ppppp
p
ppppppppp
ppppppp
ppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppp pppppppppppppppppp pppppppppppppp pppppppppppppppppppppp pppppppppppppppppppppp pppppppppppppppppp ppppppppppppppppppp pppppppppppppppppppppp ppppppppppppppppppppppp ppppppppppppppppppppppppppppppp pppppppppppppppppppppp ppppppppp
pppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppppppp pppppppppppppppppp pppppppppppppp
pppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppp
ppppp
p
p
p1000 1200 1400 1600 1800 2000
pppppp
ppppppp
ppppppppppppppppp
pppppppppp
pppppppppppppppppppp
ppppppppppppppppppppp
pppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppp
pppppppppppp pppppppppppppppppppppp ppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppp pppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppppppp pppppppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppp
p
p
p
p
1000 1200 1400 1600 1800 2000
ppppp
pppppp
pppp
pppppppppppppppppppp
ppppppppppppppp
pppppppppppppppppppppp
ppppppppppppppppp
ppppppppppppppppppppppp
pppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppp ppppppppppppppppppppppppp
pppppppppppp pppppppppppppppppppppp pppppppppppppp pppppppppppppppppp pppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppp
pppppppppppppppppppppppp pppppppppppppppppppppp pppppppppppppp pppppppppppppppppppppppppp
ppppppppppppppppp
pppppppppppppppppppppppppppppp
p
pp1000 1200 1400 1600 1800 2000
ppppppppppppppppppppp
ppppppppppppp
pppppppppppppppppppp
pppppppppppppppppppppppppp
ppppppppppppppppppppppppp
pppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppp ppppppppppppp
ppppppppppppppppppppppppppppppppppppppppp ppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppp pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppp
pppppppppppp pppppppppppppp pppppppppppppppppp pppppppppppp
ppppppppppppppppppppppppppppp pppppppppppppppppppppppppppppp
pp
p
p
p
1000 1200 1400 1600 1800 2000
ppppppppp
ppppppppp
ppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppp ppp
ppppppppppppppp pppppppppppppppppp ppppppppppppppppppppppp pppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppp ppppppppppp
ppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppp
pppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pp
p
p
1000 1200 1400 1600 1800 2000
ppppppppppppp
ppppppppp
pppppppppppp
ppppppppppppppp
pppppppppppppppp
ppppppppppppppppppppp
ppppppppppppppppppppppppp
ppppppppppppppppppppppppppp
pppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppp pppppppppppppp pppp
pppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppppppppppppppppppppp
ppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppppppppppppppppp ppppppppppppppppp
pppp
p1000 1200 1400 1600 1800 2000
ppppp
ppp
pppppppp
pppppppppp
ppppppppppppppppp
pppppp
pppppppppppp
ppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppp
pppppppppppppppp ppppppppppppp ppppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppp pppppppppppppppppppppppppp pppppppppppppppppppppppppppp pppppppppppppppppppppp ppppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppppppppppp pppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
1000 1200 1400 1600 1800 2000
Figure 24: Comparison of spectra of figure 14
31
-
8/3/2019 Java Dsp Printer
32/32