KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > FourierDisplay2


1 import java.awt.*;
2 import java.awt.event.*;
3 import JSci.awt.*;
4 import JSci.maths.*;
5 import JSci.tests.FourierTest;
6
7 /**
8 * Sample program demonstrating use of FourierMath and LineGraph classes.
9 * @author Mark Hale
10 * @version 1.0
11 */

12 public final class FourierDisplay2 extends Frame {
13         private final int N=128;
14         private List fns=new List(4);
15         private DefaultGraph2DModel signalModel=new DefaultGraph2DModel();
16         private DefaultGraph2DModel transformModel=new DefaultGraph2DModel();
17         private double signal[];
18
19         public static void main(String JavaDoc arg[]) {
20                 new FourierDisplay2();
21         }
22         private static void setDefaultSize(Component c, int defaultWidth, int defaultHeight) {
23                 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
24                 final int width = (defaultWidth < screenSize.width) ? defaultWidth : screenSize.width;
25                 final int height = (defaultHeight < screenSize.height) ? defaultHeight : screenSize.height;
26                 c.setSize(width, height);
27         }
28         public FourierDisplay2() {
29                 super("Fourier Display 2");
30                 addWindowListener(new WindowAdapter() {
31                         public void windowClosing(WindowEvent evt) {
32                                 dispose();
33                                 System.exit(0);
34                         }
35                 });
36                 float xAxis[]=new float[N];
37                 for(int i=0;i<N;i++)
38                         xAxis[i]=i-N/2;
39                 signalModel.setXAxis(xAxis);
40                 signalModel.addSeries(xAxis);
41                 transformModel.setXAxis(xAxis);
42                 transformModel.addSeries(xAxis);
43                 transformModel.addSeries(xAxis);
44                 fns.add("Gaussian");
45                 fns.add("Top hat");
46                 fns.add("Constant");
47                 fns.add("Square");
48                 fns.add("Triangle");
49                 fns.add("Sine");
50                 fns.select(5);
51                 fns.addItemListener(new ItemListener() {
52                         public void itemStateChanged(ItemEvent evt) {
53                                 switch(fns.getSelectedIndex()) {
54                                         case 0 : signal = FourierTest.gaussian(N, 1.0, 5.0);
55                                                 break;
56                                         case 1 : signal = FourierTest.topHat(N,1.0);
57                                                 break;
58                                         case 2 : signal = FourierTest.constant(N,1.0);
59                                                 break;
60                                         case 3 : signal = FourierTest.square(N,1.0);
61                                                 break;
62                                         case 4 : signal = FourierTest.triangle(N,1.0);
63                                                 break;
64                                         case 5 : signal = FourierTest.sine(N,1.0,16);
65                                                 break;
66                                 }
67                                 displaySignal();
68                                 displayTransform();
69                         }
70                 });
71                 LineGraph signalGraph=new LineGraph(signalModel);
72                 signalGraph.setColor(0,Color.red);
73                 LineGraph transformGraph=new LineGraph(transformModel);
74                 transformGraph.setColor(0,Color.red);
75                 Panel graphs=new Panel();
76                 graphs.setLayout(new GridLayout(1,2));
77                 graphs.add(signalGraph);
78                 graphs.add(transformGraph);
79                 add(graphs,"Center");
80                 add(fns,"South");
81                 signal = FourierTest.sine(N, 1.0, 16);
82                 displaySignal();
83                 displayTransform();
84                 setDefaultSize(this, 600, 400);
85                 setVisible(true);
86         }
87         private void displaySignal() {
88                 signalModel.changeSeries(0,signal);
89         }
90         private void displayTransform() {
91                 Complex result[]=FourierMath.sort(FourierMath.transform(FourierMath.sort(signal)));
92                 float realpart[]=new float[N];
93                 float imagpart[]=new float[N];
94                 for(int i=0;i<N;i++) {
95                         realpart[i]=(float)result[i].real();
96                         imagpart[i]=(float)result[i].imag();
97                 }
98                 transformModel.changeSeries(0,realpart);
99                 transformModel.changeSeries(1,imagpart);
100         }
101 }
102
Popular Tags