我正在使用Apples vDSP API來計算音頻的FFT。但是,我的結果(在amp[]
)在N/2左右不對稱,根據我對FFT的真實輸入的理解,它們應該是對稱的嗎?FFT與iOS vDSP不對稱
在下面frame
是包含音頻樣本float數組[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歲,他們完全不同。
好的,謝謝,其中大部分來自SO的其他帖子,我不太瞭解整個vDSP複雜的包裝。我會再次通過它... – Mark 2013-02-14 18:14:10