我正在使用 Apples vDSP API 来计算音频的 FFT。但是,根据我对实际输入上的 FFT 的理解,我的结果(在 中amp[]
)在 N/2 周围不是对称的,它们应该是对称的?
下面frame
是一个包含音频样本的浮点数组[128]。
int numSamples = 128;
vDSP_Length log2n = log2f(numSamples);
FFTSetup fftSetup = vDSP_create_fftsetup(log2n, FFT_RADIX2);
int nOver2 = numSamples/2;
COMPLEX_SPLIT A;
A.realp = (float *) malloc(nOver2*sizeof(float));
A.imagp = (float *) malloc(nOver2*sizeof(float));
vDSP_ctoz((COMPLEX*)frame, 2, &A, 1, nOver2);
//Perform FFT using fftSetup and A
//Results are returned in A
vDSP_fft_zrip(fftSetup, &A, 1, log2n, FFT_FORWARD);
//Convert COMPLEX_SPLIT A result to float array to be returned
float amp[numSamples];
amp[0] = A.realp[0]/(numSamples*2);
for(int i=1;i<numSamples;i++) {
amp[i]=A.realp[i]*A.realp[i]+A.imagp[i]*A.imagp[i];
printf("%f ",amp[i]);
}
如果我将相同的浮点数组放入在线 FFT 计算器中,我会得到一个对称的输出。我在上面做错了吗?
出于某种原因,大多数值amp[]
都在 0 到 1e-5 左右,但我也得到了一个大约 1e23 的巨大值。我在这里没有做任何窗口,只是试图让一个基本的 FFT 最初工作。
我使用相同的数据附上了两个 FFT 输出的图片。您可以看到它们与 64 相似,尽管不是恒定的比例因子,所以我不确定它们有什么不同。然后超过64,它们完全不同。