Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-利用FFT变换频率_Java_Fft - Fatal编程技术网

Java-利用FFT变换频率

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

在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 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和滤波的基础知识: