@奥利弗沃特金斯。这是代码:第一种方法是从文件中获取数据,而第二种方法是从实时获取。最后一个是关于经过一些处理的情节。将 ee[] 和 y[] 视为数据数组。
private byte[] FileR(String filename) {
byte[] data = null;
AudioInputStream ais ;
try {
File fileIn = new File(filename);
if (fileIn.exists()) {
ais = AudioSystem.getAudioInputStream(fileIn);
data = new byte[ais.available()];
ais.read(data);
}
}catch (UnsupportedAudioFileException | IOException e) {
System.out.println(e.getMessage());
throw new RuntimeException("Could not read " + filename);
}
return data;
}
private byte[] Capture(double t) throws LineUnavailableException {
AudioFormat format = new AudioFormat(48000,16,2,true,false);
DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
line = (TargetDataLine) AudioSystem.getLine(info);
line.open(format);
line.open();
int size=(int) (line.getBufferSize()*t);
byte[] b = new byte[size];
line.start();
line.read(b, 0, size);
return b;
} private void plot(double[] ee, double[] y) {
XYSeries see = new XYSeries("Filtered");
for(int i=0;i<ee.length;i++){
see.add(i,ee[i]);
}
XYSeriesCollection cee=new XYSeriesCollection();
cee.addSeries(see);
XYItemRenderer ree= new StandardXYItemRenderer();
NumberAxis rangeAxisee = new NumberAxis("Filtered");
XYPlot subplot1 = new XYPlot(cee, null, rangeAxisee, ree);
subplot1.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT);
XYSeries sy = new XYSeries("Noisy");
for(int i=0;i<y.length;i++){
sy.add(i,y[i]);
}
XYSeriesCollection cy=new XYSeriesCollection();
cy.addSeries(sy);
XYItemRenderer ry= new StandardXYItemRenderer();
NumberAxis rangeAxisy = new NumberAxis("Noisy");
XYPlot subplot2 = new XYPlot(cy, null, rangeAxisy, ry);
subplot2.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT);
CombinedDomainXYPlot plot = new CombinedDomainXYPlot(new NumberAxis("Domain"));
plot.setGap(10.0);
plot.add(subplot1);
plot.add(subplot2);
plot.setOrientation(PlotOrientation.VERTICAL);
JFreeChart chart = new JFreeChart("Adaptive Filter",
JFreeChart.DEFAULT_TITLE_FONT, plot, true);
panel = new ChartPanel(chart, true, true, true, false, true);
JFrame frame= new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(750,500);
frame.add(panel,BorderLayout.CENTER);
frame.setVisible(true);
}