私はギターチューナーアプリケーションに取り組んでいます。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
バックグラウンドの環境ノイズを除去するためにローパス フィルターが追加され、指定された複数の周波数の平均を取得するためにリング バッファーが追加されました。