1 import java.awt.*; 2 import java.awt.event.*; 3 import JSci.awt.*; 4 import JSci.maths.*; 5 import JSci.tests.FourierTest; 6 7 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 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 |