高速ピッチ認識


8

ミュージシャンが音楽を再生しているときにピッチ(信号周波数の測定)を検出し、チューニングがずれている場合は警告を出す必要がありますが、音楽がFFT(高速フーリエ変換)には少し速すぎる場合があります。

以下に、問題の技術的な説明を記載します。

ミュージシャンは90〜140 bpmで音楽を演奏します。つまり、毎分90〜140のノートグループがあり、各グループには最大8(より頻繁には最大4)のノートがあります(60/140/8 = 0.0536秒、60/90/4 = 0.167秒)。つまり、ノートは毎秒6〜19のレートで変化する可能性があります。

音楽は対数スケールを使用します(添付の画像を参照)。たとえば、440Hzから880Hzまでの範囲は12の音符に分割され、そのうちの7つだけがメロディーに使用されます。(基本的に、ピアノの白いキーのみを使用します。開始周波数をシフトする場合、黒いキーの一部を使用し、白いキーの一部は使用しません。)つまり、次の各ノートの周波数が乗算されます。 2 ^(1/12)= 1.05946。

物事をより複雑にするために、A(La)周波数は438から446 Hzまで変化します。弦楽器は理論的にはチューニングできますが、管楽器は気温と湿度に依存するため、周波数はサウンドチェック中にミュージシャンによって再ネゴシエーションされます。

ミュージシャンやボーカリストは周波数に誤りを犯すことがあり、それを「調律外」と呼んでいます。彼らは、そのような「調整外エラー」を通知するデバイスを望んでいます。彼らはチューナーを持っていますが、チューナーは何かを見せ始める前に約1秒間同じサウンドを再生する必要があります。これはチューニングには有効ですが、音楽の再生中は機能しません。

ほとんどの場合、チューナーはFFTを実行しており、式 df=1/T 1Hzの解像度を取得するために1秒間待機します。

A = 440Hzの場合、2つの音符間の周波数の差は440 * 0.05946 = 26.16 Hzです。その周波数分解能を得るには、0.038秒の取得時間を使用する必要があります。つまり、tempo = 196bpmでFFTは2つを区別できます。ノートは、98 bpmでピッチが変化するその瞬間に取得を開始する場合、50%の調整外エラーを通知できます。取得期間中にピッチの変更を許可すると、49 bpmになり、遅すぎます。さらに、周波数についてより正確であることが非常に望ましいです。たとえば、25%または12%の調整誤差を検出します。

FFTよりも優れた周波数(ピッチの検出)を測定する方法、つまり、より短い取得時間でより良い分解能で測定する方法はありますか?(少なくとも2倍、理想的には8〜16倍。)代わりに、異なるオクターブの音を区別する必要はありません。たとえば、440と880の両方がAとして認識される場合があります。FFTの線形性は必要ありません。出力、対数スケールの方が良いでしょう。(おそらく、より多くのトレードオフが可能ですが、今のところ、他に何も思い浮かびません。)

これは本当に良い絵です:

ウィキペディアからリンクされた頻度に注意してください


素敵な絵。音部記号(および音楽スタッフ)が右側を向くように、上下を逆にする必要があります。ただし、すべての周波数と周期、およびMIDI番号は上下逆になります。
robert bristow-johnson

これは、モノフォニック(つまり、一度に1つのノート)検出ではなく、ポリフォニックピッチ検出が必要なようです。あれは正しいですか?
Jazzmaniac 2015年

@Jazzmaniacポリフォニックは間違いなくプラスになります。つまり、モノフォニックは制限になります。FFTを使用できるとしたら、2Dの周波数-時間図にいくつかのピークを表示します。一方、私が正しく理解していれば、管楽器はモノフォニックで、バイオリンはそれに非常に近いです。
18446744073709551615 2015年

管楽器は間違いなくモノフォニック検出アルゴリズムで動作します。ただし、弦楽器(複数の弦を使用)は扱いが難しく、すべてではないにしてもほとんどのモノラル検出器は、完全にミュートされていない弦、開いている弦が共振している、またはマイクからのクロストークが原因で減衰音が存在する場合に、信頼できない、または使用できない結果を生成します。とはいえ、ポリフォニック検出は難しいです。ただし、正確な音符の検出は必ずしも必要ではなく、正確な同調検出が必要なため、適切なアルゴリズムを見つけることができます。ただし、モノラルピッチ検出器にはなりません。
Jazzmaniac 2015年

これは、RBJの回答への反対票を説明している可能性があります。いずれにせよ、彼の船にすぐにジャンプしないでください。あなたが望むものには他のオプションがあり、おそらくもっと良いものもあります。
Jazzmaniac 2015年

