Sunteți pe pagina 1din 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}
S5
10*
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+S2
S4
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
p
p
p
p
p
p
p
p
pp
p
p
pp
p
p
p
p
pp
p
pp
p
p
pp
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
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
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
pp
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
pp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppppp
p
pp
p
p
p
p
p
p
p
pp
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
ppp
p
p
p
p
p
pp
p
p
p
p
pp
p
p
p
p
p
p
pp
p
pp
p
p
p
pp
p
ppppp
p
pp
pppp
p
p
p
pp
p
p
p
p
p
p
p
pp
p
p
p
p
p
pp
p
p
p
p
p
p
p
pp
pp
pp
pp
p
p
p
p
p
p
pp
pppp
p
pp
p
p
p
p
p
ppp
pp
p
p
p
ppp
p
pp
p
p
pp
pp
p
pp
p
p
p
pp
pp
ppp
p
pp
p
pp
pp
pp
p
p
pp
pp
ppp
p
p
p
p
p
p
pp
p
p
p
p
pp
ppppp
p
pp
p
pp
ppp
p
p
p
p
p
p
p
pp
pppp
p
p
p
p
ppp
p
ppp
p
p
p
p
p
ppp
p
p
p
pp
pppppppp
p
pppppp
pp
p
pp
ppp
ppppppp
ppppp
p
p
p
pppp
p
pp
pppppppppppppppp
p
ppp
pppppppppppppppppppppppppppp
ppppppppppp
p
pppp
pppppppppp
pp
pp
p
ppppp
p
ppppppppp
pppppp
pppppppppppp
pp
pp
ppp
pp
ppppppppppppppppppppppppppppppppppppppppp
pp
ppppppppppppppppppppppppppppp
pp
p
p
p
p
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
pppppp
p
p
p
p
p
p
p
p
p
p
p
p
pp
pppppp
p
p
p
p
p
p
p
p
p
ppppppppppp
ppppppppppppppppppppppppp
p
pppp
p
ppp
p
p
pppppppppppppppp
pp
ppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
pp
p
p
p
pppp
p
p
p
p
pppp
p
p
p
pppp
p
p
p
p
p
pppppppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
ppp
p
p
pp
ppp
p
p
p
p
p
p
ppppp
p
p
p
p
p
ppp
p
p
p
p
p
p
ppppppppppppp
pp
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
ppppp
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
ppp
pp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
pp
p
p
p
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.
c 2006, 2007 Jarmo T. Alander. These are the revised (February 1, 2007) web notes of a lecture of Java usage for DSP.
1
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 2
n
can be done efciently . . . . . . . . . . . . . . . . . . 6
3 Methods 7
3.1 Methods and classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.2 Example 1: constant vector or signal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.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
Java & DSP CONTENTS
Trademarks
Java is a registered trademark of Sun Microsystems, Inc.
This document was typeset by the author using Leslie Lamports L
A
T
E
X(http://www.latex-project.org/)
extension of Donald Knuths T
E
Xtypesetting systemand Beamer (http://latex-beamer.sourceforge.net/)
extension of L
A
T
E
X for slides.
3
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 inuenced this tutorial include
Prof. Jarmo Alander: rst 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 difculties 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 exible 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
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 difcult 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 ...
1
This is really true.
2
The 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
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, signicant 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) -2
63
... 2
63
1
float 4 bytes (32 bits) 3.410
38
about 7 decimal positions
double 8 bytes (64 bits) 1.710
308
about 15 decimal positions
2.1 Arithmetic operations
Evaluating a formula in oating 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 oating point scaling.
Avoid subtraction of nearly equal values. Again the oating 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 oating point values we can avoid some problems, while unfortunately geting
some integer dependent problems like imprecise function values. A decent compromise is xed point
numbers 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 signicant digit positions.
2.2 Division and multiplication by 2
n
can be done efciently
In case we have division (or multiplication) of a binary coded integer by 2
n
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 rst operand to the right by the amount given as the second operand
(here 3; 2
3
= 8). The reverse -operator can be used when multiplication by 2
n
is needed:
16*i is equivalent to i4.
6
Java & DSP 3 METHODS
3 Methods
In what follows we will briey 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 denitions. 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 rst 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<n; i++) // n rounds
R[i] = c; // just do it
return R; // ready
} // end of constant
The program symbols have the following meanings:
/** */ Text within /* */ and after // is comment that is skipped by the compiler/interpreter. Extra
* is used here for automatic documentation (the method listing in appendix XX is done using these
comments). Comments are very important for the human reader. Always comment your code when
coding, afterwards you may have forgotten the great ideas the code is based on.
public We allow this method to be used quite freely. Later we will protect some methods that can be
dangerous in wrong hands.
static This method can be used without an object. We use class only to collect subroutines and
functions together as a package.
int[] This method is a function returning an integer vector value. We can call this method in formulas
where vectors i.e. integer arrays are needed. Brackets [] after an array are essential and every
pair corresponds to one dimension or index. Here we have one pair of brackets so that the array is
one-dimensional. An array symbol without brackets is valid and means the whole array, when we
pass an array as a parameter.
constant is the name of this method. The parenthesis () after the method name and surrounding the
parameters are essential: All methods have parentheses whether or not they have any parameters.
Unlike in many languages, we can have several methods with identical names, if and only if they
differ by the number and/or types of their parameters. This is called overloading the name of a
function. A similar naming systems is also used in C++, where in addition the operators may be
overloaded.
int n Declaration of parameter n of type integer. All parameters, and variables must have type, which
is given by a type declaration. Parameters are separated by a comma , and like local variables they
are not available outside the method denition.
7
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<n; i++) a for-loop from i=0, 1, 2, ... until i=n-1. This is the famous C-
language for-loop, where in addition to C, you can also dene the loop index int i, which is only
visible within the loop. A good programming practise is to avoid using non-local index variables.
R[i]=c; constant integer value c is assigned as the ith item of vector R. This is the core of our rst
method: using the for-loop the vector R to be returned is lled with contant integer values c. Observe
that = is an assignment of value, not comparison for equality, which is the operator ==. A
common mistake in C/C++ or Java is the confusion between the assignment = and comparison ==
-operators.
return R; The value of this method (R) is returned. return should be the last command to be executed
in a method returning a value as the by-product of calling the method. It is a jump back to where
this method was called and R is put to stack for further processing, if this method was called from
an expression. Stack is used in the evaluation of expressions. It is not necessary to use the returned
value, if there is no reason to do that.
We can now use our constant() method to create constant integer vectors:
int[] ZeroVector = constant(3,0);
which creates a vector:
{0, 0, 0}
Observe, that in the method call we do not have any types, only colons separating the parameters.
3.3 Errors
The following code line contains several errors:
constant(1.5) = int OneVector,
1.5 Method constant should have two parameters, instead of one (1.5), which is actually a oating
point number.
int The type of method constant is an integer array (int[]), which is not the same as an integer (int).
= The assingment is from right to left, while all expressions are evaluated primarily from left to right,
depending on parenthesis and priorities of operators. The order must be due to historical reasons,
only.
, Every command ends at semicolon ;, not comma ,, or full stop ., or any other character.
The errorless code is as follows:
int[] OneVector = constant(1,5);
which creates the vector {1,1,1,1,1} and assignes it to a variable called OneVector.
In practise the computer, actually the Java interpreter, will tell you that something is wrong in similar
situations. However, sometimes the computer is not so good at guessing what you might have tried to say
to it.
Little by little you will understand the computer/compiler/interpreter betterthe reverse is not true.
8
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, and
i, j
= 0, when i = j, outputting an
integer 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<0) return x; // check n
// in case of invalid n do nothing (return x)
int W = 2*n+1; // window size
int N = x.length; // length of x
int[] R = new int[N]; // reserve space for result
for(int i=n; i<(N-n); i++) // scan x
{ //
int S = x[i], I = i-1, J = i+1; // window centre
for (int j=0; j<n; j++) // scan half window
{ //
S += x[I-]+x[J++]; // sum in window
} //
R[i] = S/W; // the average
} //
return R; // ready!
} // end of moving average
Some comments on method moving():
if(n<0) return x; Parameter value n is checked: if it is invalid (<0) then nothing is done i.e. x is
returned unchanged. Observe that x is not automatically returned but must be returned explicitly.
int W = 2*n+1; An odd window size is assumed to have a middle element.
int N = x.length; Size of x retrieved by the length attribute of a class/object integer array. All Java
arrays are objects of an array class (or its subclass) and have several methods and attributes inluding
length of obvious semantics.
for(int i=n; i<(N-n); i++) The n outermost items are left unchanged: i = n, n+1, ..., N-n-1.
int S = x[i], I = i-1, J = i+1; Integer variables S, I, and J are dened and assigned. Observe
the colon , between the variables instead of semicolon ;, which ends the integer denition list. This
is a short hand notation of int S=x[i]; int I=i-1; int J=i+1;, which is a short hand notation
of int S; S = x[i]; int I; I = i-1; int J; J = i+1;. This is a nice example of how there
are often many ways of doing things in coding.
9
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 efciency 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 efcient 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 nished program every division should be checked to be valid. W should not be zero,
which is true because W=2*n+1= 0, for n IN.
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 gure 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 output
types, 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 denition 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 ltering example. Our task is to
apply the moving average lter 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 lter
W= 22+1 = 5.
Our codeline is shown in the graphical representation of gure 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
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 of x
int[] R = new int[N]; // reserve space for result
for(int i=1; i<N; i++) // scan x
{ //
R[i] = x[i]-x[i-1]; // the difference
} //
return R; // ready!
} // end of derivative1
derivative1 applied to the output of our previous example is shown in gure 3.
S1 S2
derivative1
- -
int[] S2 = derivative1(S1);
r r
r r r r r r
r r r
r
r r r r r
r
r r
Figure 3: Application of method derivative1 to the output of our previous example.
Exercise 3.3 Implement a method to evaluate the given nth derivative. Apply it to the output of a delta
function method.
3.9 Example 5: method add
Our next method called add will sum two time series.
public static int[] add(int[] s1, int[] s2) //
/** sum series s1 and s2 */ // add time series s1 and s2
{ //
// assume s1 and s2 are of equal size
int N = s1.length; // length of s1
int[] R = new int[N]; // reserve space for result
for(int i=0; i<N; i++) // scan s1 and s2
{ //
R[i] = s1[i]+s2[i]; // the sum
} //
return R; // ready!
} // end of add
add applied to the input and output of our previous example is shown in gure 4.
3.10 Example 6: FIR
Finally we will look what a simple 1-dimensional FIR lter looks like in Java. Observe that in the solution
arithmetics is done between integers. Only one division is done per point.
Observe also that the input is multiplied by 10 before ltering by method mult.
public static int[] FIR(int[] x, int[] a) //
11
Java & DSP 3 METHODS
int[] S4 = derivative1(add(S1,S2));
S1
S2
S1+S2
S4
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 lter; coeff a
{ //
int N = x.length; // length of x
int M = a.length; // length of a
int[] R = new int[N]; // reserve space for result
int W=0; //
for(int i=0; i<M; i++) //
W+=a[i]; // sum a for division
for(int i=M-1; i<N; i++) // scan x
{ //
int S = 0; // sum=0
for (int j=0; j<M; j++) // scan a
{ // sum
S += x[i-j]*a[j]; // the convolution
} //
R[i] = S/W; // only one division
} //
return R; // ready!
} // end of FIR
int[] A = {1,2,1};
int[] S5 = FIR(mult(10,S3),A);
S3
A={1,2,1}
S5
10*
FIR
-
-
-
r
r
r r r r r
r
r r
r
r
r r r
r r
r
r r
Figure 5: Application of method FIR using coefcients {1,2,1} to the time series 10S3 of our previous
example.
Exercise 3.4 Implement the above FIR method by using a method called mult, which multiplies a time-
series with a given constant k.
Exercise 3.5 Implement a method returning a random time series. Use FIR to lter a random time series.
Exercise 3.6 How could you implement a method doing unsharp masking using a FIR method?
3.11 Example N (long): NIRS
As a more realistic signal processing example we will next process some measured near-infrared spectra
(NIRS).
12
Java & DSP 3 METHODS
Figure 6 below shows a typical NIR spectrum of human skin taken for clinical research purposes. You can
nd 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 p p p p p p
p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p
p
p
p p p p p p p p p p p p p p p p p p p p p p p p p p p p p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p p p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p p p p p p p p p
p
p p
p
p
p
p p p p p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
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 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 nd them we try to lter away the background by derivating the
spectrum by our derivative1 method. The result is shown in gure 7.
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
pp
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
p
p
ppp
p
p
ppp
pp
p
p
p
pp
p
p
pppp
p
pp
p
pp
p
p
pp
pp
p
p
p
p
p
p
p
p
p
p
p
ppp
p
pp
p
p
pppppppppppp
p
ppppppp
pp
p
p
pppp
p
ppppp
p
pp
p
pppppp
p
ppp
p
p
pppppppppppp
p
pppppppppppppppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pp
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
pp
pppppppppppppp
p
pp
ppppp
ppppppppppppppp
ppp
p
p
p
p
p
p
pp
p
p
p
p
pp
p
pp
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
pp
p
p
p
p
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 7: The rst 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 gure 8.
Exercise 3.7 Method der101 estimates the derivative of a series x by formula x[i] = x[i+1]-x[i-1].
Implement method der101 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
Java & DSP 3 METHODS
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
pp
p
p
p
p
p
p
p
pp
pp
pp
p
p
p
p
p
pp
p
pp
pp
p
p
ppppp
p
pp
pp
pp
p
p
p
p
p
ppp
pp
p
p
pp
p
pppppp
p
ppp
pp
ppppp
ppppppppppppppppp
pppp
p
p
ppp
pp
pp
pppppppppppppppp
ppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
ppppp
p
p
ppp
p
ppppppp
p
pp
p
pppppp
p
ppppppppppppppppppppppppppppppppp
p
p
ppppppp
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppppp
pp
p
p
pppp
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
pppp
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
pp
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
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 rst 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 rst 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 dene 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 rst 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 gure 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 of x
int[] R = new int[N]; // reserve space for result
for(int i=0; i<N; i++) // scan x
{ //
double r = Math.abs((double) x[i]); // convert abs(x) to double
R[i] = (int)(a*Math.sqrt(r)); // sqrt
if (x[i]<0) R[i] = -R[i]; // sign of x
14
Java & DSP 3 METHODS
} //
return R; // ready!
} // end of special sqrt
Observe, that the x values are rst converted into double precision because the mathematical methods
assume that parameter type.
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
p
pp
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
pp
p
p
p
pp
pp
p
ppp
p
p
p
p
p
p
ppp
p
p
p
p
p
p
ppp
pp
p
p
pp
pp
p
pp
p
p
p
p
pp
ppp
pppp
p
ppppp
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
pp
pp
pp
p
p
p
p
pp
p
p
p
p
p
pppppp
p
pp
p
pp
p
p
p
p
p
ppp
ppp
p
pp
p
p
p
p
p
p
pp
pp
pp
p
p
p
p
p
pp
p
p
ppp
p
pp
p
p
p
pp
pp
ppp
p
pp
pp
pppp
ppp
pppp
p
p
pp
pp
ppp
p
pppp
ppppppp
p
ppp
p
pp
p
p
p
p
p
pp
pppppppp
p
p
p
p
pp
pppp
p
p
p
p
ppp
pp
pp
p
pp
p
p
p
p
p
p
pp
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
ppp
pppppp
ppppp
pppppp
ppppp
p
p
p
pp
p
p
ppp
p
pp
p
ppp
pp
ppp
p
pppp
ppppp
ppp
p
pppppp
ppppppppppppppppp
pppp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
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
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
pp
pppppppppppppppp
pppppppppp
p
ppp
p
ppp
ppppp
pp
p
ppp
pp
pppp
ppp
p
pppp
pppp
p
p
ppp
pp
p
p
p
p
p
pp
p
p
pp
p
p
p
p
p
p
p
p
pp
pp
p
p
p
p
p
p
p
p
pp
ppp
p
p
pp
p
pp
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
pp
p
pp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
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 9: Square root of the derivative of the above NIR spectrum using der101 method for spectrum A
p
p
p
p
p
p
p
p
p
p
p
pp
pppppp
p
ppp
pppppppp
p
ppppp
ppppp
ppppp
pp
pp
p
ppppppppp
p
p
ppp
p
pp
ppppp
pp
pppp
pppp
pppp
p
ppppppppppppp
pp
ppppp
pppppppppppppppp
pp
ppppppppppppp
pppp
ppppppppp
ppppp
ppppppp
ppp
ppp
p
ppppppppppppp
ppppppp
ppppppppppppppppppp
ppppppppppppppppp
ppp
p
pp
pppppppppppp
ppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppppppp
pppp
pp
pppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppp
p
p
pppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pp
pp
p
pp
p
ppp
pppppppppppp
pp
pp
p
p
pp
p
pp
pp
ppppppppp
ppppppppppp
pp
p
p
pp
p
p
p
p
p
p
p
p
p
pppppppppppppppppppppppppp
p
p
p
p
p
p
pp
ppp
pppppppppppppppppp
ppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppppppppppppppppppppppppppppp
pppppppppppp
ppppp
ppp
ppp
pppp
ppp
pppp
ppp
p
p
p
p
p
p
p
p
p
ppp
p
pppp
p
p
p
p
p
p
p
p
ppppp
pppppppppppppp
pp
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
ppppp
ppppppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pppp
p
pp
p
p
p
p
p
p
pp
pp
p
p
pp
p
p
p
p
p
pp
ppppppp
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
p
p
p
p
ppppppp
p
ppppp
ppppppp
p
pppp
p
ppppppppp
p
p
p
pp
pppppppppp
p
pppp
p
pp
ppp
pppp
p
p
pp
pppppp
ppppppppppp
pp
ppp
ppppppp
p
p
pp
ppp
ppppppppppppppppp
pp
pppppp
p
pp
ppppppppppppp
p
pp
pppp
p
pppppp
pp
pppp
ppppppp
pppppppp
ppppppppppppppppp
pppp
ppp
ppppppppp
pppp
ppppp
ppppp
pppp
p
pp
pppppp
ppppppppppppppppppppppppppp
ppppppp
ppppppppppp
pp
pp
ppppppp
p
ppp
p
ppppppppppp
p
ppppppp
pppppp
ppppppppp
p
p
p
p
pp
p
ppppppp
pp
p
p
p
ppp
ppp
p
pp
p
p
ppppp
ppppppppppppp
pppppp
p
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppppppppppppppp
p
p
p
p
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
ppppppppppppppppppppppppppppppppppppppppppppppp
p
pp
p
p
p
p
pp
ppppppppppppp
pp
pp
p
p
pp
p
p
pp
p
pp
ppppppp
pp
p
pppppppp
pp
p
p
p
p
p
p
p
p
p
p
p
p
pppppppppppppppppppppppppppppp
p
p
p
p
p
p
ppp
ppppppppppppppp
ppppp
ppppppp
pppppppppppppppppppppppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppppppppppppppppppppppppppppppppppp
ppppppppppp
ppp
ppp
ppp
pppp
ppppp
pppppp
ppppp
ppp
p
p
ppp
ppp
p
p
p
p
p
p
p
p
ppp
p
p
p
p
ppp
p
p
p
p
p
p
ppppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
pppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
pp
ppp
p
p
p
p
p
p
p
p
p
p
p
p
ppp
ppppppppppppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
ppppp
p
p
p
p
p
p
pppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pppp
pp
p
p
p
p
p
p
p
p
p
p
p
p
pp
ppppppp
1000 1200 1400 1600 1800 2000
Figure 10: Noise range for spectrum A compressed with Sqrt.
The effect of derivation on noise level is demonstrated in gure 12 where der101 is used twice to
estimate the second derivative, The coefcients of the FIR lter are
AveD = {4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4}.
We can easily get worse results by applying derivative1 twice without any smoothing as can be seen in
gure 12.
The strength of signal processing can be seen clearly in gure ??, where the second derivatives of
several spectra are shown. While even the details of the rst derivative are practically impossible to detect
15
Java & DSP 3 METHODS
with the naked eye on the original spectra, it is much more difcult to detect the details of the second
derivative. And indeed, the second derivative seems to contain details that the different spectra i.e. different
measurements on different persons share. Most of the details would drown without this kind of simple
signal preprosessing.
If the information is therejust persuade it with DSP.
p
p
p
p
p
p
p
p
p
p
p
p
p
ppppp
ppppp
p
p
ppp
ppppppppp
pp
p
p
ppppppppppp
pp
p
p
pppp
pp
p
p
p
p
p
pp
pp
p
p
p
p
pp
p
p
pppppppp
p
pppppppppppppppppppp
p
p
p
p
p
p
p
p
p
ppppppppp
p
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
ppp
p
ppppppppp
p
ppppppppppppppppppppppppp
p
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
pppp
p
pppp
ppppppppppppp
pp
pp
pppppppppp
p
p
pppppppppppppp
pp
ppppppppppp
pppp
ppppppp
ppppp
p
pp
pppp
ppp
p
ppppppppppppppppp
p
ppppppppppppppppppppppppppppppppppppppp
p
pp
pp
p
pppppppp
ppppppp
p
p
ppppppppp
p
ppppppp
ppppp
pppppppppppppppppppppppp
p
p
p
p
p
ppppp
p
p
p
p
ppppp
p
p
p
p
p
ppppppp
p
p
pp
p
pppp
ppp
ppp
p
p
pp
p
ppppppp
p
p
ppp
ppppppppppppppppp
p
ppppppp
p
ppp
pppppp
pppppp
p
pppp
pp
ppp
p
p
p
p
p
pp
p
pp
pppp
p
pp
pp
pp
p
pp
p
p
pp
pp
ppppp
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
pp
p
pp
pppppp
p
ppppppppp
pp
p
ppppppppp
ppp
ppp
pp
p
pp
pp
p
pp
pp
p
pp
ppp
pppp
pppp
pppp
pp
p
pp
p
ppp
p
ppp
ppppp
ppp
ppp
pp
p
p
pp
p
p
pp
p
p
p
pp
p
p
pppp
pp
p
p
ppp
pp
p
p
p
pp
pppppppp
pppp
ppp
p
pp
pp
p
ppp
pp
pppppppppppppppppppppppppppppppppppp
p
pppp
pp
p
ppp
pp
pp
ppppp
p
ppppppppppppppppppp
p
pppp
p
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pp
pp
pp
pppppppp
pppppppppp
pppppp
p
pp
pp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppppppppppppppp
ppp
pppppppppppppppp
pp
pppppppppppppp
pppppp
p
pppppppppppppppppppppppppp
ppppp
ppp
p
pp
p
ppppppppppppppppppppppppppppppp
ppp
pp
ppppp
ppppppppppppp
ppppppppppp
ppp
pp
ppppppppppppppp
p
p
p
p
p
ppppppppppp
pp
p
p
pp
pppppppppppp
pp
p
pppppp
p
pppppppppppppppppppppppp
ppppp
pppppppppp
p
ppppppppp
ppppppppppppppppppppppp
pppppppppppp
p
p
pppppppp
p
pppppp
p
p
ppppp
p
p
pppppp
pp
pppppppp
p
p
p
pppppppppppppp
pppppp
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
ppppppp
p
p
pp
pppppppppppppp
p
p
p
p
pppppp
p
ppppppppppppppp
p
p
p
ppppppppp
p
p
p
p
ppppppp
p
p
p
p
pp
pppp
pp
p
p
ppppppp
p
p
p
pppppppp
p
p
pp
pp
p
p
p
p
p
pp
p
p
p
pppppp
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
pp
p
p
p
p
ppppppppp
pppp
pp
p
p
p
p
p
ppp
p
pp
p
p
pp
p
p
p
p
p
ppppp
ppppp
ppppp
pp
p
p
p
ppppppp
pp
ppp
p
p
pp
pp
pppppp
pp
pp
p
p
p
pppppppp
p
p
p
ppp
p
pppppp
ppppppp
pp
pp
p
pppp
pp
p
ppppppppp
p
p
p
p
pp
pp
ppp
p
p
ppp
ppp
pp
pp
pp
ppp
pp
pp
pppp
pppppp
pppppp
pp
pppp
p
pppppp
p
pp
p
pppp
pp
pppppppppppppppp
pp
pp
p
ppp
p
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
pp
p
ppppppppp
pppp
p
ppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppppppppppppppp
pp
pppppppppppppppppp
ppp
ppppppppppppppppp
pp
pppppppppp
pppppppppppp
pppppppppppp
pppppppppppppppppppppppppppppppppp
p
pp
ppp
pp
pp
pppppppppppp
pppppppppppp
pp
pppppppppppppppppp
p
p
p
p
p
p
ppppppppp
ppp
p
p
p
p
pppppppppppppp
p
ppppppp
pp
ppppppppppppppppppppp
ppppppp
ppppppppp
ppp
pppp
ppppp
pp
ppppp
ppp
pp
p
pp
pp
pppppp
ppp
pp
pppp
pp
p
p
pppp
ppppp
p
p
p
ppppppp
p
p
ppppp
p
ppppppppppppp
pp
p
pppppppppppp
pppp
pppp
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
pppp
p
p
p
p
p
p
ppppppppppppppp
p
p
p
pp
p
p
pp
pppppppp
pp
p
p
pppppppppppppppp
p
p
p
p
ppp
pppppppp
p
p
pppppp
p
ppp
p
p
p
ppppp
p
p
pppp
p
pp
p
pppp
p
p
p
p
pppp
pp
pppppp
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
pp
pp
pp
p
p
ppp
p
ppppppp
p
ppp
pppp
ppp
p
ppp
p
pppppppp
pp
pp
ppppppppp
pp
p
pppp
p
p
p
pppp
pp
ppppp
pp
pp
pppppp
pp
ppppp
ppp
ppppppppppp
p
ppppppppp
ppp
pppp
pp
ppppppp
p
ppppp
pp
p
p
pp
pppp
ppp
pppppp
ppp
ppp
p
pp
pp
p
pppp
p
pppppppppppp
p
pppppp
p
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pp
pppppppp
pppppppppp
pppp
pppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppppppppppppppp
pp
pppppppppppppppp
ppp
ppppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppp
p
pppppppppppppppppppppppppppp
pppppppp
pp
p
pppppppppp
pppppppppppppp
pp
pp
ppppppppppppppp
p
p
p
p
pp
pppppppppp
pp
p
p
p
ppppppppppppp
pp
p
ppppppp
ppppppppppppppppppppppppp
ppp
pppppppppp
pp
ppppppppp
pppppppppppppppppppppp
p
p
ppppppppppp
p
pppppppp
p
p
ppppppp
pppppppp
pp
ppp
p
pppppppppp
p
p
p
ppppppppppp
pppp
ppppp
p
p
p
p
p
p
p
p
pppp
p
p
p
p
p
p
p
p
pppp
p
p
p
p
p
pppppp
pppppppppp
pp
p
pppppp
p
pppppppppppppp
p
p
p
pppppppppp
p
p
p
p
ppppppp
p
p
p
p
pppppppp
p
p
ppppppp
p
pppppp
ppppp
p
p
p
ppp
ppp
p
p
p
p
pp
pppppp
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
p
p
p
p
pppp
pp
pppppppppp
p
pp
p
ppppppp
p
pp
ppp
pppp
p
p
p
p
p
pp
ppp
p
p
p
ppp
p
ppp
pppp
pp
pp
ppp
ppppp
ppp
p
pp
pp
p
ppppppppppppp
pp
p
p
p
p
p
pp
p
p
ppp
pp
pppp
p
p
pp
pppp
pp
pp
ppppppppppp
p
pp
pp
ppp
pp
pppppp
pp
pppppppppppppppppppppp
pp
ppppp
pp
pppp
p
ppppppppp
p
pppp
p
pppppp
p
pppppp
pp
pp
pp
pp
p
ppp
pp
pppppp
p
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
ppppppp
pppppppppp
pppppppppp
p
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppppppppppppppp
pp
ppppppppppppppppp
ppp
pppppppppppppppppp
pp
pppppppppp
pppppppppppp
pppppppppppp
pppppppppppppppppppppppppppppppppp
p
pp
pppp
pp
pp
ppppppppppp
pppppppppppp
pp
pppppppppppppppppp
p
p
p
p
p
pppppppppppp
p
p
p
p
p
pppppppppppppp
p
pppppp
p
pppppppppppppppppppppppp
pppppp
ppppppppp
ppppp
p
ppppppp
p
ppppp
p
pp
pppppppppp
ppppppp
pppppppp
ppppppppppp
p
pppppppp
p
pppppp
p
p
pppppppppppp
p
ppppppppppppp
ppp
pppppp
p
p
p
p
p
p
p
pppp
p
p
p
p
p
p
p
pppp
p
p
p
p
p
p
pppppp
p
ppppppppppp
p
pp
pppp
pppppppppp
p
p
p
ppppppppppppppp
p
p
p
ppp
p
p
pp
ppppp
p
pppppp
p
p
p
pp
p
p
ppppppp
p
ppppp
p
p
p
p
pp
pp
ppp
p
p
p
p
pp
pppppp
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
pp
p
p
p
p
pp
p
p
p
p
pp
p
ppp
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
p
pp
p
p
pp
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
pp
p
pp
p
p
p
p
p
pp
p
p
p
p
p
pp
pp
p
p
pp
p
p
pppp
pp
p
p
p
p
p
p
p
pp
pp
p
pp
pp
p
pp
pp
p
pp
p
p
p
p
p
ppp
pp
p
pp
p
ppp
ppp
pp
p
pp
p
p
p
p
pp
pp
p
p
p
pp
p
pp
p
p
p
p
p
p
p
pp
pp
ppppp
pp
p
p
pp
ppp
ppp
p
pp
p
p
pp
p
pp
pp
pppp
pp
p
p
p
pp
pp
ppp
ppp
p
p
p
p
p
pp
pp
p
p
p
p
pp
pp
pp
p
p
p
p
p
ppp
p
pp
p
ppp
pp
p
pp
p
pp
pp
pp
p
pp
p
pp
pp
pp
p
p
p
p
p
pp
p
p
pp
ppppp
p
pp
p
p
p
p
pp
pp
pp
p
pp
pp
ppp
p
p
p
p
pp
pp
pp
pp
pppp
p
p
pppp
p
p
p
p
pp
ppp
p
pp
p
ppp
pppp
pp
p
p
p
p
p
p
p
ppp
p
p
pp
p
pppp
p
pppp
pp
pppppppppppppppppppppppppppppppppppppppppp
p
pppppppppp
p
pp
p
p
p
pp
p
p
pp
pppp
p
p
p
pppppppppppppppppppp
p
p
p
pppppppppppppp
ppppppppppppppp
p
ppppppppppppppppp
p
pppppppppppppppppppp
pp
pp
ppppppp
pp
pp
ppp
pppp
pp
ppppppppppp
ppppppppppppppppppppppppp
p
pppppppppp
pp
p
pppp
pp
p
ppppppppppppp
pppppppppppp
ppppppppppppppppppp
p
p
p
p
p
pppppppp
pp
p
p
p
p
pppppp
pppp
ppppp
p
ppppp
pp
p
pp
p
ppppppppppppp
ppppppp
p
ppp
pppp
pppp
pppp
p
pppppp
pp
ppppp
ppp
pppp
pp
p
pp
pppppppp
pp
pppppp
p
p
pp
p
pp
pp
p
pp
p
p
p
pp
p
pp
pp
pp
p
ppppp
p
pp
p
p
p
pp
p
p
p
ppppppp
p
p
pppppppppppp
pp
p
p
p
pppp
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
pppp
p
p
pp
pp
p
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
pp
p
p
p
pp
p
p
p
p
ppp
p
ppp
p
pp
pp
pp
ppp
p
p
pppppp
p
p
p
p
p
ppppp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
pp
p
p
ppp
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
pp
ppppp
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
pp
p
p
p
p
pp
p
pp
p
p
pp
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
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
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
pp
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
pp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppppp
p
pp
p
p
p
p
p
p
p
pp
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
ppp
p
p
p
p
p
pp
p
p
p
p
pp
p
p
p
p
p
p
pp
p
pp
p
p
p
pp
p
ppppp
p
pp
pppp
p
p
p
pp
p
p
p
p
p
p
p
pp
p
p
p
p
p
pp
p
p
p
p
p
p
p
pp
pp
pp
pp
p
p
p
p
p
p
pp
pppp
p
pp
p
p
p
p
p
ppp
pp
p
p
p
ppp
p
pp
p
p
pp
pp
p
pp
p
p
p
pp
pp
ppp
p
pp
p
pp
pp
pp
p
p
pp
pp
ppp
p
p
p
p
p
p
pp
p
p
p
p
pp
ppppp
p
pp
p
pp
ppp
p
p
p
p
p
p
p
pp
pppp
p
p
p
p
ppp
p
ppp
p
p
p
p
p
ppp
p
p
p
pp
pppppppp
p
pppppp
pp
p
pp
ppp
ppppppp
ppppp
p
p
p
pppp
p
pp
pppppppppppppppp
p
ppp
pppppppppppppppppppppppppppp
ppppppppppp
p
pppp
pppppppppp
pp
pp
p
ppppp
p
ppppppppp
pppppp
pppppppppppp
pp
pp
ppp
pp
ppppppppppppppppppppppppppppppppppppppppp
pp
ppppppppppppppppppppppppppppp
pp
p
p
p
p
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
pppppp
p
p
p
p
p
p
p
p
p
p
p
p
pp
pppppp
p
p
p
p
p
p
p
p
p
ppppppppppp
ppppppppppppppppppppppppp
p
pppp
p
ppp
p
p
pppppppppppppppp
pp
ppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
pp
p
p
p
pppp
p
p
p
p
pppp
p
p
p
pppp
p
p
p
p
p
pppppppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
ppp
p
p
pp
ppp
p
p
p
p
p
p
ppppp
p
p
p
p
p
ppp
p
p
p
p
p
p
ppppppppppppp
pp
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
ppppp
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
ppp
pp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
pp
p
p
p
pppppp
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
ppppp
pp
p
p
pp
p
pp
p
p
p
p
p
p
p
p
p
p
p
pp
p
ppp
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
pp
pp
p
pp
pp
p
pp
p
p
pp
p
p
pp
p
p
pp
p
pp
pp
p
ppp
p
p
p
pp
pp
p
p
p
pp
p
p
p
p
pp
p
p
p
p
pp
p
p
p
p
p
pp
pp
p
p
p
pp
p
p
pp
p
p
p
p
p
p
ppp
p
pp
p
p
p
p
p
p
p
p
p
p
pp
pp
p
ppp
p
p
pp
p
p
p
p
pp
p
p
ppp
p
p
p
p
pp
p
pp
p
p
pp
pppp
pp
p
pp
p
p
p
pp
pp
p
p
pp
p
pp
p
pp
pp
p
p
p
p
p
pp
pp
pp
pp
p
p
p
pp
p
p
p
p
pp
pp
pp
pp
p
p
p
p
p
p
p
p
p
pp
p
pp
p
p
p
pp
p
pp
pp
ppp
pp
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
pp
p
p
p
p
p
p
ppp
p
p
ppp
ppp
p
pppp
p
pp
pppp
pp
ppp
pp
pp
pp
pppp
p
p
p
pp
p
ppp
pppp
pppp
pp
p
p
p
ppp
p
pp
pp
ppp
p
pp
p
pppp
pp
p
p
pp
pp
pp
p
pp
pp
ppp
pp
pp
p
pppp
p
p
p
p
pp
ppppppp
pp
ppp
ppppppp
pppp
pppppppppppppppppp
pp
p
pppppppppppppppppppppp
pp
pppppp
p
p
ppp
p
p
pp
pp
pp
pp
p
pppp
p
p
pppp
p
ppp
pp
p
pp
pp
p
p
pp
ppp
ppp
pp
pp
pppppp
pp
ppp
pp
ppp
pp
pp
ppppppppppppppppppp
pp
pppppppppppp
ppppppppppppppppppppp
pppppppppppppppppppppp
pp
p
p
ppppppppppppppppppppppp
p
p
p
pppppp
pp
p
p
pppppppppppppppppppppp
p
p
p
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
pppppp
p
p
p
pp
p
p
p
p
p
p
p
p
p
pppppp
p
p
p
p
p
p
p
p
p
p
p
ppppppppppp
ppppppppppppppppppppppp
p
pp
p
pp
pp
p
p
p
ppp
ppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
pp
p
p
p
p
ppp
p
pp
p
p
p
p
p
ppp
p
p
p
p
pppppp
p
p
ppppppppppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
pp
pp
pp
p
p
p
ppp
p
p
pp
p
pp
p
pp
p
p
p
p
pp
p
p
p
p
p
p
p
p
ppppppppppppp
p
p
p
p
p
p
p
pppp
p
p
p
p
p
pp
p
p
p
p
p
p
pp
p
pp
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pppppp
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
p
p
p
ppp
p
pp
p
p
p
pp
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
p
pp
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
pp
p
p
ppp
p
p
p
p
ppp
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
ppp
ppp
pp
pp
p
pp
pp
p
p
ppp
p
p
p
p
p
ppp
p
p
p
p
pp
p
p
pp
p
p
pp
p
p
p
p
p
pp
pp
pp
p
pp
p
pp
p
p
p
pp
p
pp
p
pp
ppp
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
pp
p
p
p
pp
pp
pppp
p
pp
p
p
p
ppp
p
p
p
p
ppp
p
p
p
p
pppp
p
pp
p
p
pp
p
p
pppp
pp
p
p
p
p
p
p
p
pp
p
p
p
p
p
pp
ppp
pp
pp
pp
p
pp
p
p
p
p
p
p
pp
p
p
pp
p
pp
ppp
ppp
p
pp
p
p
pppp
p
p
ppp
pp
p
p
p
p
p
p
p
ppp
p
pp
p
pppp
p
p
p
p
p
pp
p
p
pp
pp
pp
pp
pp
p
ppp
p
pp
p
pp
pp
p
pp
ppp
pp
ppp
p
p
p
p
p
p
pppp
pp
pppp
p
ppppppppp
pppppppppppppp
pp
p
pppppppppppppppppppppp
pp
ppppppppppppppppppppppppp
pp
p
p
pp
p
pp
pp
pp
p
p
pppppp
p
p
p
p
ppp
ppp
pppppp
pp
pp
ppp
pp
pp
pppp
p
ppppppppppppppppppppppppppppppppppppppppppppppp
p
ppppppppppppppppppppppppppp
p
p
p
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
ppp
pp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
pp
ppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppppp
p
p
p
p
p
p
p
p
p
p
ppppppppppppp
pppppppppppppppppppppp
p
ppp
pp
ppp
p
p
p
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
pp
p
p
p
ppppp
p
p
p
p
ppp
p
p
p
pppp
p
p
p
p
p
pppppppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
pp
p
p
p
p
p
p
p
pppp
pp
p
p
p
p
pppp
p
p
p
p
p
pppppppppppppp
p
p
p
p
p
p
pppp
p
p
p
p
p
p
p
ppppp
p
p
p
p
p
p
p
pp
p
p
p
p
p
pppp
p
p
pp
ppp
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
pppppp
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
pp
p
p
p
p
pp
pp
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
pp
p
p
p
p
pp
p
p
p
p
pp
pp
p
p
p
p
p
p
p
p
p
p
p
p
pp
pp
p
pp
p
pp
pp
p
p
p
p
p
p
p
pp
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
pp
p
p
p
pp
p
p
p
p
pppp
p
p
p
p
pp
p
p
p
pp
p
p
p
pp
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
ppp
p
p
p
p
p
pp
p
p
p
p
p
p
p
pp
pp
pp
p
ppp
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
pp
pp
p
p
p
p
p
p
p
pp
pp
p
p
p
pppp
p
pp
pp
p
p
p
p
p
p
pp
p
pp
p
p
p
ppp
p
pppp
p
pp
p
p
p
p
p
p
p
pp
pp
pp
p
pp
p
pp
p
p
p
p
p
p
p
pp
p
pp
pppp
pp
p
p
ppp
ppp
p
pp
p
p
p
p
p
pp
pp
pp
pp
pp
p
p
p
p
p
pp
pp
p
pp
p
pp
p
p
pp
p
pp
p
p
p
ppp
pp
pp
pp
p
p
p
pp
pp
p
p
p
p
pp
pp
p
pp
pp
p
pp
pp
p
p
p
pp
p
pp
pp
p
p
ppppp
pp
pp
p
pp
pp
p
p
ppp
p
ppp
ppp
ppp
p
pp
pp
p
ppp
p
pppppppppppppppppp
pp
p
ppppppppppppppppppppppppp
ppppp
p
pppp
pp
p
p
pppppp
pp
p
p
pp
pp
pp
pppp
pp
p
p
pppppp
pp
ppp
pp
ppp
p
pp
ppp
pp
p
p
p
pp
pp
pp
p
pp
pppp
p
pppp
pp
ppppppppppppppppppppppppppppp
p
pppppppppppppppppppppppppppppppppppppp
p
p
p
p
pppppppppppppppppppppp
p
p
p
ppppppp
p
p
p
pppppppppppppppppppp
pp
p
p
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
pppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pppppp
p
p
p
p
p
p
p
p
p
pppppppp
ppppppppppppppppppppppppppp
p
pp
ppp
pp
p
p
pp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
pp
pp
pp
p
p
ppp
p
pp
p
p
p
p
p
pp
p
p
p
p
p
pppppp
p
p
ppppppppppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
pp
pp
p
pp
p
p
pp
pp
pp
p
p
ppp
p
p
p
p
ppppppp
p
p
p
p
pp
ppppppppppppp
p
p
p
p
p
p
p
pppp
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
pp
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
pppppp
1000 1200 1400 1600 1800 2000
Figure 11: The fourth (upper), third (middle; upmost FIR ltered only once) and second derivative (bottom)
using (der101) for spectrumB, C, D, and E, and FIR average ltering between derivations compressed with
Sqrt.
3.13 S/N
Once we have the estimate of noise amplitude A
n
we can draw the signal to noise ratio dened to be
S/N = 20log
10
(A
s
/A
n
)[dB],
where A
s
is the estimated amplitude of the signal and A
n
is the, also estimated, amplitude of noise. Here we
estimate the noise amplitude by the expected local deviation of the rst derivative signal (g. 13(upper)),
while the signal is here the original raw signal. In gure 13(lower) you can see the signal to noise ratio over
spectrum A. As can be seen the signal to noise ratio steadily increases until the middle of the frequency
range is reached, after which the peaks of the original signal dominate the S/N behavior. Observe, that the
peaks are actually valleys and thus contain much noise. This is so because we are actually processing the
inverse of the measured spectra.
16
Java & DSP 3 METHODS
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
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
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
p
p
p
p
p
p
p
p
p
p
ppp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
pp
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
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
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
p
pp
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
pp
p
p
pp
p
p
p
p
p
p
p
pp
p
p
p
pp
pp
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
pp
p
pp
p
p
pp
ppp
pp
pp
p
p
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
pp
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
ppp
p
p
pp
p
p
p
p
p
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
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
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 12: The second derivative using (derivative1) twice for spectrum A without smoothing com-
pressed with Sqrt.
6
0
10
S/N[dB]
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
ppp
p
p
pp
p
p
p
p
p
p
p
p
p
p
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
pp
pp
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
pp
pp
p
p
pp
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
ppp
p
p
p
p
p
pp
pp
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
pp
pp
p
p
p
p
p
p
pp
p
p
pp
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pppp
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
pp
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
pp
p
pp
p
p
p
p
p
p
p
p
pp
p
pp
pp
p
p
p
p
pp
pp
p
ppp
pp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
pp
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
pp
p
p
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
p
p
p
ppp
p
ppp
p
p
pppp
p
ppppppp
pppppppppppppp
ppppppp
pp
p
p
p
p
p
p
p
pp
p
pp
p
p
p
pp
ppp
pp
p
pp
p
p
p
p
p
p
p
p
p
p
pp
ppp
ppp
ppppp
ppppppp
p
p
pp
p
p
p
p
p
p
p
p
p
pp
p
p
pp
p
p
pp
p
p
ppppp
pppp
ppppp
pppppppppppppppppppppppppppppppppppppppp
pp
ppppppppppppppppp
ppppp
p
pp
pppp
ppp
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
pppppppppppppp
pppppppp
pppppppppppppppppppppppppppppppppppppppp
ppppppppppp
p
p
p
pp
p
p
p
p
p
pp
p
p
p
p
pp
p
p
p
p
p
p
pppp
pp
p
p
p
p
p
pp
pppp
pp
p
pppp
p
pp
p
p
p
p
p
pp
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pppppppp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
ppppp
p
ppp
ppp
pppppp
p
ppp
pppp
pppp
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
p
p
p
pp
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
6
A
n
ppppp
p
p
p
p
p
p
p
pppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
pppppppppppppppppppppppppppppp
pp
pp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pp
p
pp
pp
pp
ppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pp
pp
p
pp
p
p
pp
pp
pppppppppppppppppppppppp
pppppppppppppppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
pp
pppppppp
pp
p
p
p
p
pp
pppp
pppp
pp
pppppppppp
pppppppppppppppppppppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
pp
p
p
p
pppp
ppppp
p
p
p
p
p
p
p
pppppppppppppp
1000 1200 1400 1600 1800 2000
Figure 13: The noise amplitude A
n
(top) and the signal to noise ratio S/N = 20log
10
(A
s
/A
n
) [dB] (bottom)
for spectrum A.
17
Java & DSP 3 METHODS
pppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
p
p
p
p
p
pppppppppppppp
p
p
p
p
p
p
p
p
p
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
p
p
ppppp
pp
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pppppppppppppppp
pp
p
p
p
p
p
p
pp
p
p
p
ppp
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
ppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
p
p
p
p
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
p
p
pppppppppppppp
p
pp
p
p
p
p
p
p
ppppppppppppppppppp
pp
pp
p
p
p
ppp
pppppp
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
p
p
p
p
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
p
p
ppppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pppppppppppppppppp
pp
pp
p
p
p
ppp
p
ppp
p
pp
p
p
p
p
p
1000 1200 1400 1600 1800 2000
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
pppppppppppppp
p
p
p
p
p
p
p
p
p
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
p
ppppp
p
ppp
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pppppppppppppp
p
p
p
ppp
p
p
p
p
p
ppp
p
ppp
p
p
p
p
p
1000 1200 1400 1600 1800 2000
ppppppp
ppppppp
ppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
p
p
p
p
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
pppppppppppppppppppppppppppppppppppppppppppp
pppppppppppp
p
pp
p
p
p
pp
pp
1000 1200 1400 1600 1800 2000
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
p
p
p
p
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
p
pp
ppppppp
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pppppppppppppppp
p
p
p
ppppp
p
p
p
pp
p
p
pp
p
pp
p
pp
1000 1200 1400 1600 1800 2000
pppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
p
p
p
p
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
p
p
ppppppp
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pppppppppppppppp
p
p
pppppp
p
p
pp
p
p
pp
p
p
pp
p
p
p
1000 1200 1400 1600 1800 2000
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
p
p
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
1000 1200 1400 1600 1800 2000
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
p
p
p
p
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
p
pppppppppppppp
pppppp
p
p
p
p
p
p
p
ppppppppppppppp
p
p
p
p
pppp
p
p
pp
p
pppppp
pp
p
p
1000 1200 1400 1600 1800 2000
ppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
p
p
p
p
p
ppppppppppppppp
p
p
p
p
p
p
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
p
p
pp
ppp
ppp
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pppppppppppppp
p
p
p
pp
ppp
p
pp
p
pp
ppp
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
Figure 14: Example spectra.
18
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 class
The 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 rst 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<n; i++) // n rounds
R[i] = c; // just do it
return R; // ready
} // end of constant
. //
. // some methods here ...
. //
public static void testDSP(int n) // method testing
/** ... */ //
{ //
int[] S1 = moving(constant(n,1),2); // these were used in our examples
int[] S2 = derivative1(S1); // these were used in our examples
int[] S3 = add(S1,S2); // these were used in our examples
int[] S4 = derivative1(S3); // these were used in our examples
int[] A = 1,2,1; // these were used in our examples
int[] S5 = FIR(mult(3,S3),A); // these were used in our examples
seriesForVerb("S5",S5); // these were used in our examples
} //
public static void main(String[] args) //
/** ... */ // the main method
{ //
testDSP(10); // do some testing
} //
} // end of class DSP
Some comments on this DSP class:
public class DSP This is a publicly usable class named DSP.
void testDSP This is a method used to test (call) other methods. (Not all details are shown here) This is
not a function but a subroutine, because it does not return any value (void).
seriesForVerb was used to output the given parameter array for graphical representation. (also for other
arrays, but not shown here)
The complete source code can be found at URL: ....
19
Java & DSP 4 CLASSES
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
pp
p
p
p
p
p
pp
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
pp
p
pp
p
p
p
p
p
pp
p
p
p
p
p
p
pp
p
pp
pp
p
p
p
p
pp
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
pp
p
p
p
p
ppp
p
p
p
p
p
p
p
p
pp
p
p
ppppp
p
p
p
p
pp
p
pp
p
p
p
pppppp
p
pppppp
ppp
p
p
p
p
pppp
p
p
p
pp
p
pppppp
p
pppppppppp
pp
p
pp
p
pppp
p
ppppppp
p
p
p
p
p
pp
p
ppp
pp
ppppppppppppppp
ppppppppp
ppppp
pppppp
p
p
p
pp
p
pp
pp
p
p
pppppppppppppp
pp
pp
p
pppppppppppppppppppppppppppp
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
pp
ppppppppppppppppp
pppppp
pppppppppppppp
p
p
ppp
p
p
p
p
p
pp
p
p
p
p
ppp
pppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
ppppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
pp
p
pp
p
pp
p
p
p
p
p
p
p
p
p
p
pp
pp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
ppp
pp
pppp
p
p
p
pp
p
p
pp
p
pp
p
p
p
p
pp
p
p
p
p
p
p
pp
p
p
pp
p
pp
p
pp
p
p
pp
p
p
p
p
p
p
p
p
pp
p
p
p
p
ppp
p
ppppppp
pp
pp
p
ppp
p
ppppppppppp
ppp
pp
pppp
p
p
p
p
p
p
p
p
p
p
p
p
ppppppppppppppppppppppppppppp
ppppppp
p
p
p
p
p
p
pppp
ppppp
ppppppppppppppp
pp
pppppppp
p
pp
ppppppp
p
pp
ppp
p
ppppppppppppppp
pppp
pp
ppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
pppppppppppppppppppppppppp
pppppppppppp
p
p
pp
p
p
p
p
p
pp
p
p
p
p
pp
p
pppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
pp
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
ppp
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
p
p
p
p
p
p
pp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
ppppp
p
p
pp
p
p
pp
p
pp
p
p
pppp
p
p
p
p
p
p
p
p
pp
p
ppp
p
ppp
p
p
p
p
p
p
pppp
p
pp
ppp
p
p
ppp
pppppp
p
p
p
pp
p
p
pp
p
p
p
p
pppppp
p
p
p
p
p
pppp
ppp
p
pp
p
p
p
pp
ppp
ppppppp
pppp
p
p
p
p
pppppppppppppp
pppp
pp
ppppppppp
pppp
pp
pppp
pp
p
ppp
p
p
ppp
pp
pppppppppppppp
pp
p
pp
ppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
pp
p
p
pp
p
p
pp
ppp
ppppppppppppppppppppppppppppppppppp
p
ppp
p
ppp
p
pp
p
p
p
p
p
pp
pppp
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
ppp
pp
p
p
p
p
pp
p
p
p
p
p
pp
p
p
pp
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
pp
p
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
pp
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppppp
p
p
p
p
p
pp
p
pppp
p
p
p
p
pp
p
p
p
ppppp
p
p
ppppp
pppp
p
p
p
ppppppppp
p
pppp
pp
p
pppp
p
p
p
p
p
p
pp
p
p
p
ppp
p
p
p
ppp
p
pp
p
pp
p
pp
p
p
p
pppppppp
p
ppppppppppppppppppppppp
pp
pppppppp
pppppppppppppppp
pp
p
ppp
ppppppppppppp
p
p
pppp
pppppppppppppppppppppppppppp
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
pp
p
pp
p
p
p
p
p
p
p
ppppppppppppppppppppppppppppppppppppp
p
p
p
p
ppp
pp
pp
p
pp
ppp
p
ppp
pp
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
pp
p
pp
pp
pp
p
p
p
p
p
pp
pp
p
p
pp
ppp
pppp
pp
pp
p
p
p
p
p
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
pp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
pp
p
pppppppppppp
p
p
ppppp
pp
pp
p
ppp
ppp
pp
p
p
p
p
ppppp
ppppppp
pppp
p
p
ppppppppp
pppp
p
p
p
p
p
p
p
pp
p
p
ppppp
ppppppppppppppppp
pp
p
ppppppp
p
pppppppppppp
ppp
pp
pppppppppppppppppp
p
pp
pp
pppppppppppppppppppppppppppppp
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
pp
pp
p
pp
p
p
p
p
pp
pppppppppppppppp
ppppppppppppppppppp
pp
p
p
p
pppp
ppp
p
ppp
p
pp
ppp
pp
p
p
p
pp
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
pp
pp
ppp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
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
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
pp
p
pp
p
p
p
pp
pp
p
p
p
p
p
p
p
p
p
p
pp
pp
p
p
p
ppp
p
p
p
p
p
pppppp
p
p
p
p
p
pp
p
p
p
p
ppp
p
pp
p
p
p
p
ppp
p
p
ppp
p
p
p
p
ppppp
pp
ppp
p
pppppp
ppppppppppp
p
p
p
p
p
p
p
p
ppp
p
pppppppppppp
p
p
pppp
pp
ppp
p
p
p
p
p
p
p
pppppp
pppppppppppppppppppppp
pp
pppppppp
pp
pppppp
pppppppppppp
p
p
ppppppppppppp
pp
p
p
ppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
pppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
pp
p
p
pp
p
p
p
p
pp
p
pp
p
pp
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
pp
pp
p
p
p
pp
pp
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
p
p
p
p
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
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
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
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
pppp
p
p
pp
p
p
p
ppp
p
pp
p
p
pp
p
p
p
p
p
p
pppppp
p
p
pp
ppppppp
ppp
ppp
pp
p
ppp
ppppp
pp
p
pp
p
p
p
p
p
p
p
p
pp
pp
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
pp
pp
p
p
pppp
pppppppppppppppppppppppp
ppppppppppppppppppppppppp
pp
ppp
ppppppppppppp
pp
pp
pppp
pppppppppppppppppppppppppppp
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
pp
ppppppppppppppppp
pppppp
pppppppppppppp
p
p
p
p
ppp
p
p
pp
p
p
p
p
p
p
p
pp
p
pp
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pppppp
pp
p
ppp
p
pp
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
p
p
p
pp
ppp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
p
p
p
p
pp
p
pp
p
p
p
p
p
p
pp
p
p
pp
pp
pppp
p
p
p
p
pp
pp
pp
p
p
p
ppp
p
pp
p
p
pp
p
p
pppp
pppp
p
ppp
pp
pppp
pppppp
ppp
pp
pppppp
p
pp
p
p
pp
ppp
p
p
ppp
p
ppppppppppppppppppppp
pp
p
pp
p
p
ppppppppppppppppppppppppppp
p
ppppppp
pp
p
pppppppppppppp
ppp
p
pp
ppppppppppppp
pp
p
p
pp
pp
ppppppppppppppppppppppppppp
p
p
p
p
p
p
pppp
p
p
p
p
pp
pp
pp
pp
pp
pp
ppp
ppppppppppppppppppppppppppppppppppppp
pp
p
p
p
pppppp
pppppp
ppp
p
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
pp
ppp
p
p
pppp
pp
p
p
pppp
ppp
p
p
p
pp
p
p
pp
p
p
p
p
ppp
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
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
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
pp
pp
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
pp
pp
p
p
p
p
pp
pp
p
pp
p
pp
p
p
p
p
pp
p
pp
p
ppp
p
p
p
p
pp
p
p
p
p
p
pp
pp
p
p
p
pp
p
p
p
pp
p
p
p
pp
pp
p
p
pp
pppppp
pp
pp
pppppp
ppp
p
pppp
ppp
p
p
p
ppp
p
p
ppppp
p
pppp
p
p
p
p
pp
pp
p
p
p
p
pp
p
pppppppppppppppppppppppppp
ppp
pppppppp
pppppppppppp
pp
pppp
pp
pp
pp
pppppppppppp
p
pp
ppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
pp
p
pp
pp
ppppppppppppppppppppppppppppppppppppp
pp
p
p
p
ppp
p
p
pp
ppp
p
p
p
p
pp
p
pp
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
pp
pp
ppp
p
pppp
p
pp
p
p
p
p
p
p
p
p
pp
p
p
p
p
pp
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
pp
p
p
p
ppp
p
p
pp
p
p
p
p
p
p
p
p
pp
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
pp
pp
p
p
pp
p
p
p
p
p
p
p
p
pp
p
p
p
p
pp
pp
p
p
p
p
pp
p
p
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
p
p
p
p
ppppp
pp
p
p
pp
p
p
p
p
p
p
p
pp
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
pp
ppp
p
p
p
pp
pp
p
p
p
p
p
pp
ppppppp
p
p
pp
p
p
p
p
p
pp
p
p
ppppppppppp
p
p
p
p
pp
p
p
p
p
p
p
p
pp
p
p
p
pppppppppppppp
p
ppp
p
ppp
p
pp
pp
p
p
pp
pppppppp
p
ppppppppppppppppppppp
pp
ppppppp
ppppppp
pppppppp
ppppp
p
pp
pppppppppppp
pp
p
pppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
pp
p
ppppppppppppppppppppppppppppppppppppp
p
p
p
ppp
p
p
pp
p
p
p
p
p
p
p
pp
p
pp
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
pp
p
p
p
p
ppp
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
pp
pp
ppp
p
p
pp
p
p
p
pp
p
p
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
Figure 15: Derivatives of example spectra of gure 14.
20
Java & DSP 4 CLASSES
p
p
p
pp
p
pp
p
pp
pp
p
pp
p
p
ppp
p
pp
p
p
p
p
p
p
p
p
p
pp
p
p
pp
p
p
p
pp
p
pp
p
p
p
p
p
p
pp
pp
p
p
pp
pp
p
p
p
pp
p
p
p
pp
pp
p
p
pp
ppp
pp
pp
pp
p
p
p
p
pp
p
p
p
ppp
pp
pppppp
p
ppppp
p
p
p
p
pppppppp
p
p
p
ppppppp
p
pp
p
ppp
p
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppp
pppp
pppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
ppppppppp
p
pppppppppp
pppp
ppp
p
ppppp
p
ppppp
pp
p
pp
p
pp
pp
p
p
ppp
ppp
p
pppppppppppppppp
pp
ppp
p
p
ppp
p
ppppp
p
p
p
ppppppppppppppppppp
pppp
p
ppppppppp
ppppppppppppppppppppppppp
p
p
p
p
ppp
p
p
p
p
p
p
pp
p
pp
pp
pppp
p
p
p
p
p
p
p
p
p
p
pp
p
p
pp
p
p
p
pp
pp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
pppppppp
p
p
ppp
p
p
pp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
p
p
p
p
pp
1000 1200 1400 1600 1800 2000
p
p
p
pp
pp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
ppp
p
p
ppp
pp
p
pp
ppp
pp
pp
p
p
pppp
p
p
p
ppp
p
p
p
p
p
p
p
p
ppp
pp
p
p
p
p
p
p
pp
pp
p
pp
p
ppp
ppp
p
pp
pppp
p
ppppppppp
ppp
ppp
ppppppppppppppppppppppp
p
ppppp
p
ppp
p
p
p
ppppp
p
ppppppppppppppppppppppppppppppppppppppppppppppppppp
pp
ppppppppppp
p
p
pppp
pp
pppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppppppp
pp
p
p
pppppppppp
ppp
ppp
p
pppp
pp
pppp
pppppppppp
p
pp
p
p
ppppppppppppppppppppp
pp
ppp
p
p
p
pp
pp
ppp
p
p
p
pppppp
pppppppppppppppppppp
pppppp
ppppppppppppppppppppppppppp
p
p
p
p
pppp
p
ppp
p
pp
p
p
pp
p
ppp
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
pp
p
p
pp
ppp
p
p
p
pppp
pppp
pp
p
p
pppppppp
p
p
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
pp
1000 1200 1400 1600 1800 2000
p
p
p
p
pp
p
p
p
pp
p
p
p
p
pp
p
p
p
p
p
ppp
p
p
pp
p
pp
p
pp
pp
p
p
p
pp
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
pp
p
ppp
p
p
ppp
pp
pp
p
ppppp
p
p
pp
p
pp
p
p
pp
p
p
p
pp
p
ppppppppp
p
p
p
p
p
ppp
p
p
p
pp
p
ppppppppppppp
p
pp
p
pp
p
ppppppppppp
p
pppppppppppppppppppppppppppppppppppp
p
ppppppppppppppppppppppppppppp
p
p
pp
ppp
pp
p
pp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppppppppp
p
pppppppppp
pppp
ppp
p
pppp
pp
pppp
pppppp
p
pp
p
p
p
pppp
p
p
pp
p
ppppppppppppppp
pp
ppp
p
p
ppp
pppppp
p
p
p
pppppppppppppppppppppp
pp
ppppppp
p
pppppppppppppppppppppppppp
p
p
p
p
pppp
p
ppp
p
pp
pp
ppp
pppp
p
p
p
pp
p
p
p
p
p
p
p
p
p
pp
p
p
pp
pp
ppp
pppp
p
ppp
p
pp
p
p
pppppppp
p
p
p
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
pp
1000 1200 1400 1600 1800 2000
p
p
pp
pp
ppp
p
pp
p
p
p
pp
pp
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
pp
p
p
p
ppp
pp
p
pp
p
p
p
pp
ppp
pp
pp
p
p
p
p
p
p
p
ppp
ppp
p
pp
pppp
p
pp
p
p
pp
p
p
p
pp
p
p
p
p
pp
pp
p
p
p
p
p
ppp
p
p
pppppp
p
ppppp
p
ppppp
p
p
p
ppppp
p
p
p
pppp
p
pppppppp
p
ppppppppppppppppppppppp
p
ppppppppppppppppppppppppppppppppppppppppppppppppp
ppppp
pp
ppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppppppppp
pp
ppppppppppp
ppp
ppppppp
pppppppppppppppp
pp
p
p
ppp
pppppppppppppppppppp
pp
ppp
p
p
pp
pp
ppppp
p
p
p
pppppppppppppp
ppppp
pp
pp
p
pppppppppppppppppppppppppppppppppppp
p
p
pp
p
pp
p
p
pp
p
pp
p
p
pppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pppp
p
p
p
ppp
p
p
pp
pppp
p
ppppppppp
p
p
pp
p
p
p
ppp
p
p
ppp
p
p
pp
p
pp
ppp
pp
p
p
p
p
p
pp
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
p
p
ppp
pp
p
pp
p
p
p
pp
p
pp
p
p
p
p
p
p
p
pp
p
pp
p
p
pp
p
p
p
p
p
pp
p
p
p
p
pppp
p
pp
pp
pp
p
p
p
p
p
p
pp
ppp
ppp
pppp
pp
ppp
p
pp
p
p
p
pp
p
pp
p
p
pp
pp
pp
p
p
pp
p
p
p
p
ppp
p
p
p
pppp
p
p
p
ppp
p
p
p
pp
p
p
p
p
p
p
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppppp
p
pppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppp
ppppppp
ppppppppppp
ppppp
ppppp
ppppp
p
pppppppppppp
p
p
pppppppppppppppppppppppp
pp
ppp
p
p
p
pp
p
pppp
p
p
p
p
ppppppppppppppppppppppppppp
pp
p
p
pppppppppppppppppppppppppppppp
p
p
p
p
ppp
p
pp
p
pp
p
ppppppp
p
p
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
ppp
pp
p
pp
p
ppp
ppp
p
ppp
p
ppp
pppppp
p
ppp
p
p
pp
pp
p
p
pp
ppp
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
pp
1000 1200 1400 1600 1800 2000
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
pp
p
p
p
pppp
p
p
p
p
p
pp
p
ppp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
pp
pppp
pp
p
p
p
p
p
ppppppppppp
p
pppppp
p
p
p
p
pp
p
p
p
pp
pp
p
pp
pp
pp
p
p
p
p
p
pp
p
p
pppppppppppppppp
p
p
ppp
p
ppp
p
ppppp
p
pp
ppppp
p
ppp
p
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
ppp
pp
ppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppppppppp
p
ppppppppppp
pppp
pppp
p
p
pppp
pp
ppppppppp
p
p
p
p
p
ppp
ppp
p
pppppppppppppppp
ppp
pp
p
p
ppp
pp
ppp
p
p
p
p
pppppppppppppppppppppppp
pppppp
p
pp
ppppppppppppppppppppppppppp
p
p
pp
p
pp
p
p
pp
p
pp
p
ppppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
pp
pppp
pp
ppp
p
p
p
p
p
p
pp
p
pppppppp
p
p
p
pp
p
p
p
p
pp
p
p
ppp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
1000 1200 1400 1600 1800 2000
p
p
p
p
p
pp
p
p
p
p
p
pp
pp
ppp
p
pp
pp
pp
p
p
p
p
ppp
p
pp
pp
p
p
p
ppp
pp
pp
p
p
p
p
p
p
pp
p
p
p
p
p
p
pp
p
p
p
ppp
pppp
pp
p
p
p
pp
p
p
p
p
pppppp
p
pp
pp
p
ppp
p
pp
p
pp
pp
pp
pp
p
pppppp
p
pp
p
p
pppppppppppppp
p
p
p
p
ppppppp
p
p
pppp
p
pp
p
pppppppppppppppp
p
pppppppppp
p
pppppppppppppppppppppppppppppppppppppp
p
ppp
pp
p
p
p
ppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
ppppppppp
p
pppppppppp
ppppp
pppp
pppppp
pp
pppppppppp
p
ppp
p
p
p
p
p
p
p
p
p
p
ppppppppppppp
ppp
p
p
p
ppp
pp
ppppp
p
p
p
ppppppppppppppppppppppp
p
pppppp
p
pp
ppppppppppppppppppppppppppp
p
p
pp
p
ppp
p
pp
p
pp
p
pppppppp
p
pp
p
p
p
p
p
p
pp
p
p
pp
p
p
p
pppppppp
pp
p
p
pp
p
pp
p
p
ppppppppp
p
p
p
p
p
p
p
p
pp
p
p
pppp
p
pp
p
pp
p
p
pp
p
p
p
p
p
p
pp
1000 1200 1400 1600 1800 2000
p
p
p
pp
pp
pp
p
p
pp
ppp
p
pp
p
p
p
p
p
p
p
p
pp
pp
p
p
p
pp
p
p
p
p
pp
p
p
pp
ppp
p
p
p
p
p
p
p
ppp
pp
ppp
p
pp
p
pp
pppp
p
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
ppppp
p
p
pp
p
pp
pppp
p
p
ppp
pp
p
pp
ppp
p
p
pppp
p
ppppppp
p
ppppppp
p
pppp
p
pp
p
ppppppppppppppppppppppppppp
p
ppppppppppppppppppp
p
ppppppppppp
pp
pppppp
p
p
pppp
p
ppppppp
p
p
ppppp
p
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppp
pppppp
p
p
pppppppppp
ppppp
pppp
p
p
pppp
p
pppppppppppp
p
p
pp
p
p
p
ppppppppppppppppppp
pp
ppp
p
p
ppp
ppppp
p
p
p
ppppppppppppppppppppppppppppp
ppppp
pppppppppppppppppppppppppppp
p
pp
ppppp
p
p
ppp
p
p
ppppppp
p
ppp
p
p
p
pp
p
p
p
pp
p
p
p
ppppppppp
p
ppp
pp
ppppp
p
ppp
ppppp
p
p
pp
p
p
ppppp
p
pppp
p
p
p
pp
p
p
ppp
p
p
p
p
p
p
pp
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
pp
p
p
pp
ppp
p
p
pp
p
p
p
p
p
pp
p
ppp
ppp
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
pp
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
pp
pp
pp
p
ppp
p
pp
p
p
p
ppppp
p
p
ppp
pp
pp
p
p
p
pp
p
p
pppppppppppp
p
p
pp
pp
pp
pppp
p
ppppp
p
ppp
p
ppp
p
pp
p
ppppppppppp
p
ppppppppppppppppppppppppppp
p
ppppppppppppppppppppppppppppp
pp
p
p
ppp
pppp
p
p
ppp
p
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppppppppp
p
pppppppppp
ppppp
pppp
ppp
p
p
pppp
pppppp
p
pp
ppp
p
p
pp
ppp
p
pppppppppppppppp
ppp
pp
p
pp
pp
p
pppp
p
p
p
p
ppppppppppppp
ppppppppppp
pp
ppppppp
pppppppppppppppppppppppppppp
p
pp
p
pp
p
ppp
p
pp
p
ppppppp
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
pppp
p
ppp
pp
p
pp
p
p
pp
p
p
pppppppp
p
p
p
pp
p
p
p
ppp
p
p
pppp
p
p
p
p
pppp
p
p
p
p
p
p
p
p
pp
1000 1200 1400 1600 1800 2000
p
p
pp
p
p
p
p
p
p
p
p
pp
p
p
ppp
pp
p
p
p
pp
p
p
p
p
pp
p
p
p
p
p
p
p
pp
ppp
p
pp
pp
p
p
p
p
p
pp
ppp
p
p
p
p
p
pp
pp
p
p
p
p
p
pp
p
ppp
p
pp
p
pp
p
p
p
p
pppppppp
p
ppp
p
pp
pp
p
p
pp
p
p
pp
p
p
p
p
p
ppppppppppp
p
pp
p
p
p
ppppp
p
ppppppppp
p
pp
p
pppppppppppppppppp
p
pppppppppppppppppppppp
p
pppppppppppppppppppppppppppp
p
ppp
pp
ppp
ppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppppppppp
pp
pppppppppp
pppppp
ppp
ppppp
pppp
ppppppppp
p
ppppp
p
p
ppp
p
pppppppppppppppp
p
ppp
p
pp
pp
pp
pppp
p
p
p
p
pppp
pppppppppppppp
ppp
pp
ppppppppp
pppppppppppppppppppppppppppp
ppp
p
pp
p
p
pp
p
pp
p
pppppp
pp
p
p
p
p
p
p
p
p
p
pp
p
p
pp
p
p
p
pp
pp
p
pppp
p
p
p
p
p
p
pp
p
p
pppppppp
p
p
p
pp
p
p
pp
pp
p
p
pppp
p
pp
p
p
p
pp
p
p
p
pp
p
p
p
pp
1000 1200 1400 1600 1800 2000
Figure 16: Second derivatives of example spectra of gure 14. Smoothed by FIR average lter B between
derivations.
21
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
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<N; i++) // outer loop
{ // outer loop
for(int j=0; j<M; j++) // inner loop
{ // inner loop
. // do pixel processing
. // do pixel processing
. // do pixel processing
R[i][j] = Image[i][j] ... // update result image
} // inner loop
} // outer loop
return R; // return result
} // end Ifun
The graphical representation of Ifun is shown in gure 18.
_
`

DSP
Ifun
-
int[][]
-
int[][]
Figure 18: An image processing method Ifun of class DSP.
Still working on this subject ... hold on, please.
23
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.
_
`

