ApplesvDSPAPIを使用してオーディオのFFTを計算しています。しかし、amp[]
実際の入力でのFFTの理解から、私の結果(in)は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の1つの巨大な値も取得します。ここではウィンドウ処理を行っていません。最初に基本的なFFTを機能させようとしているだけです。
同じデータを使用して、2つのFFT出力の写真を添付しました。一定のスケーリング係数ではありませんが、64までは類似していることがわかります。そのため、何が違うのかわかりません。それから64以上それらは完全に異なっています。