Java 为什么FFT代码不能从wav音频中提取频率?

Java 为什么FFT代码不能从wav音频中提取频率?,java,audio,fft,pitch-detection,Java,Audio,Fft,Pitch Detection,我对音频处理非常陌生,我正在尝试从wav文件中提取频率。正如研究论文所述,我将wav音频放入一个字节数组,进行分段,并尝试应用FFT从音频中获取频率。然而,问题是,即使当我进入一个只播放一个音符的音轨(没有噪音)时,我也会得到很多频率,这是我应该得到的 我猜FFT代码有问题,因为音频被正确分割 提前谢谢大家, 我的fft代码 public void getFFT(double[] x, int a) { double amp[] = new double[512]; do

我对音频处理非常陌生,我正在尝试从wav文件中提取频率。正如研究论文所述,我将wav音频放入一个字节数组,进行分段,并尝试应用FFT从音频中获取频率。然而,问题是,即使当我进入一个只播放一个音符的音轨(没有噪音)时,我也会得到很多频率,这是我应该得到的

我猜FFT代码有问题,因为音频被正确分割

提前谢谢大家,

我的fft代码

  public void getFFT(double[] x, int a) {

    double amp[] = new double[512];

    double firstSum;
    double secSum;
    double twoPInjk;
    double[][] s = new double[512][2];
    for (int j = 0; j < 512; j++) {
        firstSum = 0;
        secSum = 0;
        FreqArr[j] = (j * sampleRate) / (512);
        for (int k = 0; k < 512; k++) {
            twoPInjk = ((2 * Math.PI) / 512) * (j * k);
            firstSum += x[k] * Math.cos(twoPInjk);
            secSum += x[k] * Math.sin(twoPInjk);
        }
        amp[j] = Math.abs(Math.sqrt(Math.pow(firstSum, 2) + Math.pow(secSum, 2)));
    }
    highest(amp, a);
}

public void highest(double[] amp, int a) {
    String note;
    double all = 0;
    double max_magnitude = -1;
    int max_index = -1;

    for (int i = 0; i < (512); i++) {

        all = all + amp[i];

        if (amp[i] > max_magnitude) {
            max_magnitude = amp[i];
            max_index = i;
        }
    }
    double freq = 0;
    int cnt = 0;

    freq = max_index * (sampleRate / 2) / (512);
    System.out.println("Maximum_index: " + max_index);
    System.out.println("Sample rate: " + sampleRate);

      System.out.println(freq + " is the frequnecy");
}
public void getFFT(double[]x,int a){
双放大器[]=新双放大器[512];
双首和;
双secSum;
双双品克;
double[]s=新的double[512][2];
对于(int j=0;j<512;j++){
初和=0;
secSum=0;
FreqArr[j]=(j*取样器)/(512);
对于(int k=0;k<512;k++){
twoPInjk=((2*Math.PI)/512)*(j*k);
firstSum+=x[k]*Math.cos(twoPInjk);
secSum+=x[k]*Math.sin(twoPInjk);
}
amp[j]=Math.abs(Math.sqrt(Math.pow(firstSum,2)+Math.pow(secSum,2));
}
最高(安培,a);
}
公共空间最高(双[]安培,整数a){
弦乐;
全部加倍=0;
双倍最大值=1;
int max_指数=-1;
对于(int i=0;i<(512);i++){
全部=全部+amp[i];
如果(amp[i]>最大值){
最大振幅=amp[i];
最大指数=i;
}
}
双频=0;
int-cnt=0;
freq=最大指数*(采样器/2)/(512);
System.out.println(“最大索引:“+max\u索引”);
System.out.println(“采样率:+采样器”);
System.out.println(freq+“是频率”);
}
我的结果(仅播放一个音符的1秒音频)

抽样率44100 我的数据大小为70376 我的MyBits示例16 我的频道2 我的myByteRate 176400 我的长度0.7983219954648526 0.7983219954648526 44100 最高指数:56 抽样率:44100.0 2411.71875是频率 最大索引:256 抽样率:44100.0 11025.0是频率 最大索引:256 抽样率:44100.0 11025.0是频率 最高指数:129 抽样率:44100.0 5555.56640625是频率 最高指数:511 抽样率:44100.0 22006.93359375是频率 最大索引:256 抽样率:44100.0 11025.0是频率 最高指数:152 抽样率:44100.0 6546.09375是频率 最高指数:422 抽样率:44100.0 18174.0234375是频率 最高指数:26 抽样率:44100.0 1119.7265625是频率 最高指数:462 抽样率:44100.0 19896.6796875是频率 最高指数:450 抽样率:44100.0 19379.8828125是频率 最高指数:201 抽样率:44100.0 8656.34765625是频率 最高指数:383 抽样率:44100.0 16494.43359375是频率 最高指数:6 抽样率:44100.0 258.3984375是频率 最高指数:385 抽样率:44100.0 16580.56640625是频率 最高指数:100 抽样率:44100.0 4306.640625是频率 最高指数:15 抽样率:44100.0 645.99609375是频率 最高指数:421 抽样率:44100.0 18130.95703125是频率 最大索引:256 抽样率:44100.0 11025.0是频率 最大索引:0 抽样率:44100.0 0.0是频率 最高指数:483 抽样率:44100.0 20801.07421875是频率 最大索引:0 抽样率:44100.0 0.0是频率 最高指数:134 抽样率:44100.0 5770.8984375是频率 最高指数:123 抽样率:44100.0 5297.16796875是频率 最高指数:2 抽样率:44100.0 86.1328125是频率 最高指数:378 抽样率:44100.0 16279.1015625是频率 最高指数:491 抽样率:44100.0 21145.60546875是频率 最高指数:125 抽样率:44100.0 5383.30078125是频率 最高指数:242 抽样率:44100.0 10422.0703125是频率 最高指数:267 抽样率:44100.0 11498.73046875是频率 最高指数:257 抽样率:44100.0 11068.06640625是频率 最高指数:128 抽样率:44100.0 5512.5是频率 最高指数:496 抽样率:44100.0 21360.9375是频率 最高指数:350 抽样率:44100.0 15073.2421875是频率 最高指数:75 抽样率:44100.0 3229.98046875是频率 最高指数:127 抽样率:44100.0 5469.43359375是频率 最高指数:473 抽样率:44100.0 20370.41015625是频率 最高指数:35 抽样率:44100.0 1507.32421875是频率 最高指数:420 抽样率:44100.0 18087.890625是频率 最高指数:413 抽样率:44100.0 17786.42578125是频率 最高指数:136 抽样率:44100.0 5857.03125是频率 最高指数:93 抽样率:44100.0 4005.17578125是频率 最高指数:251 抽样率:44100.0 10809.66796875是频率 最高指数:431 抽样率:44100.0 18561.62109375是频率 最高指数:490 抽样率:44100.0 21102.5390625是频率 最高指数:221 抽样率:44100.0 9517.67578125是频率 最高指数:364 抽样率:44100.0 15676.171875是频率 最高指数:19 抽样率:44100.0 818.26171875是频率 最高指数:487 抽样率:44100.0 20973.33984375是频率 最高指数:350 抽样率:44100.0 15073.2421875是频率 最高指数:243 抽样率:44100.0 10465.13671875是频率 最高指数:384 抽样率:44100.0 16537.5是频率 最高指数:403 抽样率:44100.0 17355.76171875是频率 最高指数:56 抽样率:44100.0 2411.71875是频率 最高指数:151 抽样率:44100.0 6503.02734375是频率