Hyperimage
Processing
6
?
_
`

Image Processing
6
?
_
`

Chemometrics
(Spectroscopy)
image[][]
(photo)
6
?
pixel[]
(spectrum)
hyperimage[][][]
-
6
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,
,
,
,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,
,
,
,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
66
melanoma
??
ulcers

a
Figure 19: Pixel, image, and hyperimage
Still working on this subject ... hold on, please.
24
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
Java & DSP 7 CONCLUSIONS AND FUTURE
p
pp
p
pp
ppp
ppp
p
p
p
p
p
pp
pppp
pp
pp
p
pp
p
ppp
p
pp
ppppppppppppp
p
ppppp
pppp
p
pp
pppppppppppppppppppppppppppppppppppppppppppp
pppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
ppppppppppppppppppppppppppppppppppppppppppppppppppppp
pp
ppp
p
p
p
p
p
1000 1200 1400 1600 1800 2000
p
p
p
p
pp
p
pp
ppp
pp
p
pppp
pppp
ppppp
pp
pppp
p
pp
p
ppppppppppp
p
p
ppppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
ppppppppppp
pp
pppp
p
ppp
pppppppppppppppppppp
pppppp
pppp
p
pp
p
pp
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
ppp
p
p
p
p
p
p
pppppp
p
pp
p
p
ppppp
p
ppp
pp
pp
pppppppp
pppppppp
pp
p
ppppppppppppp
ppppp
pp
pppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
pp
pppp
pppp
ppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
1000 1200 1400 1600 1800 2000
ppp
p
pp
p
p
ppp
pp
pp
p
pp
p
p
pppp
p
p
p
pp
p
ppp
ppppppppp
ppppppppp
p
pppp
p
ppppppppp
pppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
pp
p
pp
p
p
1000 1200 1400 1600 1800 2000
p
ppp
pp
p
p
pppp
pp
p
pppp
ppppppp
pp
pp
p
ppp
p
pp
p
pppppppppppp
p
p
pp
ppppppppppp
pp
pppppppppppppppppppppppppppppppppppppppppppp
pppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
pppppppppp
pp
p
pp
p
p
pp
p
p
p
pp
ppppppppppppppppppp
pp
pp
p
p
p
ppp
p
pp
p
pp
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
ppppppp
p
pppppp
pp
pppppp
p
p
p
ppppp
ppppppp
p
ppp
ppp
ppppppppppppppp
ppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
pp
p
p
p
1000 1200 1400 1600 1800 2000
ppp
ppppppppppp
pp
ppp
ppp
p
pp
pppppppppp
pppp
pp
pp
ppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppp
p
p
p
p
1000 1200 1400 1600 1800 2000
ppp
pp
p
p
p
ppp
ppp
ppp
ppp
pp
p
p
p
pppppppppppp
ppp
p
p
pppppppppp
pp
pppppppp
p
pp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
pp
ppppp
p
pp
p
p
p
p
p
p
p
pp
p
p
p
p
pppppppppppppppppp
ppppppppp
pp
pp
pp
ppp
pp
p
p
p
1000 1200 1400 1600 1800 2000
p
pp
p
pp
p
ppp
p
p
ppppp
pp
ppp
pp
ppppppppppppppppppppp
ppppppppppp
p
p
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
pp
pppp
pppppp
p
pp
ppppppppppppppppppppppppppppppppppppppppp
p
p
pp
p
p
pp
p
1000 1200 1400 1600 1800 2000
pp
pp
p
p
p
ppp
p
p
pppp
p
pp
pppp
pppppp
pp
pp
p
p
pp
pppp
p
pppppppppppppp
p
ppppp
ppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
ppp
ppp
p
1000 1200 1400 1600 1800 2000
Figure 20: Comparison of spectra of gure 14
26
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 (lter)
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
Java & DSP A SOLUTIONS TO PROBLEMS
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
p
p
p
pp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
pp
p
p
p
p
p
p
pp
pp
p
p
p
p
pp
p
pp
p
p
p
p
p
p
p
pppp
p
pp
p
p
p
p
p
ppp
p
p
p
p
p
p
pp
pp
p
ppp
p
pp
p
p
pp
pp
p
p
p
p
pp
pp
p
p
p
p
pp
p
p
pp
p
p
p
pppp
p
pp
p
ppppppppppppppppppppp
p
p
p
p
p
ppppppp
p
p
p
p
p
pppppppp
p
p
ppp
pp
p
pp
p
ppp
pppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
ppppppppppppppppppppppppppppppppppppppppppp
p
p
ppp
ppp
ppppp
p
pppppp
pppp
p
p
p
p
p
pppppppppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
pppp
pppppppp
p
p
p
p
p
p
ppppp
p
p
p
pp
pp
p
p
ppp
p
pp
pp
p
p
p
p
p
p
p
pp
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
p
p
p
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
ppp
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
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
pp
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
pp
pp
p
ppppppppp
p
p
p
p
p
p
pp
p
p
p
p
p
p
pp
p
pp
p
pp
p
p
p
p
pp
ppp
p
pp
p
p
p
pp
p
p
p
p
p
p
p
p
p
pp
p
p
p
pp
pp
p
pppp
pp
ppp
pp
p
pppp
ppppppppppppppppppp
p
p
p
p
p
p
p
pp
pp
p
p
p
p
p
p
p
p
p
ppp
p
pp
p
p
p
p
p
pp
p
p
p
ppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
pp
p
p
p
p
p
pppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
ppppppp
p
p
pppppppppp
p
p
p
p
pppppppp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
pp
p
p
p
pppp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pppp
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
p
p
pp
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
pp
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
ppp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
pppp
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
ppp
p
p
p
ppp
p
pp
ppp
p
p
pp
pp
p
p
p
p
p
p
pp
pp
p
p
p
p
ppp
p
p
p
p
p
p
p
pp
p
pp
pp
ppp
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
pppp
p
p
p
p
p
p
p
p
pppp
p
p
p
p
p
p
ppp
p
ppppppppppppppp
p
pp
pp
p
p
pp
p
ppp
p
p
p
p
p
p
pppppp
pp
p
pppp
pp
p
p
p
p
ppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
p
p
ppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
pp
ppppp
p
p
pppppppppp
pp
p
p
ppppppppppp
p
p
p
p
p
p
p
p
p
pppp
p
p
p
p
ppppp
pppppppp
p
p
p
p
p
p
ppp
p
p
p
p
ppppp
p
ppppp
pp
p
p
p
p
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
p
p
pp
p
p
p
pp
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
pp
p
pp
p
p
pp
p
p
p
p
p
p
pp
p
p
p
p
pp
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
pppp
p
p
pp
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
pppp
p
pp
p
p
p
pp
p
p
p
ppppp
p
p
p
ppp
p
p
p
p
p
ppp
ppp
p
p
p
p
ppp
p
p
ppp
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
ppp
p
p
p
p
p
pp
p
p
p
pp
pp
p
p
pp
p
p
p
p
p
p
p
pppppp
ppppppp
p
pp
p
pppppppppppppppppppppp
pppppppp
p
p
ppp
p
p
p
p
ppp
pppppp
pp
p
p
p
p
p
p
pppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
ppppppppppppppppppppppppppppppppppppppp
p
p
p
pppppppppppppppppppppp
p
p
p
p
ppppppppppp
p
p
p
p
p
pp
p
p
p
p
pp
p
p
p
pp
p
p
pppp
ppp
pppp
p
p
p
p
p
p
ppp
p
p
ppp
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
pp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
ppp
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
ppppp
pppp
ppp
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
pp
p
p
p
p
p
pp
pp
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
p
p
ppp
ppp
p
pp
p
ppppppppppppppppppppppp
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
pp
p
p
p
p
p
p
p
pp
ppppppppppppppppppppppppppppppppppppppppppp
ppp
p
p
p
p
p
p
p
p
ppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
pp
p
p
pp
p
p
p
p
p
p
pp
ppppp
p
p
p
p
ppppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
pp
pp
p
p
p
pp
p
p
pp
p
pp
p
p
p
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
pp
p
p
p
p
p
pp
p
p
p
p
pp
p
p
p
p
p
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
pp
pp
pp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
pppppp
p
ppp
ppp
ppp
p
p
p
pp
p
p
pp
p
pp
p
p
p
pppp
p
p
pp
p
p
ppp
p
p
p
p
p
p
pp
p
p
pp
pp
p
p
p
p
p
p
p
p
p
p
pp
p
p
pp
pp
p
ppppp
p
ppppppp
ppp
p
ppppppppppppppppppp
p
p
p
p
ppp
p
p
p
p
p
pp
p
ppp
p
p
ppppp
p
pppp
p
p
p
ppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
pppppppppppppppppppppppppppppppppppppppppp
p
ppppppppppp
ppppppppppp
p
pp
p
p
ppppppppppp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppppp
ppppppppp
p
p
pp
p
ppp
p
p
p
ppppp
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
p
pp
p
p
p
p
p
p
pp
p
p
p
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
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
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
pppp
p
p
pp
p
pp
pp
p
p
p
p
pp
p
p
p
pp
p
pp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
pp
p
ppp
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
pp
pp
p
p
p
p
ppp
pp
pp
p
ppppppppppppppppppppppp
pppp
pp
p
p
p
ppppppppppppp
p
p
pp
p
p
p
p
p
p
pp
ppppppppppppppppppppppppppppppppppppppppppp
ppp
p
p
p
pp
pppppppppppppppppppppppppppppppppppppppppp
p
p
pppppppp
ppp
p
p
pppppppp
p
p
p
p
p
p
ppppppppppp
pp
p
p
p
p
p
p
p
p
p
p
ppppp
p
ppp
pppppppppp
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
pp
p
p
p
p
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
pppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
pp
p
p
ppppp
pppp
p
pppppppp
ppp
p
pp
p
p
p
p
p
pp
pppp
p
ppp
ppppp
p
p
pppppp
p
p
p
p
pp
p
p
p
pp
p
pp
p
p
p
p
p
pp
p
ppppp
p
pp
p
p
pppp
p
ppppp
pppppppppppp
pppppppp
pppppp
p
p
p
p
pp
pp
ppppp
p
p
p
pp
p
p
ppp
p
pp
p
ppppppppppppppppppppppppppppppppppppp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
ppp
ppp
pppp
pp
pppppppppppppppppppp
p
p
p
p
pp
p
p
pp
pp
p
p
p
pppp
pppppp
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
pp
p
p
p
pp
p
p
p
p
p
p
p
pp
p
p
p
p
p
pp
p
pp
p
pp
p
p
p
p
p
p
p
p
ppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
pp
p
p
p
pp
p
p
p
p
p
pp
p
p
p
p
p
p
pp
p
p
p
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
pp
p
p
pppp
p
p
p
p
p
p
p
p
p
p
ppppppppp
p
p
pp
p
p
ppp
p
pp
p
ppppp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pppp
p
p
p
p
p
p
p
p
pp
pp
p
pp
p
pppppppp
ppppppppppppppppppppppppp
ppppppp
pp
p
pp
p
p
p
pppppppppp
p
ppp
p
p
p
p
ppppppppppppppppppppppppppppppppppppppppppppppp
ppp
p
p
pp
p
p
p
ppppppppppppppppppppppppppppppppppppppp
p
pppppppppppppppppppppppppp
p
p
ppppppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
pppppp
pppp
pp
p
p
ppp
p
p
p
pppppp
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
pp
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
ppp
pp
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
pppp
pppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppppppp
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
ppp
p
ppppp
pppppppppppppppppppppp
pp
pppppp
p
p
p
p
pppppp
p
ppp
ppp
p
p
p
p
p
p
p
p
pp
ppppppppppppppppppppppppppppppppppppppppppppp
p
ppp
p
p
p
ppppppppppppppppppppppppppppppppppppppppppp
p
pppppppppppp
p
pppppppp
pppp
p
p
ppppppppppp
p
p
p
p
p
p
p
p
pp
p
p
pp
pppp
p
pppppppppppppp
p
p
ppp
p
p
pppp
pp
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
Figure 21: Comparison of the rst derivative of spectra of gure 14 to the bottommost derivative of the
spectrum.
28
Java & DSP A SOLUTIONS TO PROBLEMS
p
p
p
p
pp
p
p
p
p
p
pp
p
p
pppp
ppppp
pppp
p
p
ppppp
ppppppp
p
p
ppppp
ppppp
p
pp
p
pppppppppppppppppp
p
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pp
ppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppp
p
p
pp
p
p
p
1000 1200 1400 1600 1800 2000
p
pp
p
p
p
p
p
pppp
ppppp
pp
p
pppp
ppppppp
ppppppppp
pppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppp
p
p
p
pp
p
pppppppppppppppppppppppppppppppppppppppppppppppppp
pp
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
p
pppp
p
ppp
p
p
p
ppppp
p
pp
p
pp
pp
pp
ppppppp
p
pppp
pp
p
pp
pppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppppp
pppppppppppppppppppppppppppppppppppppppppppppp
pp
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
pp
p
p
pp
pp
p
p
p
p
p
p
p
p
p
p
ppppp
pppp
pp
p
p
p
p
pppppp
p
ppppp
p
ppppppppp
ppppppppppppp
ppp
pppppppppppppp
pppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppp
pppp
p
ppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
pp
p
p
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
ppp
pppppp
p
p
p
p
pp
pp
p
pp
p
pp
p
p
ppp
pp
p
ppp
pppppppppppppppp
pp
pppppppp
pppppppp
pppp
p
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
ppppppppppppppppppppppppppppppppppppppppppppppppppp
p
pp
p
p
p
p
p
1000 1200 1400 1600 1800 2000
pp
p
p
p
pp
p
p
p
p
p
pppp
p
p
pppppp
p
p
pppppp
pppp
p
ppp
pppppppp
ppppppp
pppppppppp
ppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
pp
pppppp
ppp
pp
pp
p
pppp
pppppppppppppppppppppppppppppppppppp
p
p
ppp
p
p
p
p
1000 1200 1400 1600 1800 2000
pp
p
p
p
pp
p
p
p
p
ppppp
p
pp
pppppppppppppppp
p
p
pppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppp
pppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
pp
p
p
p
p
1000 1200 1400 1600 1800 2000
pp
p
p
p
pp
p
p
p
ppppppp
ppppppppppppppp
pppp
p
pp
p
pppp
ppppppppppp
ppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
ppppppppppp
ppppppppppppppppppppppppppppppppppppppppppp
pppp
ppp
p
p
p
p
1000 1200 1400 1600 1800 2000
pp
p
p
p
pp
p
p
p
ppp
ppp
pp
p
pppppp
ppppppppppp
p
pp
p
pppp
pppp
ppppppp
pppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
pppppp
ppppp
pp
pp
p
pp
p
p
pp
ppppppppppppppppppppppppppp
ppp
pp
pp
p
p
pppppp
p
1000 1200 1400 1600 1800 2000
p
pp
p
p
p
p
p
p
ppp
pp
p
p
p
p
p
pp
p
ppp
p
pp
ppp
p
p
pp
p
pp
p
p
pppp
p
p
p
p
pppppp
p
p
pp
ppp
p
ppp
p
pp
pp
pppp
p
ppppp
ppppppppppppppppppppppppppppppppppppppppppppppp
p
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
pp
ppp
p
p
p
p
1000 1200 1400 1600 1800 2000
Figure 22: Comparison of spectra of gure 14
29
Java & DSP A SOLUTIONS TO PROBLEMS
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
p
p
p
p
pp
p
p
p
p
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
p
p
p
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
pp
pp
p
p
p
p
ppppp
pppp
ppp
p
p
p
p
p
p
p
ppp
p
p
p
ppp
pp
p
p
p
pp
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
pp
p
pp
p
p
p
pp
p
p
p
p
p
pp
p
p
p
p
ppppppp
pp
p
p
p
pppppppppppppppppppppp
ppppp
pppppp
p
pp
p
p
p
p
p
p
p
p
pp
pp
pppp
p
p
p
p
p
ppppppppppppppppppppppppppppppppppppppppppppppppp
ppp
p
p
p
pppppppppppppppppppppppppppppppppppppppppppp
p
ppp
pppppppppppppppppp
p
pp
p
p
pppppppppp
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
ppppppppppp
pp
p
p
ppp
p
p
p
pppppp
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
pp
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
pp
p
ppp
p
p
p
p
p
pp
p
p
p
p
p
ppp
p
p
p
pppp
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
pp
ppp
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pppp
ppppppppppppppppppppppp
p
ppp
pppp
p
ppp
pp
p
p
p
ppppppppppp
ppp
p
p
p
p
p
p
p
p
p
ppppppppppppppppppppppppppppppppppppppppppppp
pp
p
p
pppppppppppppppppppppppppppppppppppppppppp
p
p
pp
p
p
pppp
p
pp
p
p
p
ppp
p
ppp
pp
p
p
p
pp
ppppppppppp
p
p
p
p
p
p
p
p
p
pp
p
ppp
p
ppppppppppppppp
pp
p
p
ppp
p
p
ppppp
ppp
p
p
p
pp
p
p
p
p
p
p
p
p
pp
p
p
1000 1200 1400 1600 1800 2000
p
pp
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
pp
p
p
p
p
p
p
pp
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
pp
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
pp
p
pppp
p
p
p
p
ppppp
p
p
p
pp
pp
pp
p
p
p
pp
p
p
pppp
p
pp
pp
p
pp
p
p
p
p
p
p
pppp
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
pp
pppp
pppp
pppppppppppppppppppppp
pp
pppp
p
pp
p
p
p
p
p
ppppppp
ppppp
pp
pp
p
p
p
p
p
ppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
pp
ppppppppppppppppppppppppppppppppppppppppp
p
pppppppppppp
p
ppppppp
p
p
p
pp
p
pppppppppppp
p
pp
pp
p
p
p
p
pp
p
p
pp
p
p
pp
p
p
p
ppppppppppp
p
p
pp
ppppp
ppppp
p
pppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
pp
p
p
p
p
ppp
p
pp
p
pp
p
p
p
p
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
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
pp
p
p
p
p
p
p
pppp
p
p
p
p
p
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
ppppppppp
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
pp
p
p
p
pp
p
pp
p
ppp
pp
p
pp
p
pp
p
pp
p
pp
p
p
p
p
p
p
p
pp
p
pppp
pppp
p
p
ppppppppppppppppppppp
p
p
p
ppppp
p
p
p
ppp
p
p
p
ppppppppp
p
ppppppppppp
p
ppp
pppppppppppppppppppppppppppppppppppppppppp
ppp
p
p
pppppppppppppppppppppppppppppppppppppppp
p
p
pppp
ppppppp
p
p
p
pppppppp
ppppppppppppppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppppppppppppppp
p
p
p
p
p
p
p
p
p
p
pppp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
pp
ppp
p
pp
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
pp
p
p
p
p
p
p
p
pp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
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
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
p
p
p
p
pp
p
p
p
p
p
ppp
p
p
p
p
p
p
p
pp
ppppppp
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
ppp
pp
p
p
pp
p
p
p
p
p
p
p
pp
p
pp
p
pp
p
p
p
p
p
p
pp
p
p
p
p
p
pppp
p
pppppppppppppppppppppppppp
p
p
p
pppppppp
ppp
pp
p
p
pppppppppppp
p
p
p
p
ppp
pppppppp
p
pppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
pppppppppppppppppppppppppppppppppppppppp
pp
p
p
pppppppppp
p
p
p
pppppppp
p
ppp
p
ppppppppppppp
p
p
p
p
p
p
p
p
pp
p
ppp
pppppppppppppppp
p
p
ppppp
p
p
pp
pppppp
p
pp
p
p
p
p
pp
p
pp
p
p
p
p
p
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
pp
p
pp
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
pp
p
p
ppp
pp
p
p
pp
p
pppp
pppppp
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
pp
p
p
p
p
p
pp
p
p
ppp
p
p
p
pp
p
p
pp
pp
ppp
p
p
pppppppppppppp
pppppppppppppppppp
p
pppppp
pp
p
p
pp
p
pppp
ppppp
pppp
pp
p
p
p
p
p
pp
ppppppppppppppppppppppppppppppppppppppppppppppp
pp
p
ppp
p
p
pppppp
ppppppppppppppppppppppppppppppppppp
p
p
ppp
p
pppppp
pppp
pppppp
p
p
p
p
p
p
pppppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
ppp
pppp
pp
p
p
p
p
ppp
p
p
p
p
pp
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
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
ppp
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
pp
p
p
p
p
p
p
p
p
pp
p
p
pp
pp
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
pp
pp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
pp
p
p
p
p
p
p
pp
p
pp
p
p
p
p
p
p
pp
p
p
p
pp
pp
p
p
p
ppp
pp
pppppppppppppppppp
ppp
p
p
p
pp
p
p
p
p
p
p
p
pp
p
p
p
pp
pp
p
p
p
p
pp
p
p
p
p
pp
pppppppppppppppppppppppppppppppppppppppppppppppp
p
pp
p
ppppppppppppppppppppppppppppppppppppppppp
p
pppppppppppppppppppppp
p
p
p
p
p
p
pppppppppppp
pp
p
p
p
p
p
pp
p
pppppp
p
p
ppp
pppppp
p
pp
p
p
p
p
ppppp
p
pppppp
p
p
p
ppp
p
p
ppp
p
p
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
pp
p
p
pp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
pp
pppp
p
ppp
p
p
p
p
pppp
p
pp
p
p
p
p
p
p
p
p
ppp
pp
pp
p
pp
pp
ppp
pppp
ppppp
ppppppppppppppp
ppp
p
pppppp
p
p
p
p
pp
pp
p
p
pp
p
p
ppp
p
p
p
p
p
p
pp
p
p
p
ppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
pppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
pppp
pp
p
pppp
pppppp
p
p
p
p
p
p
pppppppp
p
p
p
p
p
p
p
pp
p
p
p
p
pp
p
p
p
p
p
p
p
pp
ppp
ppp
p
p
p
p
p
p
p
p
p
pp
pp
p
p
p
p
pp
p
p
ppp
p
pp
p
p
p
p
p
pp
p
p
p
p
p
1000 1200 1400 1600 1800 2000
pp
p
p
p
p
p
pp
p
p
p
p
p
p
pp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
pp
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
ppp
pppp
ppppp
pp
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
pp
p
p
p
pppp
p
pp
p
p
p
p
p
p
p
p
p
pp
pp
p
p
ppppppppp
pppppppppppppppppppppppppp
pp
ppp
pp
ppp
p
p
pp
p
p
ppppppppppppp
p
p
p
p
p
p
pppppppppppppppppppppppppppppppppppppppp
ppp
pp
pppp
p
p
p
p
p
p
p
p
p
p
p
p
pp
pp
pp
pppppp
ppppppppppppppppppppppp
p
p
p
p
p
p
pp
pp
pp
p
p
ppp
pppppp
p
p
p
p
p
p
pp
pppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
p
p
pp
pp
p
p
p
p
p
p
p
p
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
pp
pp
pp
p
pp
p
p
p
p
p
p
pp
p
p
p
pp
p
p
pp
p
p
pp
p
p
p
pp
p
p
p
p
pp
p
p
p
p
p
p
p
ppp
pp
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
pp
pp
p
pp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
ppp
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
p
p
p
p
p
p
p
p
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
pp
p
pppppppppppp
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
pp
p
pp
pp
p
p
ppp
p
pppp
p
p
p
p
p
p
pppp
p
p
p
p
pp
p
p
pp
p
pp
p
pppppppp
p
p
p
ppppppppppppppppp
pppppp
pp
p
pppp
p
p
p
p
p
p
p
p
p
p
p
pp
pp
p
p
pp
pp
p
p
ppp
ppp
ppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
p
p
pp
pppp
ppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
ppp
p
p
ppp
p
p
p
p
p
pppppppppppp
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
pp
pp
p
ppppppp
p
p
p
p
p
p
p
p
p
p
p
pp
ppp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
1000 1200 1400 1600 1800 2000
Figure 23: Comparison of the rst derivative of spectra of gure 14 to the bottommost derivative of the
spectrum.
30
Java & DSP A SOLUTIONS TO PROBLEMS
p
pp
ppp
p
pp
pp
p
p
p
p
p
p
pp
p
p
p
pp
pppp
p
pppp
p
p
p
ppp
p
ppppppp
p
p
ppppp
p
p
p
p
pppp
ppp
pppp
p
p
ppppppppp
pppppp
p
p
pppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
ppp
p
p
p
p
1000 1200 1400 1600 1800 2000
p
pppp
p
pp
pppp
ppp
pp
p
pp
ppp
p
p
ppppp
p
pppp
ppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppp
pp
pp
pp
p
p
p
p
1000 1200 1400 1600 1800 2000
ppp
ppp
p
pppp
ppppp
p
p
ppp
p
pppppp
p
pp
pp
ppppppppppp
p
pppppppppppp
ppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
ppp
1000 1200 1400 1600 1800 2000
ppp
p
p
p
ppp
p
pp
p
pppp
p
p
p
p
p
p
ppp
pp
pp
pp
p
pppp
p
p
p
p
p
pp
p
p
ppp
ppppppp
ppp
p
p
ppppppppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppp
pppppppppppppppppppppppppppppppppppppppppppp
pppp
p
pppp
p
p
p
p
1000 1200 1400 1600 1800 2000
p
pp
pp
p
ppp
ppppp
ppppp
p
pp
ppp
pp
pp
pppp
p
p
p
pp
p
pppppppp
ppppppppppppp
p
pppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
ppppppp
ppppppppppppppppppppppppppppppppppppppppppppp
p
ppp
pp
p
p
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
ppp
pp
p
p
p
ppp
p
p
pp
pp
ppppppppppppp
pppppppp
p
pppppppppppppppp
ppp
pp
ppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
pp
pppppppppppppppppppppppppppppppppppppppppppppppppppp
ppppp
ppppp
p
p
p 1000 1200 1400 1600 1800 2000
pppppp
pp
pp
p
pppppppppppppppp
p
ppp
ppp
pppppp
pppp
pppppppppp
p
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
pppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppp
pp
p
p
p
p
p
1000 1200 1400 1600 1800 2000
pp
p
pppp
p
p
pp
p
pp
p
p
p
pp
ppppppppppppppppp
p
ppppppppppp
pppppppppppppp
p
pppppppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pp
p
p
pp
pppppp
pp
pp
ppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
p
ppp
p
pppp
ppppp
pppp
pppppppp
pppppp
pp
ppp
p
p
ppppppp
p
p
p
p
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
ppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppppppp
pp
pp
p
p
p
1000 1200 1400 1600 1800 2000
p
p
p
pp
p
pp
p
p
p
ppppp
pp
ppp
pp
ppp
pp
p
pppppp
p
ppppppp
pp
p
p
pp
p
pppppp
p
p
pp
ppppppppppp
p
ppppp
pppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pp
p
p
1000 1200 1400 1600 1800 2000
Figure 24: Comparison of spectra of gure 14
31
Java & DSP A SOLUTIONS TO PROBLEMS
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
pp
p
p
p
p
pp
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
pp
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
pppppp
p
pp
ppp
p
p
pp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
pppp
p
p
p
pp
p
p
p
ppppp
p
p
pp
p
p
pp
p
p
p
p
p
p
pp
p
p
p
p
p
pp
p
p
p
ppp
pp
p
p
p
pp
p
ppp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
ppp
ppp
p
pppppppppppppppppppppp
ppp
ppp
ppp
pp
p
p
p
p
p
p
ppppppp
pppppp
p
p
p
pp
p
ppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
pp
pp
p
pppppp
p
ppppppppppppppppppppppppppppppp
p
p
pppppp
p
p
ppp
p
p
p
pp
p
p
pppp
p
p
p
p
p
pppppppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
ppp
p
pp
pp
p
pp
p
p
p
p
ppp
p
p
pp
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
ppp
p
pp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
p
p
pp
p
p
p
p
p
p
p
pp
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
pp
pp
p
p
pp
p
p
p
p
p
p
pp
p
p
p
p
pp
p
p
pp
pp
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
ppp
p
p
p
p
pp
p
p
pppp
pp
p
p
p
pp
pppp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
ppp
p
p
p
p
p
p
p
pp
pp
p
p
p
p
pppp
p
p
p
p
p
ppp
p
p
p
p
p
pp
p
pppppppp
pp
pppppppppppppppppppp
ppp
ppp
pppp
p
p
p
p
p
p
pp
p
p
p
p
pp
p
p
p
p
pp
p
p
p
p
p
pp
p
p
ppppppppppppppppppppppppppppppppppppppppppppp
pp
p
p
p
p
p
p
p
pppp
ppppppppppppppppppppppppppppppppppp
pp
p
p
p
p
p
p
pp
p
pp
p
p
p
ppp
pppppp
p
p
p
p
p
p
p
pppppppppppp
p
p
p
p
p
p
p
p
p
p
p
pp
p
pppp
p
p
pp
pp
ppppp
p
p
p
p
p
p
p
p
p
p
pp
p
pp
ppp
pppp
p
p
p
pp
p
p
p
pp
p
p
p
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
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
p
p
p
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
pp
p
pppp
p
pp
p
pp
p
p
p
pp
p
p
p
pp
p
pp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
ppp
p
p
p
p
p
p
pp
p
pppp
p
p
pppppppppppppppppppppppppppppppp
pp
p
p
pp
p
pppppp
ppppppp
p
p
pp
p
p
pppppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
pppppppppppppppppppppppppppppppppppppppppp
p
p
ppppppppppppppppppppp
p
p
p
p
ppppppppppppppp
p
p
p
p
p
p
pp
p
pppp
ppppppppppppppppp
p
p
p
ppppp
p
ppp
p
p
pppp
p
pp
p
p
pp
p
p
p
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
p
p
p
p
pp
p
p
p
p
p
pp
p
pp
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
pppp
p
p
p
p
p
p
p
p
p
pppp
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
p
pp
p
p
p
p
p
pp
p
pp
p
pp
pp
p
pppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppppp
p
pp
p
p
p
pppppp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
pp
pp
p
pppp
p
pp
p
p
p
pp
p
p
ppp
p
p
p
p
p
p
p
p
pp
ppp
pp
ppppp
p
pppppppppppppppppppppppppp
pp
ppp
p
pppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
ppp
p
pppppppppppppppppppppppppppppppppppppppppp
p
pp
pp
p
p
p
p
ppppppppppppppppppppppppppppppppppppppppp
p
p
ppp
p
p
pp
p
p
pp
p
p
p
ppp
ppppp
p
p
p
p
p
p
pppppppppppp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
pp
ppp
p
p
pppppp
p
p
p
p
p
ppp
p
pp
pppp
pp
pp
p
p
pp
p
p
p
pp
pp
p
p
p
p
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
pp
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
pp
pp
p
pp
p
p
p
pp
p
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
pppp
pp
p
ppppppppp
p
ppp
pp
p
p
p
p
p
p
p
pp
p
p
p
p
ppppp
p
p
p
p
p
p
p
pp
pppppp
p
pp
p
ppp
ppp
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
ppppp
p
ppp
pppppppppppppppppppp
pp
p
p
pppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pppp
p
p
p
p
p
p
ppp
p
ppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
ppp
pppp
p
ppppppppppppppppppppppppppppppppppp
p
p
p
ppp
p
p
p
p
ppp
p
p
p
ppp
ppppp
p
p
p
p
pp
ppppppppp
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
pp
p
pp
ppp
pp
pppp
p
p
p
p
p
pp
p
p
p
pp
p
pppp
p
p
pp
p
pp
p
p
p
p
p
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
ppp
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
pp
pp
pp
p
p
p
p
p
pp
p
pp
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
pp
p
pp
p
p
pp
p
p
p
p
p
p
p
pp
p
pp
ppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
ppp
p
ppp
p
pp
p
pp
p
p
p
p
p
p
p
pp
pppp
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
pppppp
p
pppppp
p
pppppppppppppppppppp
pppppp
p
p
pppp
p
p
p
p
pppppppp
pp
p
p
p
p
pp
p
p
pp
pp
p
ppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
pp
ppppppppppppppppppppppppppppppppppppppppppp
p
pppp
ppppppppp
ppppppppp
p
p
p
p
p
p
pppppppppp
pp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
ppppppp
ppppppp
p
p
p
pppp
p
p
pp
p
pp
pp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
p
ppp
p
p
p
ppp
p
p
p
p
p
pp
p
pp
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
pp
p
pp
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
ppp
p
pp
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
ppp
pp
pp
ppp
p
pp
p
p
p
p
ppp
p
p
pppp
p
p
p
p
pp
p
pp
p
p
p
p
p
p
ppp
p
p
p
p
p
p
ppppp
pppppppppppppppp
p
ppppp
pppp
p
pp
p
p
p
p
p
p
pppppppppppppp
ppp
p
pp
p
pppppppppppppppppppppppppppppppppppppppppppp
p
ppp
p
ppppppppppppppppppppppppppppppppppppppppppp
p
p
ppppppppppp
p
p
p
ppp
ppppp
p
p
pp
p
pppppppppp
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppppppppppppppppp
p
pp
p
p
p
p
p
p
pp
pp
p
p
p
ppp
p
p
p
pp
p
p
p
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
p
ppp
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
pp
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
pp
p
pp
p
p
p
p
p
p
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
pp
pp
p
pp
p
pp
p
p
p
p
p
p
p
p
p
pp
p
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
pppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
pp
pp
ppp
p
p
p
p
p
ppp
pp
p
p
p
p
p
p
pp
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
pp
p
pp
p
pp
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
pp
pppp
p
p
p
p
p
pp
p
ppp
p
pppppp
p
p
ppp
ppppppppppppppppppp
ppppppp
p
pppp
p
p
p
p
pp
ppppppp
p
ppp
p
p
p
p
pp
p
p
pp
ppppp
ppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
pp
ppppppppppppppppppppppppppppppppppppppp
p
p
ppppppppppp
p
p
ppppppppp
ppp
p
p
ppppppppp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
pp
pppppppp
pp
p
p
p
p
ppp
p
p
p
p
ppp
pp
ppppp
p
p
pp
p
p
p
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
pp
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
pp
p
p
p
p
ppp
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
pp
p
pp
p
p
p
p
p
p
p
p
p
p
pp
ppppp
p
pp
ppppppppppppppppppppppp
p
ppppppppp
p
p
ppp
pp
ppppppppppp
p
pp
p
p
p
p
p
p
pppppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
p
ppppppppppppppppppppppppppppppppppppppppp
p
p
ppp
pp
p
pppppp
ppppppppppp
p
p
p
pppppppppppp
p
p
p
p
p
p
p
p
p
p
p
p
p
ppppp
pp
ppppppppppp
p
p
p
p
pppp
p
p
p
ppppp
p
p
p
ppp
p
p
p
pp
p
p
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
ppp
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
p
p
p
p
p
p
p
pp
p
p
pp
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
ppp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
ppp
p
p
pp
p
ppp
p
p
p
p
p
pp
p
p
p
p
p
p
pp
pp
p
p
p
pp
p
pp
p
p
p
p
p
p
p
pppppppp
p
p
p
p
pp
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
pp
p
p
p
pppp
p
ppppp
p
p
p
p
p
pp
p
p
p
p
p
p
p
ppppppppppppppppppppppppppppp
p
p
p
ppppp
ppp
p
ppp
p
p
pppppppppp
p
p
pp
p
p
ppp
p
pp
ppppppppppppppppppppppppppppppppppppppppppp
p
p
p
p
p
pp
p
pppppppppppppppppppppppppppppppppppppppp
p
pppp
pppppppppppppppppppp
ppp
p
pppppppppppp
p
p
p
p
p
p
p
p
p
p
pp
p
pppp
p
pp
pppppppppp
p
p
pp
p
pp
p
ppp
ppp
p
p
p
p
pp
p
p
p
p
p
p
p
p
p
p
p
p
p
p
p
1000 1200 1400 1600 1800 2000
Figure 25: Comparison of the rst derivative of spectra of gure 14 to the bottommost derivative of the
spectrum.
32

S-ar putea să vă placă și