Apple の vDSP を使用して、録音されたオーディオ ファイルに FFT 計算を実装しようとしています (モノラル PCM と仮定します)。
ここで調査を行ったところ、次のトピックが非常に役立つことがわかりました。
- Apple FFT と加速フレームワークの使用
- フレーム間の位相変化を使用して FFT ビンから正確な周波数を抽出する
- 拡張オーディオ ファイル サービス (ExtAudioFileRead) を使用したオーディオの読み取り
たとえば、frame_size N = 1024 サンプル、log2n=10 で FFT を構成しました。
m_setupReal = vDSP_create_fftsetup(LOG_2N, FFT_RADIX2);
// allocate space for a hamming window
m_hammingWindow = (float *) malloc(sizeof(float) * N);
// generate the window values and store them in the hamming window buffer
vDSP_hamm_window(m_hammingWindow, N, vDSP_HANN_NORM);
コードのどこかに:
vDSP_vmul(dataFrame, 1, m_hammingWindow, 1, dataFrame, 1, N);
vDSP_ctoz((COMPLEX *)dataFrame, 2, &(m_splitComplex), 1, nOver2);
// Do real->complex forward FFT
vDSP_fft_zrip(m_setupReal, &(m_splitComplex), 1, LOG_2N, kFFTDirection_Forward);
私が今欠けているのは、FFT の使用法を理解する上で、大きなオーディオ ファイルの完全なスペクトルを取得する方法です。合計で 12800 サンプルと仮定しましょう。
Q: 生データをサイズ 1024 サンプル (~ 12800 / 1024 = 13 フレーム) のフレームに分割し、各フレームで個別に FFT を実行し、何らかの方法で平均 13 FFT の結果を結果のスペクトルにする必要がありますか? それが正しい仮定である場合、平均化を実行する方法は?
助けていただければ幸いです。