0

いいえを読んだ後。ここの投稿自体の FFT アルゴリズムを録音したオーディオ (.wav) ファイルに適用して、時間領域から周波数領域に変換しました。

その結果、いくつかの値を含む配列を取得しました

magnitude[i] = sqrt(re*re+im*im);

タイトルにあるように、このマグニチュード配列を使用して信号の周波数と振幅(複雑な音、つまり音声)を見つける必要がありますが、この配列を使用してさらに処理を行う方法がわかりません.FFTのサイズは1024で、サンプルレートは48000Hzです。さらなる処理のために私を助けてください。

4

1 に答える 1

1

単一の最大 (正弦波) コンポーネントを探しているだけの場合は、最大値が見つかるまでマグニチュード配列をスキャンしてから、この値のインデックスを対応する周波数に変換します。

mag_max = magnitude[0];
i_max = 0;
for (i = 1; i < N; ++i)
{
    if (magnitude[i] > mag_max)
    {
        mag_max = magnitude[i];
        i_max = i;
    }
}

にピークの値mag_maxと にそのインデックスが表示されi_maxます。次のように周波数を取得できます。

f_max = i_max * Fs / N;

ここFsで はサンプルレートです (Nもちろん は FFT サイズです)。

もちろん、複雑な音 (声や楽器など)のピッチのようなものを探している場合は、さらに複雑になります。Harmonic Product Spectrum アルゴリズムとピッチ検出アルゴリズム全般を確認することをお勧めします。

于 2013-05-21T08:38:39.530 に答える