java dsp printer

Upload: vmacari

Post on 06-Apr-2018

224 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/3/2019 Java Dsp Printer

    1/32

    Java for Digital Signal Processing

    In a Nut Shell

    (Draft: February 1, 2007)

    Jarmo T. Alander

    University of Vaasa, Finland

    Department of Electrical Engineering and Automation

    Java for

    Digital Signal Processing

    (AUTO1030 course)Spring 2007

    int[] A = {1,2,1};

    int[] S5 = FIR(mult(10,S3),A);

    S3

    A={1,2,1}

    S510* FIR

    --

    -r

    r

    r r r r r

    r

    r r

    r

    r

    r r r

    r r

    r

    r r

    int[] S4 = derivative1(add(S1,S2));

    S1

    S2

    S1+S2S4

    r r

    r r r r r r

    r r

    r

    r

    r r r r r

    r

    r r

    add --

    -r

    r

    r r r r r

    r

    r r

    derivative1 --r

    r

    r r r r

    r

    r

    r r

    p

    p

    p

    p

    p

    p

    pp

    ppppp

    p

    ppp

    p

    ppppp

    ppp

    pppp

    ppppp

    p

    pp

    ppp

    ppp

    pppp

    pp

    p

    pp

    pp

    ppp

    pp

    ppp

    p

    pp

    p

    p

    ppp

    ppp

    pppp

    p

    pppp

    ppp

    ppp

    ppp

    pp

    pp

    pp

    pp

    pp

    pp

    p

    pp

    pp

    pppp

    pp

    ppp

    pp

    pp

    ppp

    pp

    pppppp

    p

    p

    ppp

    pp

    pp

    pppppp

    pppppp

    pppppppppp

    pppp

    ppp

    pp

    pppppp

    pp

    pppp

    pp

    pppp

    ppp

    ppppp

    ppppp

    pppppppppppppppp

    pppppppp

    ppppppppppp

    ppppp

    ppppppppppppppppppppppppp

    ppp

    pppppppp

    pppppppppppppppppppp

    pppp

    pp

    pppppppp

    pppppppppppppppppppppppppppppp

    pppppppppp

    ppppppppppppppp

    ppppppppppppppp

    pppppppppppppppp

    pppppppppppppp

    ppppppppppppppppppppp

    ppppppppppppppppppp

    ppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

    pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

    pppppppppp

    ppppppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppp

    pppppppp

    pppppppppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppp

    pppppppppppppppppppp

    pppp

    p

    p

    pppppppppppp

    pppppp

    ppppppppppppppppppp

    pppppppppppppppppp

    ppppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppppp

    pppppppp

    pppppppp

    ppppppp

    p

    pppppp

    pp

    pppppp

    ppppppppppppp

    ppp

    ppppppppppppppppppppp

    p

    p

    p

    p

    p

    p

    ppppp

    pp

    pppppppppp

    ppppppppppp

    p

    ppppppp

    pp

    pppppp

    p

    pppppppppppppp

    ppppppp

    p

    pppppp

    pp

    p

    ppppppppp

    pp

    p

    p

    pppppp

    p

    ppppppppp

    pp

    pp

    p

    p

    pp

    p

    p

    pp

    p

    pp

    pppp

    p

    pp

    pppppp

    This document can be found in the Web at

    ftp://ftp.uwasa.fi/cs/AUTO/AUTO1030/JavaDSPprinter.pdf

    as this printer friendly hand-out version, or at

    ftp://ftp.uwasa.fi/cs/AUTO/AUTO1030/JavaDSP.pdf

    as a slide show. All comments are warmly welcome.

    ftp://ftp.uwasa.fi/cs/AUTO/AUTO1030/DSP.java

    contains the Java source code used in this document.

    c2006, 2007 Jarmo T. Alander. These are the revised (February 1, 2007) web notes of a lecture of Java usage for DSP.

    1

  • 8/3/2019 Java Dsp Printer

    2/32

    Java & DSP CONTENTS

    Contents

    1 Introduction 4

    1.1 Project group . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    1.2 Why Programming and DSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    1.3 Why Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    1.4 Why not DSP assembler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    1.5 Why not Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    1.6 Why mathematics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    1.7 Why image processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    1.8 Why in English . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    1.9 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    1.10 Examples of signal processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    2 Numerics 6

    2.1 Arithmetic operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    2.2 Division and multiplication by 2n can be done efficiently . . . . . . . . . . . . . . . . . . 6

    3 Methods 7

    3.1 Methods and classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    3.2 Example 1: constant vector or signal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73.3 Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    3.4 Constant vector by Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    3.5 Example 2: Moving average . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    3.6 Method as a black box . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    3.7 Example 3: combining methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    3.8 Example 4: derivative1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    3.9 Example 5: method add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    3.10 Example 6: FIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    3.11 Example N (long): NIRS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    3.12 Sqrt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

    3.13 S/N . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

    4 Classes 19

    4.1 DSP class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    4.2 Example class DSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    4.3 Graphical representation: container . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

    5 Image Processing 23

    6 Hyperimage processing 24

    6.1 What is hyperimage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

    7 Conclusions and Future 25

    7.1 Future . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

    7.2 Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

    7.3 Further reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

    A Solutions to problems 27

    A.1 Abbreviations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    A.2 Useful links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    2

  • 8/3/2019 Java Dsp Printer

    3/32

    Java & DSP CONTENTS

    Trademarks

    Java is a registered trademark of Sun Microsystems, Inc.

    This document was typeset by the author using Leslie Lamports LATEX (http://www.latex-project.org/ )

    extension of Donald Knuths TEX typesetting system and Beamer (http://latex-beamer.sourceforge.net/ )

    extension of LATEX for slides.

    3

  • 8/3/2019 Java Dsp Printer

    4/32

    Java & DSP 1 INTRODUCTION

    1 Introduction

    Abstract

    This is a draft for a tutorial for Java programming for solving basic signal processing problems. The

    goal of this tutorial is to help students to learn how to use computer programming as a tool to design

    and implement signal processing methods. This tutorial contains basics of Java syntax and semantics,

    examples of DSP problems solved by Java, and references to further reading.

    Keywords: digital signal processing, image processing, Java, object-oriented programming,

    1.1 Project group

    Persons more or less influenced this tutorial include

    Prof. Jarmo Alander: first draft

    DI Janne Koljonen: Java examples (Virtual Keeper)

    Econ. Olli Snellman: Java multimedia programming

    DI Petri Vlisuo: Java examples

    Dr. Timo Mantere: Java examples and testing

    BSc Olli Kanniainen: Java examples.

    The idea and need to write this tutorial emerged from the difficulties encountered by the students to

    solve exercises using programming approach essential in modern engineering design and creativity.

    Programming is like eating an elephantdo it piece by piece.

    1.2 Why Programming and DSP

    Signals is digital format are suitable only for digital electronics and computer processing, the latter of

    which is more flexible and also the main processing type. This means that most signal processing is done

    by computer programs in computers and embedded systems like mobile phones, CD-players, and digital

    cameras. Before microprocessors, signal processing was done by analog electronics.

    1.3 Why Java

    The high level programming language Java is gaining more and more popularity as a tool for programming

    large software systems for smaller and smaller devices. It is a general purpose programming language also

    suitable for signal processing. In this tutorial we will only take some parts of the language, and leave the

    rest for the main programming studies.

    Java programmers do it more modularly,

    1.4 Why not DSP assembler

    Signal processing is done much with special DSP processors having special tailored commands to do nu-

    merical calculations. Java was preferred here because it can be used also in very many other applications,contrary to DSP programming, which is not used much outside the DSP community.

    1.5 Why not Matlab

    This programming introduction to DSP could also have been done using Matlab. However, Java is a general

    purpose language useful also in more general setting of automation software and beyond. Hence program-

    ming skills in Java are more useful for anybody not intending to concentrate only on DSP.

    4

  • 8/3/2019 Java Dsp Printer

    5/32

    Java & DSP 1 INTRODUCTION

    1.6 Why mathematics

    Digital signal processing is based on mathematical methods and notations, most of which are easy 1 to

    implement using any programming language. These mathematical concepts include real and complex

    arithmetics, basic functions, iteration, vectors, and matrices. We will look these by a few simple examples

    taken from DSP.

    1.7 Why image processing

    Vision is perhaps the most important sense:

    it makes human-computer interaction natural.

    it has endless number of applications, and

    it is in a rapid development phase due to computing and digital electronics.

    More and more tasks are aided by graphical user-interfaces with extremely high quality image features. In

    these kinds of applications Java is a good choise for a programming language.

    Information as images are often excellent for human interpretation and consultations. The human eye,

    even if being in very many ways an excellent device, has some weak points that can be quite easily assisted

    by a modern computer system. The weaknesses include:

    Limited contrast resolution, which can be often adjusted by rather simple scaling algorithms.

    Lack of absolute image memory makes it difficult to monitor slow processes like tumour growth or

    tensile testing []. A computer can memorise precisely image information as long as needed. There

    are also rather simple algorithms to compare images, display the differences, and to calculate the

    amount of differences. [?]

    Hence we will use quite many image processing examples in what follows.

    1.8 Why in English

    These notes are written in English so that both Finnish and foreign students can use these notes.

    1.9 Motivation

    Before going into details of Java and DSP, a word of motivation: Remember, that programming skills are

    highly esteemed in labour market. About half (50%) of industrial productivity is due to ITC development,

    and that is based on programming new applications.2

    1.10 Examples of signal processing

    The following list gives an example of signal processing applications done by our group.

    Under construction ...

    1This is really true.2The rest is due to all the other engineering branches altogether, hence what ever you develop, half of it should be ICT, on the

    average.

    5

  • 8/3/2019 Java Dsp Printer

    6/32

    Java & DSP 2 NUMERICS

    2 Numerics

    The basic numerical types in Java are shown in table 1. As can be seen the integer type is long enough for

    any basic signal processing, where ADC signals are processed. Typically ADC signals contain only 8 to 16,

    sometimes even 24, significant bits. In what follows we are mainly using integers (int 32bits) to represent

    signal values and integer arrays (int[]) to represent signal sequences like time series.

    Table 1: Numerical types in Java.

    type size range

    byte 1 byte (8 bits) -128 ... 127

    short 2 bytes (16 bits) -32 768 ... 32 767

    int 4 bytes (32 bits) -2 147 483 648 ... 2 147 483 647

    long 8 bytes (64 bits) -263 ... 2631

    float 4 bytes (32 bits) 3.41038 about 7 decimal positionsdouble 8 bytes (64 bits) 1.710308 about 15 decimal positions

    2.1 Arithmetic operations

    Evaluating a formula in floating point arithmetics is sensitive to the execution order of the operations. Here

    some advice:

    Always sum in increasing order. Otherwise precision may be lost in floating point scaling.

    Avoid subtraction of nearly equal values. Again the floating point scaling is the potential reason of

    loss of precision.

    Division of zero is always a headache for a programmer of numerical software. Test before division

    that the denominator is not too small ( 0).

    Using integers instead of floating point values we can avoid some problems, while unfortunately geting

    some integer dependent problems like imprecise function values. A decent compromise is fixed pointnumbers that use integers to represent decimal numbers of given decimal places. In practise we can e.g.

    compute by values 100 times larger than the real ones (from ADC etc) and output values with decimal point

    between the second and third less significant digit positions.

    2.2 Division and multiplication by 2n can be done efficiently

    In case we have division (or multiplication) of a binary coded integer by 2n the fastest way to do it is just to

    shift the integer n steps right:

    i/8 is equivalent to i3.

    The -operator shifts the bits of the first operand to the right by the amount given as the second operand

    (here 3; 23 = 8). The reverse -operator can be used when multiplication by 2n is needed:16*i is equivalent to i4.

    6

  • 8/3/2019 Java Dsp Printer

    7/32

    Java & DSP 3 METHODS

    3 Methods

    In what follows we will briefly introduce the most important concepts and constructions of Java -language

    in the framework of introductory signal processing application. We will not be extremely purist with respect

    to Java definitions. When in doubt, please make experiments with our Java interpreter or consult the Java

    tutorials by the Sun Microsystems (http://java.sun.com/docs/books/tutorial/ ) or still better do

    both.

    Allways remember the KISS principle: Keep It Simple Stupid.

    3.1 Methods and classes

    Subroutines, functions, and procedures are all called methods in Java. Here we will collect a set of methods

    to a subroutine package, called class in Java language terminology.

    Before looking classes more carefully, we start by writing a few methods and by that way learn basic

    constructions of Java.

    3.2 Example 1: constant vector or signal

    Our first method will create a vector of n integer items all set to a given constant c:

    public static int[] constant(int n, int c) ///** create an n item constant vector = c*/ // comment

    { // create a constant vector

    int[] R = new int[n]; // reserve space

    for(int i=0; i

  • 8/3/2019 Java Dsp Printer

    8/32

    Java & DSP 3 METHODS

    int c parameter c of type integer.

    int[] R = new int[n]; allocation of space (creation of an object) for the result. When returning a

    non-scalar value we have to reserve memory space (new) for it. Operator = is an assignment of the

    created vector to variable R (or actually a link to the memory).

    for(int i=0; i

  • 8/3/2019 Java Dsp Printer

    9/32

    Java & DSP 3 METHODS

    3.4 Constant vector by Java

    In Java we can also write directly constant initialisation vectors:

    int[] ZeroVector = {0, 0, 0};

    Which one is better depends on the situation: tiny vectors are usually easier to write explicitly than program

    while it is best to program longer vectors. Writing constant(10000,999999) will save a lot, lot, ... of

    boring and errorprone typing.

    Exercise 3.1 Implement the delta function: i,j = 1, when i = j, andi,j = 0, when i = j, outputting aninteger array of given length (parameter n).

    Observe, that due to maintenance reasons it is usually good to avoid scattering constants other than 0

    and 1 around the program code. Use symbolic constants instead.

    3.5 Example 2: Moving average

    Our second example will be a method that evaluates a moving average of a given time series x[] using

    moving window of width 2n+1:

    public static int[] moving(int[] x, int n) // COMMENTS:

    /** average of x using window size 2x+1 */ // comment

    { // moving average of window 2n+1

    if (n

  • 8/3/2019 Java Dsp Printer

    10/32

    Java & DSP 3 METHODS

    S += x[I-]+x[J++]; Operators - and ++ are shorthand notations for expressions I = I - 1 and J = J + 1.

    This notation is inhereted from C-language, and used where utmost efficiency is needed. Namely they

    are often found as machine level commands (increment or decrement by 1). Similarly S+=x is a short

    hand notation for S=S+x also this is usually translated into an efficient special machine code command

    (the contents of the accumulator register is increased by x).

    Summing is done starting from the center of the window and proceeding towards the ends of the

    window.

    R[i] = S/W; In a finished program every division should be checked to be valid. W should not be zero,

    which is true because W=2*n+1= 0, for nIN.

    3.6 Method as a black box

    In order to clarify Java concepts we use some simple graphics like rectangular boxes and other similar

    constructions. The methods constant and moving are shown in figure 1. Parameters are represented by

    arrows pointing to the left side of the method box, while the type returned by the method is shown by an

    arrow pointing outwards from the right side of the method box. The types of the parameters and the output

    are shown above or under the arrows.

    The term black box means that the observer i.e. the one who is using a method does not know the details

    of its implementation inside the black box. It is enough to know the interface, the parameter and outputtypes, and what the method should do.

    The details of the method could not interest less the observerthe details are left just for the programmer

    of the method.

    constant -int[]-int-int

    int[] constant(int,int)

    moving -int[]-int[]-int

    int[] moving(int[],int)

    Figure 1: Box representation of the definition of the methods constant and moving.

    3.7 Example 3: combining methods

    In this example we will combine our two methods into a simple signal filtering example. Our task is to

    apply the moving average filter to a constant time series to see what really happens.

    Let the constant time series be ten (10) times one (1) and the window size of the moving average filter

    W= 22+1 = 5.

    Our codeline is shown in the graphical representation of figure 2.

    int[] S1 = moving(constant(1, 10), 2);

    int[]constant --n=10

    -c=1 r r r r r r r r r r moving -

    -

    -n=2 r r

    r r r r r r

    r r

    S1

    Figure 2: Box representation of command int[] S1 = moving(constant(10,1),2).

    Exercise 3.2 Take a moving average of the output of a delta function method of the exercise 3.1.

    10

  • 8/3/2019 Java Dsp Printer

    11/32

    Java & DSP 3 METHODS

    3.8 Example 4: derivative1

    Our next method called derivative1 will estimate the derivative of a time series by taking the difference

    between the consecutive items of the time series.

    public static int[] derivative1(int[] x) //

    /** the 1st derivative of series x */ //

    { // derivative by difference xi - xi+1

    int N = x.length; // length ofxint[] R = new int[N]; // reserve space for result

    for(int i=1; i

  • 8/3/2019 Java Dsp Printer

    12/32

    Java & DSP 3 METHODS

    int[] S4 = derivative1(add(S1,S2));

    S1

    S2

    S1+S2S4

    r r

    r r r r r r

    r r

    r

    r

    r r r r r

    r

    r r

    add --

    -r

    r

    r r r r r

    r

    r r

    derivative1 --r

    r

    r r r r

    r

    r

    r r

    Figure 4: Application of method derivative1 to the added output of our previous examples.

    /** FIR filter of x using coeff a */ // FIR filter; coeffa

    { //

    int N = x.length; // length ofx

    int M = a.length; // length ofa

    int[] R = new int[N]; // reserve space for result

    int W=0; //

    for(int i=0; i

  • 8/3/2019 Java Dsp Printer

    13/32

    Java & DSP 3 METHODS

    Figure 6 below shows a typical NIR spectrum of human skin taken for clinical research purposes. You can

    find more information on this medical application of signal processing from the web address below:

    More information from:

    ftp://ftp.uwasa.fi/cs/report05-4/TTIprinter.pdf or

    ftp://ftp.uwasa.fi/cs/report05-4/TTI.pdf

    p pp p p p p p p p p p p pp p p p p pp p p p p p p p p p p p pp pp pp p p p p pp pp p pp p pp p p

    p p pp p p p pp p p pp pp p p p p p p p ppp pp p p pp p pp pp p pp pp p pp p

    p pp pp p p p pp p p p pp p p p p p

    p p p p p p p p p p p pp pp pp p pp pp p pp p p p p p p p p p p p p p p pp p

    p pp p

    p p p p pp pp p p pp p p p p p p p p pp p p p

    p pp p

    ppp p

    pp

    p

    p

    p

    p

    p

    p

    pp

    p p p ppp

    p

    p

    p

    pp

    pp

    pp

    pp

    pp p p p p p p p pp p

    pp p

    pp p

    p p pp pp

    p

    p

    p

    p

    pp p p

    p

    p

    p

    p

    p

    p

    p

    p

    p

    pp p p p

    pp p

    pp p

    p

    p

    p

    p

    pp p

    p

    1000 1200 1400 1600 1800 2000

    Figure 6: A NIR spectrum of human skin (spectrum A)

    There should be some small details in the spectrum, peaks and valleys, that are of interest to the clinician

    for diagnostic purposes. In order to find them we try to filter away the background by derivating the

    spectrum by our derivative1 method. The result is shown in figure 7.

    p

    p

    p

    ppp

    pp

    pp

    pp

    p

    pp

    p

    p

    pp

    pp

    p

    p

    p

    pp

    pp

    p

    p

    p

    ppp

    p

    pp

    p

    p

    ppppp

    pp

    p

    ppp

    p

    pp

    pppp

    pp

    p

    p

    pppppppp

    ppp

    pppp

    p

    pppp

    pppppppp

    pppp

    pppp

    ppp

    ppppppp

    ppp

    p

    p

    p

    p

    pppppp

    pppppppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppp

    pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

    pppppp

    pppppppppppppppppppppppppppppppppppppppppppp

    ppppppppppppppp

    ppppppp

    ppppppppppppp

    p

    p

    p

    p

    p

    ppp

    p

    p

    p

    p

    p

    p

    pppp

    pppp

    pp

    pppp

    pppppppppp

    pppppp

    ppppp

    pppp

    pppppp

    pppppp

    pppp

    p

    p

    p

    p

    ppp

    p

    p

    p

    p

    ppppppp

    pppppp

    ppp

    p

    p

    p

    p

    p

    p

    p

    p

    p

    p

    p

    p

    p

    pp

    p

    p

    p

    p

    ppp

    p

    p

    pp

    pp

    ppp

    p

    p

    p

    p

    p

    p

    pp

    pppp

    pp

    ppppp

    pp

    p

    p

    p

    p

    p

    p

    p

    p

    p

    p

    p

    p

    pp

    p

    p

    p

    p

    p

    p

    p

    p1000 1200 1400 1600 1800 2000

    Figure 7: The first derivative of NIR spectrum A using derivative1 method.

    Our derivative1 method is not good in suppressing noise. According to theory a better method should

    be e.g. der101. The result of applying der101 to our example spectrum is shown in figure 8.

    Exercise 3.7 Method der101 estimates the derivative of a series x by formula x[i] = x[i+1]-x[i-1].

    Implement methodder101 returning the derivative series.

    The peaks and valleys in NIRS vary much in size. The basic properties of peaks and valleys are their

    location and height. The peak location gives the wavelength, which is further inversely proportional to

    the energy difference between the vibrational states of the molecule, which further give information on

    the physics and chemistry of the object measured. In our example case the peaks correspond to certain

    13

  • 8/3/2019 Java Dsp Printer

    14/32

    Java & DSP 3 METHODS

    ppp

    pp

    p

    p

    p

    ppp

    pp

    p

    p

    p

    p

    p

    p

    p

    p

    p

    pp

    p

    p

    p

    p

    p

    pppp

    pp

    p

    pp

    p

    p

    ppppp

    pppp

    pp

    pp

    ppppp

    ppp

    ppp

    pppppp

    ppppp

    ppp

    pppppppppp

    pppp

    pppp

    pppppppp

    ppppp

    pppppp

    pppp

    pppppppppppppppppppppppppppppp

    ppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

    pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

    pppppppppppppppppp

    pppppp

    ppppppppppppppppp

    ppppppppppppppppppppppppp

    pppppppppp

    ppppp

    pppp

    ppppp

    ppppppppp

    p

    p

    p

    p

    p

    p

    p

    pp

    p

    p

    p

    p

    p

    p

    p

    p

    p

    p

    p

    pp

    pp

    p

    p

    p

    pppppppp

    pppp

    ppppppppp

    pppppppp

    pppp

    pppp

    pppppp

    p

    p

    pp

    ppppp

    pp

    p

    pp

    ppp

    pp

    p

    pppp

    p

    p

    p

    p

    p

    p

    p

    p

    p

    p

    p

    p

    p

    p

    pp

    p

    p

    pp

    p

    pp

    p

    p

    p

    p

    p

    pp

    p

    p

    p

    p

    p

    p

    p

    p

    p

    pp

    p

    p

    p

    pp

    pp

    pp

    p

    p

    p

    p

    p

    p

    p

    p

    p

    p

    p

    p

    p

    p

    p

    p

    p

    p

    p

    p

    p

    p

    p

    1000 1200 1400 1600 1800 2000

    Figure 8: The first derivative of NIR spectrum A using der101 method.

    molecules or parts of molecules and their interactions that strongly absorb certain NIR wavelengths. The

    peak height is proportional to the concentration of the given molecule.

    Geometrically in the first derivative spectrum the peak or valley location i.e. the highest or lowest point

    correspond to points where the derivative signal crosses zero.

    The third important property of peak or valley is its width. There are several ways to define width, how-

    ever. Here we will approximate the width by the distance between the peak and valley of the corresponding

    second derivative signal at the peak or valley.

    In order to evaluate the basic properties of peaks and valleys we need methods to evaluate derivatives

    and peak locations. The easies way of implementing the second derivative is to apply the first derivative

    twice, like:

    int[] D1 = der101(S);

    int[] D2 = der101(D1);The fourth important peak/valley property is its area, which can be estimated once the local background

    is estimated.

    The details of spectra vary much. Hence, the values of derivatives also vary much. This complicates

    the graphical display of derivatives. The dynamics of derivation can be suppressed by a logarithm or root

    function for graphical display. Figure ?? shows the results of applying square root function (method Sqrt)

    to the output of our der101 derivation method. Similarly figure 9 shows the derivative of another skin

    spectrum done by applying der101 and square root dampening.

    3.12 Sqrt

    Method Sqrt compressing signal dynamics for graphical display is as follows:

    public static int[] Sqrt(int[] x, double a) //

    /** square root of abs x scaled by a */ //sign(x) a sqrt(|x|){ //

    int N = x.length; // length ofx

    int[] R = new int[N]; // reserve space for result

    for(int i=0; i

  • 8/3/2019 Java Dsp Printer

    15/32

  • 8/3/2019 Java Dsp Printer

    16/32

  • 8/3/2019 Java Dsp Printer

    17/32

  • 8/3/2019 Java Dsp Printer

    18/32

  • 8/3/2019 Java Dsp Printer

    19/32

    Java & DSP 4 CLASSES

    4 Classes

    A Java class is an aggregation of attributes (variables) and methods (functions). In addition we can create

    new copies of class variables. In Java, and in general in other object-oriented langueges, these copies in

    computers memory are called objects.

    4.1 DSP classThe simplest class contains only methods and can be seen as a method or subroutine package, where some

    of the methods may call other methods in the same class.

    4.2 Example class DSP

    The following class called DSP was used in our first method examples.

    public class DSP //

    { //

    public static int[] constant(int n, int c) //

    /** ... */ // create a constant vector

    { //

    int[] R = new int[n]; // reserve space

    for(int i=0; i

  • 8/3/2019 Java Dsp Printer

    20/32

  • 8/3/2019 Java Dsp Printer

    21/32

  • 8/3/2019 Java Dsp Printer

    22/32

    Java & DSP 4 CLASSES

    4.3 Graphical representation: container

    Because the most important function of a class is to be a container holding all methods and attributes

    together, we will use an oval shaped container as the symbol of a class and object of a class:

    DSP

    add()-

    -

    -

    DSP

    fun()-

    -

    -

    ?6

    a1 a2

    Figure 17: Method add of class DSP using no attributes of DSP. Another method fun updating attribute a1

    and reading another attribute a2 of class DSP.

    Still working on this subject ... hold on, please.

    22

  • 8/3/2019 Java Dsp Printer

    23/32

    Java & DSP 5 IMAGE PROCESSING

    5 Image Processing

    In this section we will see how basic image processing methods can be implemented in Java. An image is

    typically represented by a two-dimensional integer array:

    int[][] Image = new int[1024][1024];

    reserves space for a 10241024 pixel one color (grey tone) image.

    For processing an image array we need two loops like this:public static int[][] Ifun(int[][] Image) //

    /** ... */ // an image processing function

    { //

    int N = Image.length; // height of Image

    int M = Image[0].length; // width of Image

    int[][] R = new int[N][M]; // space for result

    for(int i=0; i

  • 8/3/2019 Java Dsp Printer

    24/32

    Java & DSP 6 HYPERIMAGE PROCESSING

    6 Hyperimage processing

    6.1 What is hyperimage

    The by far most common image types are grey tone and color images. It is also possible to increase the

    number of colors in a color image far beyond the three necessary for visible color images as well as going

    beyond visible light to ultraviolet and infrared even beyond. Figure 19 shows schematically the relation

    between pixel, image, and hyperimage.

    HyperimageProcessing

    6

    ?

    Image Processing

    6

    ?

    Chemometrics(Spectroscopy)

    image[][](photo)

    6

    ?

    pixel[](spectrum)

    hyperimage[][][]

    -

    6

    qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq

    qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq66

    melanoma??

    ulcers

    a

    Figure 19: Pixel, image, and hyperimage

    Still working on this subject ... hold on, please.

    24

  • 8/3/2019 Java Dsp Printer

    25/32

    Java & DSP 7 CONCLUSIONS AND FUTURE

    7 Conclusions and Future

    7.1 Future

    The anticipated future activities could include signal processing Java package, exercises, some of which

    interactive, graphical tools for demonstrating the above, and graphical tools for teaching programming in

    Java.

    7.2 Acknowledgements

    Mr. P. Vlisuo is acknowledged for introducing Beamer slide processing.

    7.3 Further reading

    Arto Wikla, "Ohjelmoinnin perusteet Java-kielell [Principles of Programming using Java Language]", Ota-

    DATA, Espoo, 1999.

    25

  • 8/3/2019 Java Dsp Printer

    26/32

    Java & DSP 7 CONCLUSIONS AND FUTURE

    ppp

    ppppppppp

    ppppppp

    ppppppppppp

    pppp

    ppppppppppp

    ppppppppppppppppp

    pppppppppppppp

    pppppppppppppppppppp

    pppppppppppppppppppppppp

    pppppppppppppppppppp

    ppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppp

    pppppppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppp pppppppppppppppppp pppppppppppppppppp pppppppppppppppp

    pppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppp pppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

    pppppp

    p

    p

    p

    p

    p1000 1200 1400 1600 1800 2000

    ppp

    ppp

    pppppp

    pppppppppppppp

    pppppppp

    ppppppppp

    pppppppppp

    pppppppppppppppppppp

    pppppppppppppppppppp

    pppppppppppppppppppppp

    pppppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppp pppppppppppppppppp

    ppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppp pppppppppppppppppp ppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppp pppppp

    pp

    pp

    pppppppppppppppppppppppppppppppppppppppppppppppppp

    ppppp

    ppppppp

    p

    p

    p

    p

    1000 1200 1400 1600 1800 2000

    pppppppppppppppppp

    pppppppp

    ppppppppppppppp

    ppppppppppppppppppp

    pppppppppp

    pppppppppppppppppppppppppppp

    pppppppppppppppppppppppppp

    pppppppppppppppppppppppppppppp

    pppppppppppppppppppppppppppppppppppppppppp

    pppppppppppppppppppppppppppp ppppppppppppppppppppppp pppppppppppppppppp pppp

    ppppppppppppp pppppppppppppppppp pppppppppppppppppppppppppppppppppppp pppppppppppppp pppppppppppppppppp pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppp ppppppppppppp ppppppppppp

    pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

    p

    pp1000 1200 1400 1600 1800 2000

    pppppp

    ppppppp

    pppppppppppp

    ppp

    ppppp

    pppppppppppppppppp

    ppppppppppppppppppp

    ppppppppppppppppppppppp

    ppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppppp

    pppppppppppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppp ppppp

    pppppppppppp ppppppppppppppppppppppp pppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppp p

    pppppppppppp ppppppppppppppppppppppppppp pppppppppppp

    pppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppp

    p

    pppp

    1000 1200 1400 1600 1800 2000

    pppppppppppp

    pppp

    ppppppppppp

    ppp

    pppp

    ppp

    ppppppppppppppp

    ppppppppppppppppppppp

    pppppppppppppppppppppp

    pppppppppppppppppppppppppp

    pppppppppppppppppppppppppp

    pppppppppppppppppppppppppppppp

    pppppppppppppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppp ppppppppppppppppppppppp pppppppppppppppppppppppppp pppppppppppppppppppppppppppp pppppppppppppppppppppp pppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppp

    ppppp

    ppppppppppppppppppppppppp

    ppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppp

    pp

    p

    p

    pppppppppppppppp

    pppppp

    pppppppppppppppppppppp

    ppppppp

    pppppp

    ppp

    ppp

    p

    pp1000 1200 1400 1600 1800 2000

    pppppppppppp

    ppppppppppp

    pppppppppppppp

    pppppppppppp

    pppppppppppppppppppp

    ppppppppppppppppppp

    ppppppppppppppppppppp

    pppppppppppppppppp

    pppppppppppppppppppppppppp

    ppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppppp pppppppppppppp pppppppppppppppppp pppppppppppppppp

    ppppppppppp pppppppppppppppppppppppppp pppppppppppppppppppppppppppp pppppppppppppppppppppp ppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppp

    pppppppppppppppppppppppppppppp ppppppppppppppppppp ppppppppppp

    ppp

    ppp

    1000 1200 1400 1600 1800 2000

    pppppppppppppp

    ppppppppp

    pppppppppppp

    pppppppppppppp

    pppppppppppppppppppp

    ppppppppppppppppppp

    pppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppp

    pppppppppppppppppppppppppppppppppp pppppppppppppp pppppppppppppppppppppp pppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppp pppppppppppppppppppppppppppp pppppppppppppppppp ppppppppp

    ppppppppppppp pppppppppppppppppppppp pppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppp

    pppp

    1000 1200 1400 1600 1800 2000

    ppppppp

    ppppppp

    pppppppppppppp

    ppppppppppppp

    ppppppppppppppppppppp

    pppppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppppp

    ppppppppppppppp ppppppppppppp ppppppppppppppppppp ppppppppppppp pppppppppppppp p

    pppppppppppp ppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppp

    ppppppppppppp pppppppppppppp pppppppppppppppppppppp pppppppppppppppp

    pppp

    pppppp

    ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

    pp

    p

    p

    p

    pppppppppppp

    ppppppppp

    ppppppppppppppppppppppppppp

    pppppp

    ppppppp

    pppp

    p

    1000 1200 1400 1600 1800 2000

    pppppp

    pppp

    ppppppppp

    ppppppppppppppppppp

    pppppppppppppppppp

    ppppp

    ppppppppppppppppppp

    pppppppppppppppppppppppppppppppppp

    pppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppppppp pppppppppppppppppppppppppp ppppp

    pppppppppppppp ppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppp ppppppppppppp pppppppppppppppppppppppppppppppppppp pppppppppppppp ppppppppppppppppppppppp pppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppp

    ppppp

    ppppp

    p

    1000 1200 1400 1600 1800 2000

    ppppppp

    ppppppppp

    ppppppp

    pppppppppp

    pppppppp

    ppppppppppppppp

    ppppppppppppppppp

    ppppppppppppppp

    pppppppppppppppppppppp

    pppppppppppppppppppp

    pppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppppppp

    ppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppp pppppppppppppppp

    ppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppp

    p

    1000 1200 1400 1600 1800 2000

    Figure 20: Comparison of spectra of figure 14

    26

  • 8/3/2019 Java Dsp Printer

    27/32

    Java & DSP A SOLUTIONS TO PROBLEMS

    A Solutions to problems

    Not any yet, sorryplease supply some.

    A.1 Abbreviations

    ADC Analog Digital Converter

    CAD Computer Aided Design

    DI Diplomi-Insinri (MSc eng.)

    DSP Digital Signal Processing

    FIR Finite Impulse Response (filter)

    HCI Human-Computer Interface

    NIR Near-InfraRed

    NIRS NIR Spectroscopy

    A.2 Useful links

    Our homepage:

    http://www.uwasa.fi/TAU

    AUTO1030 homepage:

    http://www.uwasa.fi/TAU/AUTO1030

    27

  • 8/3/2019 Java Dsp Printer

    28/32

  • 8/3/2019 Java Dsp Printer

    29/32

    Java & DSP A SOLUTIONS TO PROBLEMS

    pppp

    ppppppppp

    pppp

    ppppppppppppppp

    pppppppppppp

    pppppppppppppppppp

    pppppppppppppppppp

    ppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppppp

    pppppppppppppppppppppp ppppppppppppp pppppppppppppp pppppppppppppppppp ppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppp p

    pppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppppp

    pp

    pp

    p

    1000 1200 1400 1600 1800 2000

    ppp

    ppppp

    pppppppppppp

    ppppppppppppppppppppppp

    ppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppp

    pppppppppppppppppppppppppppppppppppppppppp

    pppppppppppppppppppppppppppppppppppppppppppppppp

    pppppppppppppppppppppp ppppppppppppppppppppppppp

    ppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

    p

    pppp

    1000 1200 1400 1600 1800 2000

    ppppp

    p

    ppppppppppp

    ppp

    ppppp

    pppppppppppppppppppppppppp

    pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppppppp ppp

    pppppppppppppppppppppppp pppppppppppppppppp pppppppppppppppppppppppppppp pppppppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppppppppppppp pppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppp

    ppppppp

    p

    1000 1200 1400 1600 1800 2000

    pppppp

    pppppppp

    p

    pppppppppppp

    pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppp pppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppp pppppppppppppp ppppp

    ppppppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppp ppppp

    pppppppppppppppppppppppppppppppppppp pppppppppppppppppppppp p

    pppppp

    p

    p1000 1200 1400 1600 1800 2000

    p

    p

    p

    ppppp

    pp

    pppp

    p

    pppp

    p

    pppppp

    ppp

    pppp

    pppppppppp

    pppp

    pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppp ppppppppppppppppppppppp pppppppppppppppppp pppppppppppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppp

    pppppppppppppppppppppppppp pppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppppppppppppppp

    ppp

    p

    p

    1000 1200 1400 1600 1800 2000

    ppppppp

    p

    ppppppppp

    ppppppppp

    ppppppppppppp

    pppppppppppppppp

    pppppppppppppppppp

    ppppppppppppppppppppp

    pppppppppppppppppppppppppp

    pppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppppppppppp

    ppppppppppp ppppppppppppp pppppppppppppppppp pppppppppppppp pppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppp ppppppppppp

    pp

    pppp

    pppppppppppppppppppppppppppppppppppppppppppppppppp

    pppppp

    ppppppp

    1000 1200 1400 1600 1800 2000

    pppppp

    pppppppppppp

    ppppppppppppppppp

    pppp

    ppppppppppppppppp

    ppppppppppppppppppppp

    pppppppppppppppppppppp

    pppppppppppppppppppppppppppp

    pppppppppppppppppppppppp

    pppppppppppppppppppppppp

    ppppppppppppppppppppppppp

    pppppppppppppppppppppppp

    ppppppppppppppppppppp

    ppppppppppppppppppppppppppppp pppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppp

    ppppppppppp pppppppppppppppppppppp pppppppppppppppppp pppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppp

    pppppppppppp pppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppppp

    pppppppppppppppppppppppppppppppppppppppp

    pp

    p1000 1200 1400 1600 1800 2000

    pppppp

    pppppppppppp

    ppppppppppppppppppppppppppppppppppppp

    ppp

    ppppppppppppppppppp

    pppppppppppppppppppppp

    pppppppppppppppppp

    pppppppppppppppppppppp

    ppppppppppppppppppppppp

    ppppppppppppppppppppppp

    pppppppppppppppppppppppp

    pppppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppp

    pppppppppppppppppppppppppppppppppppppppppppppppppppppppp

    ppp

    pppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

    pppppp

    p

    1000 1200 1400 1600 1800 2000

    pppppppp

    pppppppppp

    ppppppppppppppppp

    ppppppppp

    ppppppppppppppppppp

    ppppppppppppppppppp

    ppppppppppppppppppp

    pppppppppppppppppppppp

    ppppppppppppppppppppppppppppppp

    pppppppppppppppppppppppppppppppppp

    pppppppppppppppppppppppppppppppppppppppppppppppppp pp

    ppppppppppppppppppppppppppppppppppppppppppppppppppppppp

    pppppppppp pppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppp

    ppppppp

    ppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppp pppppppp

    p

    p

    pppppppppppp

    ppppppppppppppppppppppppppppppppppppppp

    pppppp

    ppp

    pppppp

    1000 1200 1400 1600 1800 2000

    ppp

    pppppp

    pppppppppppp

    ppppppppp

    ppppp

    pppppppppp

    ppppppppp

    pppp

    ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppp

    pppp

    ppppp

    ppppppppppppppp ppppppppp

    pppppppppppppppppppppppppppppppp pppppppppppppppppppppp pppppppppppppppppppppppppppppppp pppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

    ppppppp

    p

    pp

    p

    1000 1200 1400 1600 1800 2000

    Figure 22: Comparison of spectra of figure 14

    29

  • 8/3/2019 Java Dsp Printer

    30/32

  • 8/3/2019 Java Dsp Printer

    31/32

    Java & DSP A SOLUTIONS TO PROBLEMS

    ppp

    pppppp

    pppppppppp

    ppppp

    ppppppppp

    ppp

    ppppppppppp

    ppppppp

    ppppppp

    pppppppppp

    ppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppp

    ppppppppppppppppppppppp ppppppppppppp ppppppppppppppppppp pppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppp ppppppppppppppppppppppppppppppppppp ppppppppppppppppppp pppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

    ppppp

    p

    p

    p

    p1000 1200 1400 1600 1800 2000

    ppppp

    ppp

    ppppppppppppp

    ppppppp

    pppppppppppppppppppp

    pppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

    pppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppp

    pppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppppppp ppppppppppppp pppppppppppppppppppppppp

    pppppppppppppppppppppppppppppppppppppppppppppppppppppppp

    pppppppppppppppppppppppppppppppppppppp

    ppppp

    p

    pp1000 1200 1400 1600 1800 2000

    ppppppppppppp

    ppppppppppppppp

    ppp

    pppppppppppppppppp

    pppppppppppppppppppppppppppppp

    pppppppppppppppppppppppppppppppppp

    pppppppppppppppppppppppppppppppppppppppp

    pppppppppppppppppppppppppppppppppppppppppp

    pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp pp

    pppppppppppp pppppppppppppppppp pppppppppppppppppppppp pppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppppppppppppp

    pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

    pppp

    1000 1200 1400 1600 1800 2000

    ppp

    pp

    ppppp

    ppppppp

    ppppp

    p

    ppppppppp

    ppppppp

    ppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppp pppppppppppppppppp pppppppppppppp pppppppppppppppppppppp pppppppppppppppppppppp pppppppppppppppppp ppppppppppppppppppp pppppppppppppppppppppp ppppppppppppppppppppppp ppppppppppppppppppppppppppppppp pppppppppppppppppppppp ppppppppp

    pppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppppppp pppppppppppppppppp pppppppppppppp

    pppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppp

    ppppp

    p

    p

    p1000 1200 1400 1600 1800 2000

    pppppp

    ppppppp

    ppppppppppppppppp

    pppppppppp

    pppppppppppppppppppp

    ppppppppppppppppppppp

    pppppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppppppp

    pppppppppppp pppppppppppppppppppppp ppppppppppppppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppp pppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppppppp pppppppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

    pppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

    pppp

    p

    p

    p

    p

    1000 1200 1400 1600 1800 2000

    ppppp

    pppppp

    pppp

    pppppppppppppppppppp

    ppppppppppppppp

    pppppppppppppppppppppp

    ppppppppppppppppp

    ppppppppppppppppppppppp

    pppppppppppppppppppppppppppppppp

    pppppppppppppppppppppppppppppppppppppppppppppppppppp

    ppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppp ppppppppppppppppppppppppp

    pppppppppppp pppppppppppppppppppppp pppppppppppppp pppppppppppppppppp pppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppp

    pppppppppppppppppppppppp pppppppppppppppppppppp pppppppppppppp pppppppppppppppppppppppppp

    ppppppppppppppppp

    pppppppppppppppppppppppppppppp

    p

    pp1000 1200 1400 1600 1800 2000

    ppppppppppppppppppppp

    ppppppppppppp

    pppppppppppppppppppp

    pppppppppppppppppppppppppp

    ppppppppppppppppppppppppp

    pppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppppp ppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppp ppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppp pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppp

    pppppppppppp pppppppppppppp pppppppppppppppppp pppppppppppp

    ppppppppppppppppppppppppppppp pppppppppppppppppppppppppppppp

    pp

    p

    p

    p

    1000 1200 1400 1600 1800 2000

    ppppppppp

    ppppppppp

    ppppppppppppppppp

    pppppppppppppppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppppppppppppppppppp ppp

    ppppppppppppppp pppppppppppppppppp ppppppppppppppppppppppp pppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppp ppppppppppp

    ppppppppppp ppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppp

    pppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

    pp

    p

    p

    1000 1200 1400 1600 1800 2000

    ppppppppppppp

    ppppppppp

    pppppppppppp

    ppppppppppppppp

    pppppppppppppppp

    ppppppppppppppppppppp

    ppppppppppppppppppppppppp

    ppppppppppppppppppppppppppp

    pppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppppp pppppppppppppp pppp

    pppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

    ppppppppppppppppppppp

    ppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

    pppppppppppppppppp ppppppppppppppppp

    pppp

    p1000 1200 1400 1600 1800 2000

    ppppp

    ppp

    pppppppp

    pppppppppp

    ppppppppppppppppp

    pppppp

    pppppppppppp

    ppppppppppppppppppppppppppppppppp

    ppppppppppppppppppppppppppppppppppppppppppppppp

    pppppppppppppppp ppppppppppppp ppppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppp pppppppppppppppppppppppppp pppppppppppppppppppppppppppp pppppppppppppppppppppp ppppppppppppppppppppppp ppppppppppppppppppppppppppp pppppppppppppppppppppppppp pppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

    1000 1200 1400 1600 1800 2000

    Figure 24: Comparison of spectra of figure 14

    31

  • 8/3/2019 Java Dsp Printer

    32/32