/* * ------------------------------------------------------------------------- * $Id: PlotFFT.java,v 1.2 2004/05/26 18:21:24 estewart Exp $ * ------------------------------------------------------------------------- * Copyright (c) 1999 Visual Numerics Inc. All Rights Reserved. * * This software is confidential information which is proprietary to * and a trade secret of Visual Numerics, Inc. Use, duplication or * disclosure is subject to the terms of an appropriate license * agreement. * * VISUAL NUMERICS MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE * SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING * BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. VISUAL * NUMERICS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE * AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR * ITS DERIVATIVES. *-------------------------------------------------------------------------- */ package com.imsl.demo.Harmonic; import com.imsl.chart.*; /** * Launches a new window showing the power spectrum * of a segment of a .wav file. * * @author R.B.E.Taylor * @created October 23, 2002 */ public class PlotFFT extends javax.swing.JDialog { private JPanelChart jPanelChart; private Chart chart; private AxisXY axis; private Data data; private javax.swing.JTextField displayField; private double[] power, f, t_lim; private String plotColor, plotLabel; public PlotFFT(java.awt.Frame parent) { super(parent, false); initComponents(); java.awt.Dimension parentSize = parent.getSize(); java.awt.Point parentLoc = parent.getLocationOnScreen(); parentLoc.x += parentSize.width/2.5; parentLoc.y += parentSize.height/2.5; setLocation(parentLoc.x, parentLoc.y); jPanelChart = new JPanelChart(); int h = (int)((parentSize.height/2)*1.25); int w = (int)(h/0.8); jPanelChart.setPreferredSize(new java.awt.Dimension(w,h)); getContentPane().add(jPanelChart); pack(); } void draw(double[] f, double[] power, double[] t_lim, String plotLabel, String plotColor) { chart = jPanelChart.getChart(); chart.getLegend().setPaint(true); chart.getLegend().setViewport(0.65, 0.85, 0.05, 0.15); axis = new AxisXY(chart); axis.getAxisX().getAxisLabel().setTextFormat(new java.text.DecimalFormat("###")); axis.getAxisX().getAxisTitle().setTitle("Frequency, Hz"); axis.getAxisY().getAxisLabel().setTextFormat(new java.text.DecimalFormat("###")); axis.getAxisY().getAxisTitle().setTitle("Relative amplitude"); java.awt.Container cp = getContentPane(); // Create the display panel javax.swing.JPanel displayPanel = new javax.swing.JPanel(); // Round off the time limits for displaying double t_initial = Math.floor(t_lim[0]*1000+0.5)/1000; double t_final = Math.floor(t_lim[1]*1000+0.5)/1000; String describe_sp = "Fourier power spectrum, " + " t = [" + t_initial + ", " + t_final + "]; " + f.length*2 + " sample points."; displayField = new javax.swing.JTextField(describe_sp); displayField.setBorder(null); displayField.setEditable(false); displayPanel.add(displayField); cp.add(displayPanel, java.awt.BorderLayout.SOUTH); axis.getAxisX().setAutoscaleInput(AxisXY.AUTOSCALE_OFF); axis.getAxisX().setWindow(0.0, 1024.0); data = new Data(axis, f, power); data.setTitle(plotLabel+" FFT"); data.setDataType(Data.DATA_TYPE_FILL); data.setLineColor(java.awt.Color.black); data.setFillColor(plotColor); } private void initComponents() { setTitle("Fast Fourier Transform"); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { closeDialog(evt); } }); pack(); } private void closeDialog(java.awt.event.WindowEvent evt) { setVisible(false); dispose(); } }