回答:


9

FFTよりも優れた周波数(検出ピッチ)を測定する方法、つまり、より短い取得時間でより良い分解能で測定する方法はありますか?

はいあります。またはです。FFTを実行するよりもはるかに優れた、リアルタイムで音程を検出する方法がいくつかあります。

考慮してください:

平均振幅差関数(AMDF)

Qバツ[k]=Σ|バツ[]バツ[k]|

平均二乗差分関数(ASDF)

Qバツ[k]=Σバツ[]バツ[k]2

自己相関関数(AF)

Rバツ[k]=Σバツ[]バツ[k]

合計に制限を設けて、ゆるく遊んでいることに注意してください。

また、波形の形状、ゼロクロッシング、その他のしきい値クロッシングについては想定されていないことに注意してください。唯一の仮定は、ラグがk およそ1つの周期(または2つの周期、または周期の長さのその他の整数倍)、 バツ[] にとても似ている バツ[k]。したがって、唯一の仮定は、ピッチが周期的またはほぼ周期的な(基本的には「準周期的」と呼ぶ)関数の基本周波数に関連しているということです。

私のお気に入りはASDFです(そして、それは私が皆にちょうど発表した薄いベールの企業秘密ですが、comp.dspの人々はすでにそれを知っていました)。これらはすべて時間領域であり、AMDFとASDFは非常によく似ており、ASDFは逆さまのバージョンのAFのように見えます。AMDFまたはASDFのヌル、または準周期的入力の潜在的な期間の長さに対応するAFのピークを探しています。

他にいくつかのトリックがあります:

  1. あなたは常に最新のものを関連付けることができます N 一部に対するサンプル N 遅延したサンプル k。このようにして、リアルタイムアプリケーションで可能な最新のデータを処理します。

  2. すべての整数遅延の相関を計算する必要はありません k。実際、対数頻度が好きなので、より大きな間隔はk 小さい場合の間隔よりも大きい場合があります k

  3. 潜在的なヌル(AM_F)またはピーク(AF)が見つかった場合、隣接する整数値の相関を計算できます。 k

  4. 隣接する整数値の間 k、補間を行って、ピーク位置を分数サンプルの精度で決定できます。方法は教えません。想像力を使って。

  5. 全体のトリック(そしてこれは企業秘密とIVL特許が適用される秘密のソースです)は、複数の候補がある場合に正しいピークまたはnull を選択することです。正しくないピークまたはnullを選択すると、「オクターブエラー」が発生します。その方法を説明するつもりはありません。想像力を使って。

私にメールを送ってください。キックアスピッチ検出器を設計する場合は、契約条件について話し合うことができます。私の意見では、たわごとのように機能するYINよりもはるかに優れています。


1
反対投票についてのコメントをいただければ幸いです。何か問題があれば知りたいです。この答えにはレシピはありませんが、少なくとも読むべきもののリストがあります(まあ、それは簡単に読むことはできませんが、何もないよりはましです)。この回答は削除しないでください。
18446744073709551615 2015年

1
誰が答えを削除しますか?私?
robert bristow-johnson 2015

3

私はすでにここであなたの質問に答えました:https//stackoverflow.com/questions/33667275/fast-frequency-measurement/33678202#33678202

ただし、要約すると、特定の状況では、FFT結果を補間してFFTビンの間隔よりも細かい解像度にすることができるため、より短いデータウィンドウを使用して時間精度を高めることができます。

ただし、FFT周波数はピッチ周波数ではありません。また、一部の楽器(わずかに不調和な倍音を生成するもの)では、どちらも自己相関関数(またはAMDFなどの関連関数)の周波数ではありません。それはピッチが心理音響現象だからです。


2つのメモ:ピッチ検出を「高速」にしたい場合は、周波数領域で行うことはお勧めしません(おそらく、複数のFFTで何らかのマルチレート処理を行っている場合を除きます)。理由は、すべてのサンプルを取得するまで、FFTを開始することさえできません。まともな長さのFFT(低ピッチで十分な解像度を取得するため)は、たとえば、0.1秒待っています。ピッチ(およびラウドネス)は、時々ピリオド(およびパワー)などの物理的特性とよく相関します。ベル、トムの場合、ピッチは得られますが、正しいことを意味しない場合があります
robert bristow-johnson

しかし、私はちょうど記録タムヒットに私の小さなMatlabのスクリプトを実行し、それが聞こえた返されたピッチが妥当なノート値になることを私に。
robert bristow-johnson 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.