原信号:s(t) = 0.6 [ sin( 2π 50t ) + sin( 2π 500t ) ]
现将该信号经DFT计算,并通过gnuplot作出图谱
1.DFT源代码
public class Demo106 {
public static void main(String[] args) {
final double PI=3.14;
final double N=8000;
double [] dft_out_re = new double [8000];
double [] dft_out_im = new double [8000];
double [] dft_one_re = new double [8000];
double [] dft_one_im = new double [8000];
double [] amp = new double [8000];
int n,k;
double s;
for(k=0;k<N;k++) {
for(n=0;n<N;n++) {
s=0.6*Math.sin(n*PI*100)+0.6*Math.sin(n*PI*1000);
dft_one_re[n]=s*Math.cos(2*PI/N*n*k);
dft_one_im[n]=s*Math.sin(2*PI/N*n*k);
dft_out_re[k]+=dft_one_re[n];
dft_out_im[k]+=dft_one_im[n];
}
amp [k]= Math.sqrt(dft_out_re[k]*dft_out_re[k]+dft_out_im[k]*dft_out_im[k]);
System.out.print(k+" ");
System.out.println(amp [k]);
}
}
}
2.gnuplot作图