DFTまたはFFTなしで周波数を見つけるためのアルゴリズムはありますか?


34

Androidアプリストアでギターチューナーを探していました。他のアプリよりも高速だと主張するチューナーアプリを見つけました。DFTを使用せずに周波数を見つけることができると主張しました(この仕様へのURLがあればいいのに)。

私はこれを聞いたことがありません。DFTまたはFFTアルゴリズムを使用せずに、オーディオ信号を取得して周波数を計算できますか?

回答:


29

FFTは、実際にはチューナーを作成するための優れた方法ではありません。FFTは本質的に有限の周波数分解能を備えており、時間ウィンドウを極端に長くせずに非常に小さな周波数変化を検出することは容易ではなく、扱いにくく、遅くなります。

より良いソリューションは、位相ロックループ遅延ロックループ、自動相関、ゼロクロッシングの検出と追跡、最大または最小の検出と追跡、そしてこれらの方法の確かなインテリジェントな組み合わせに基づいています。

前処理は常に役立ちます。


5
FFTが小さな周波数変化を検出できるかどうかは、その長さに固有ではありませんが、信号対雑音比に依存します。ノイズと干渉が十分に低い場合、FFT結果の補間により、サブビンの単一周波数分解能を簡単に生成できます。
hotpaw2

- :これで缶誰の助け私をstackoverflow.com/questions/42359344/...
dreamBegin

12

FFTは、スペクトルの周波数ピーク(FFTビンサイズで量子化)を報告しますが、これは音楽のピッチとは異なります。知覚されるピッチ周波数がFFTスペクトルから完全に欠落している可能性があります。

最も単純なギターチューナーの中には、ローパスフィルターまたはバンドパスフィルターを使用して、ゼロ交差間の時間を測定したものがあります。逆数は周波数推定値を提供します。

自己相関は、もう1つの一般的なピッチ推定方法です。また、スライディング相関または他の自己相似性測定には、スライディングASDF(二乗差)、AMDF(平均差)、非線形パターンマッチャー、限られた範囲のラグのみの適応チェック、ラグ補間、ウィンドウイング、適応ウィンドウ選択、さまざまな重み付け、または複数の潜在的なラグ履歴シーケンスから選択するための決定理論の使用など。ほとんどの自己相似性尺度の1つの問題は、サブオクターブがほぼ同じ類似性を示すため、適切なオクターブを選択することです。

他の可能性としては、PLL、フィルターされた直交復調器、フィルターされたヒルベルト変換などがあります。

ただし、一部のDSPフィルタリングおよび復調方法は、ウィンドウDFTの1ビンを実行するのと計算上ほぼ同等であることに注意してください。


8

ピッチ検出は、多くの多目的で奇妙な方法で実行できます。それを行う1つの方法は、自己相関を使用することです。このホワイトペーパーでは、その使用方法の例を示します。1ビット相関器を使用すると、自己相関をとてつもなく簡単にすることができます(何らかの理由で適切な論文を見つけることができませんでした)。そのため、理論的には、ピッチ FFTよりも速く検出できますが、本当に巧妙な前処理をしなくてもはるかに正確になるとは思いませ


私はリンクが壊れていると思う...?
スペイシー

いいえ、すべて動作します。確認しました。
フォノン

7

また、比較的新しいアルゴリズムで定義されたヒルベルト-ファン変換(HHT)を見てください。アプリケーションに関連する可能性のある非定常非線形信号を処理できます。


私が見つけたとき、これは非常に宝石でしたが、フーリエ分解ではなく、瞬間的な周波数分解を提供します。
スペイシー

ほとんどの実際の信号はやや非定常です。つまり、振幅と周波数がわずかに異なります。HHTはこれらの変動に対する感度が低いため、そのような信号をより自然な方法で分解します。この場合、部品は基礎となる物理現象により密接に関連しています。
ノードロー



2

実際には、自己相関行列の固有ベクトルを調べる擬似スペクトルを使用して、信号の周波数を計算できます。基本的に、信号をノイズと信号部分空間に分解します。そこから、そのスペクトルを見つけることができます。(制限して、チェックする周波数範囲を指定することもできます)。また、かなりのノイズ耐性があります。もちろん、これはパラメトリック方式であり、DFTのようなアンパラメトリック方式ではありません。


どうやらこれはFFTを使用していますか?mathworks.com/help/toolbox/signal/ref/peig.html
endolith

1
@endolith FFTを使用せずに計算できます。相関行列から、固有ベクトルを取得してから、ノイズ部分空間を取得します。次に、FFTを使用しないように、投影する独自の周波数ベクトルを構築できます。
スペイシー

1

それはすべてあなたがそれを処理したいプラットフォームに依存します、単純な回路が必要な場合、私はゲインで信号を吹き飛ばし、それを方形波に変え、タイマーを使用してマイクロコントローラーで周期を測定することをお勧めします。

ただし、信号処理に興味がある場合は、MUSICメソッドを確認してください。

http://en.wikipedia.org/wiki/Multiple_signal_classification

それが役に立てば幸い


0

DFT / FFTを使用しないピッチ推定方法は多数存在しますが、MUSIC方法を含むそれらの一部をこのホワイトペーパーに記載しています:https : //ieeexplore.ieee.org/abstract/document/6521410/ このホワイトペーパー のシミュレーション結果は、基本周波数が非常に低い場合、正確なNLSメソッドは、リストされている他のメソッドよりも優れていることに注意してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.