Java 为什么FFT代码不能从wav音频中提取频率?
我对音频处理非常陌生,我正在尝试从wav文件中提取频率。正如研究论文所述,我将wav音频放入一个字节数组,进行分段,并尝试应用FFT从音频中获取频率。然而,问题是,即使当我进入一个只播放一个音符的音轨(没有噪音)时,我也会得到很多频率,这是我应该得到的 我猜FFT代码有问题,因为音频被正确分割 提前谢谢大家, 我的fft代码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
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是频率