📄 firdigitalfilterdemo.java
字号:
import java.awt.*;
import java.applet.Applet;
// JDK 1.02 version
public class FIRDigitalFilterDemo extends Applet {
float[] ipSignal, opSignal;
static float ampl = 1.0f; // default amplitude = 1.0 V
static float rate = 8000.0f; // default sampling rate = 8000 samples/s
int nSamples;
float maxValue;
GraphPlot plotInput, plotOutput;
Choice chWaveform, chSamples;
TextField tfFreq, tfDCLevel, tfNoise;
Checkbox cbAddDCLevel, cbAddNoise;
Button btnSignal, btnLPFilter, btnBPFilter, btnHPFilter;
FIRFilterImplementation fir = new FIRFilterImplementation();
public void init() {
setSize(500, 500);
setLayout(new GridLayout(3,1));
plotOutput = new GraphPlot();
add(plotOutput); // Output signal plot
// Input signal plot
plotInput = new GraphPlot();
add(plotInput);
plotInput.setVisible(true);
// Control panel
Panel pnlControls = new Panel();
add(pnlControls);
pnlControls.setLayout(new GridLayout(3, 2));
// Waveform selection
Panel pnlWaveform = new Panel();
pnlWaveform.setLayout(new FlowLayout(FlowLayout.LEFT));
Label lblWaveform = new Label("Waveform");
chWaveform = new Choice();
chWaveform.addItem("Square");
chWaveform.select("Square"); // default waveform
pnlWaveform.add(lblWaveform);
pnlWaveform.add(chWaveform);
pnlControls.add(pnlWaveform);
// Added DC level setting
Panel pnlAddDCLevel = new Panel();
pnlAddDCLevel.setLayout(new FlowLayout(FlowLayout.LEFT));
cbAddDCLevel = new Checkbox("Add DC level");
tfDCLevel = new TextField("0", 5);
Label lblDCLevelUnit = new Label("V");
pnlAddDCLevel.add(cbAddDCLevel);
pnlAddDCLevel.add(tfDCLevel);
pnlAddDCLevel.add(lblDCLevelUnit);
pnlControls.add(pnlAddDCLevel);
// Signal frequency setting
Panel pnlFrequency = new Panel();
pnlFrequency.setLayout(new FlowLayout(FlowLayout.LEFT));
Label lblFreq = new Label("Frequency");
tfFreq = new TextField("100", 8);
Label lblFreqUnit = new Label("Hz");
pnlFrequency.add(lblFreq);
pnlFrequency.add(tfFreq);
pnlFrequency.add(lblFreqUnit);
pnlControls.add(pnlFrequency);
// Added random noise setting
Panel pnlAddNoise = new Panel();
pnlAddNoise.setLayout(new FlowLayout(FlowLayout.LEFT));
cbAddNoise = new Checkbox("Add random noise");
tfNoise = new TextField("0", 5);
Label lblNoiseUnit = new Label("V");
pnlAddNoise.add(cbAddNoise);
pnlAddNoise.add(tfNoise);
pnlAddNoise.add(lblNoiseUnit);
pnlControls.add(pnlAddNoise);
// Number of samples
Panel pnlSamples = new Panel();
pnlSamples.setLayout(new FlowLayout(FlowLayout.LEFT));
Label lblSamples = new Label("Number of samples");
chSamples = new Choice();
chSamples.addItem("512");
chSamples.select("512");
pnlSamples.add(lblSamples);
pnlSamples.add(chSamples);
pnlControls.add(pnlSamples);
Panel pnlButtons = new Panel();
btnSignal = new Button("Digitised signal");
btnHPFilter = new Button("Ecg Signal");
btnHPFilter.enable();
pnlButtons.setLayout(new FlowLayout(FlowLayout.LEFT));
pnlButtons.add(btnSignal);
pnlButtons.add(btnHPFilter);
pnlControls.add(pnlButtons);
}
public boolean action(Event evt, Object obj) {
if (evt.target == btnSignal) {
nSamples = Integer.parseInt(chSamples.getSelectedItem());
ipSignal = new float[nSamples];
SignalGenerator sg = new SignalGenerator();
sg.setWaveform(chWaveform.getSelectedItem());
sg.setAmplitude(ampl);
sg.setSamplingRate(rate);
sg.setFrequency(Float.valueOf(tfFreq.getText()).floatValue());
sg.setSamples(nSamples);
boolean addDC = cbAddDCLevel.getState();
sg.setDCLevelState(addDC);
if (addDC) sg.setDCLevel(Float.valueOf(tfDCLevel.getText()).floatValue());
boolean addNoise = cbAddNoise.getState();
sg.setNoiseState(addNoise);
if (addNoise) sg.setNoise(Float.valueOf(tfNoise.getText()).floatValue());
ipSignal = sg.generate();
btnSignal.enable();
maxValue = 0.0f;
for (int i = 0; i < nSamples; i++)
maxValue = Math.max(maxValue, Math.abs(ipSignal[i]));
maxValue *= 1.5f; // allow 50% overrange on vertical axis
plotInput.setYmax(maxValue);
plotInput.setPlotValues(ipSignal);
repaint();
return true;
}
else
if (evt.target == btnHPFilter) {
fir.setFilterType(FIRFilterImplementation.HP);
opSignal = new float[nSamples];
opSignal = fir.filter(ipSignal);
plotOutput.setYmax(maxValue);
plotOutput.setPlotValues(opSignal);
repaint();
return true;
}
else
return false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -