1

私は周波数検出用の IOS アプリを開発しています。非常に正確な YIN アルゴリズムを使用しています。魔女 Audacity、さまざまな周波数の矩形波を生成しました。アルゴリズムの精度は約 0.1% です。たとえば、82,4 Hz (E ストリング) のトーンを生成すると、実際には 82,4 Hz しか得られず、他には何も得られません。

とにかく、ギターの弦をかき鳴らすと、基音 (F0) よりも強い (振幅が大きい) 倍音を得ることがよくあります。その結果、私のディスプレイは「踊って」トグルし始めます - 時々、(トーンが消えると) アルゴリズムが倍音の周波数 (例えば、E ではなく A) で停止することさえ起こります - そのため、ユーザーは再び弦をかき鳴らさなければなりません。彼の希望のトーン (周波数) が存在するかどうかを確認します。

この現象が私のアルゴリズムとは何の関係もないことはわかっています。なぜなら、それは単なる「ハードウェア」の問題だからです (単純に倍音を生成するギターを意味します)。

(周波数検出の) 結果を平滑化するか、重要な周波数 (たとえば、E ストリング +/- 許容範囲の場合は 82.4 Hz) が検出されるとすぐに固定周波数に「スナップ」しようとしましたが、無駄でした。とにかく、私のアルゴリズムが誤った周波数にスナップすることもよくあります。

安価なギター チューナー (ギター店で 10 ドル) がどのように機能しているかを自問しています。周波数検出も信頼性が高く安定しているからです。

アルゴリズムを変更したくありませんが、考えられる解決策が 2 つあります。

  1. 信号の前処理 (おそらくハニング ウィンドウ、ローパスまたはバンドパス フィルタリング) および/または
  2. 信号の後処理 (ある種の周波数平滑化)。

「途切れ途切れ」の結果を克服する方法を誰かが考えていますか?

4

1 に答える 1