Java-利用FFT变换频率
在java中搜索FFT代码后,我遇到了三个类来完成这项工作,读取wav文件,Java-利用FFT变换频率,java,fft,Java,Fft,在java中搜索FFT代码后,我遇到了三个类来完成这项工作,读取wav文件, 处理wav文件并写出新的wav文件。我对代码的唯一问题是如何更改 频率。代码中的一行为//change frequency留下了一个空白,请将HW5的代码放在这里 但我不知道该怎么做 代码如下: public class fft_wav { public fft_wav(String file_in, String file_out) { double amin, amax, aavg; int m; // next
处理wav文件并写出新的wav文件。我对代码的唯一问题是如何更改 频率。代码中的一行为//change frequency留下了一个空白,请将HW5的代码放在这里 但我不知道该怎么做 代码如下:
public class fft_wav
{
public fft_wav(String file_in, String file_out)
{
double amin, amax, aavg;
int m; // next power of 2
read_wav R = new read_wav(file_in, file_out, false);
// wav_read(file_in); done by constructor
int n = R.outix; // number of sound samples
for(m=64; m<2500000; m*=2) if(m>2*n) break;
System.out.println("power of 2 m=" + m);
System.out.println("have "+n+" points for FFT");
double A[] = new double[m];
double B[] = new double[m];
double B2[] = new double[m];
for(int i=0; i<2*n; i+=2) A[i] = (double)R.A[i/2]; // real
for(int i=1; i<2*n; i+=2) A[i] = 0.0; // imag
amin = A[0];
amax = A[0];
aavg = 0.0;
for(int i=0; i<2*n; i+=2)
{
amin = Math.min(amin, A[i]);
amax = Math.max(amax, A[i]);
aavg += A[i];
}
aavg = aavg/(double)n;
System.out.println("input min="+amin+", max="+amax+", avg="+aavg);
for(int i=2*n; i<m; i++) A[i] = 0.0; // zero to power of 2
B = Cxfft.fft(A,1.0);
// change frequency, put code here for HW5
A = Cxfft.fft(B,-1.0);
amin = A[0];
amax = A[0];
aavg = 0.0;
for(int i=0; i<2*n; i+=2)
{
amin = Math.min(amin, A[i]);
amax = Math.max(amax, A[i]);
aavg += A[i];
}
aavg = aavg/(double)n;
System.out.println("output min="+amin+", max="+amax+", avg="+aavg);
for(int i=0; i<2*n; i+=2) R.A[i/2] = (int)(0.99*A[i]);
for(int i=0; i<n; i++)
{
if(R.A[i]>127) R.A[i]= 127;
if(R.A[i]<-127) R.A[i]=-127;
}
R.wav_write(file_out);
}
public static void main (String[] args)
{
String file_in = "notify.wav";
if(args.length>0)
{
file_in = args[0];
}
String file_out = "junk.wav";
if(args.length>1)
{
file_out = args[1];
}
new fft_wav(file_in, file_out);
} // end main
} // end class fft_wav of fft_wav.java
你读过你要使用的图书馆的文档吗?这个图书馆来自我在网上找到的一些家庭作业。但它确实起到了作用,我只需要一些关于如何操作频率的指针?代码中唯一的问题是如何更改频率。改变什么频率?波形具有多个频率的内容。例如,输出一个wav文件,将低频或高频部分切掉。您可以也可能应该在此处阅读DSP和滤波的基础知识: