0

私はギターチューナーアプリケーションに取り組んでいます。FFT がこの種のアプリケーションには適していないことは理解しています。しかし、締め切りが近づくにつれて、私の当初の仕様提出ではこのアルゴリズムの使用が指定されました。残念ながら、私はそれで立ち往生しています。

以前の質問への回答とこのブログの使用に感謝します: http://blog.bjornroche.com/2012/07/frequency-detection-using-fft-aka-pitch.html

オーディオを取り込み、周波数と両方のグラフを計算し、結果を 5 オクターブの既知の音域と比較するアプリケーションがあります。

最終的な問題は、計算された周波数が、読み取った周波数とは依然として異なることです。オンラインで提供されている周波数発生器を使用しましたが、指定された音符の上または下の音符の周波数を取得できることがわかりました。

たとえば、C を読み込むと、異なるオクターブで B シャープまたは C シャープになります。ノイズ源からの電話の距離も測定値に影響します。

これが発生して修正される既知の例はありますか? それとも FFT アルゴリズムが原因で、アプリケーションが正しく動作しないのでしょうか?

私のコードは以前の場所にあります: Displaying a double (frequency) that is always updated with recording with Android

バックグラウンドの環境ノイズを除去するためにローパス フィルターが追加され、指定された複数の周波数の平均を取得するためにリング バッファーが追加されました。

4

1 に答える 1

1

周波数が少しずれている場合は、FFT の結果に対して、より長い FFT を使用するか、ピーク推定アルゴリズム (放物線または他の補間カーネルなど) を使用する必要があることを意味している可能性があります。

FFT 周波数の結果が 1 オクターブジャンプする場合は、ケプストラム/ケプストラム推定器、自己相関/ラグ推定器、または高調波積スペクトルなどのピッチ推定アルゴリズムを使用して、許容周波数推定範囲またはローパス フィルター帯域幅を狭める必要があることを意味する場合があります。他

また、間違ったサンプル レートや間違ったデータ形式の使用などのバグにも注意してください。

于 2013-05-27T18:32:01.140 に答える