私はこのタスクのロジックを考え出そうとしており、KissFFTソースパッケージを使用して高速フーリエ変換を実行することを計画しています。これが正しいと思われる場合はお知らせください:
- FFT構造を割り当てます。私が使用しているウィンドウサイズは
kiss_fft_alloc(N,0,NULL,NULL)
どこですかN
。入力バッファはN
、タイプの要素の配列になりますkiss_fft_scalar
。出力バッファはN/2 + 1
、タイプの要素の配列になりますkiss_fft_cpx
。 N
PCMサンプルの数(ウィンドウサイズ)をデコードします。- 各PCMサンプルについて、各チャネルの振幅(符号なしサンプル)を平均し、0から2にスケーリング(65536.0で除算)して、結果を入力バッファーに格納します。
- 入力バッファでウィンドウ処理(つまり、ハニング)を実行します。
- 入力バッファーで高速フーリエ変換を実行し、出力バッファーに格納します。実際の値を入力として使用しているため、を使用できます
kiss_fftr()
。 N/2
出力値については、変換されたデータの2乗された大きさを取得し、次の式を使用して値をdBスケールに変換します。10 * log10 (re * re + im * im)
N/2
手順6 の値をプロットします。- 入力バッファの前半を破棄し、次の(ウィンドウサイズ/ 2)PCMサンプルをデコードして、データのスケーリングとウィンドウ処理を実行します。これにより、入力ウィンドウが効果的にスライドし、処理されたPCMサンプルの計算をやり直す必要がなくなります。
- ステップ5にループし、すべてのサンプルが処理されるまでこれらのステップを繰り返します。
- 使用済みメモリをから解放し
kiss_fft_alloc()
ます。
FFTを実行する前に、入力ウィンドウから値を減算して、結果のDC値の大きさがゼロになるようにすることが提案されました。入力データから平均または平均を差し引くべきですか?
また、ウィンドウサイズを選択するときに考慮する必要があることは何ですか?それ以外に、KissFFTの指示に従って偶数にする必要がありますが、小さなウィンドウサイズを使用することには利点があります。それはより良いグラフを提供しますか?ウィンドウサイズを大きくすると、実行する必要があるFFTの数が減ると思いますが、ウィンドウサイズを大きくすることの唯一の利点は何ですか。
提供できるあらゆるガイダンスを事前に感謝します。