リアルタイムの人間のピッチ検出


11

私は生のマイク入力を分析し、プレーヤーに彼の歌がどれだけ上手かを伝える歌のゲームを実装しようとしています。それはリアルタイムで行う必要があります。

私は同じ質問をする多くのスレッドに出くわしましたが、おそらくフィールドでの経験の不足と浅い数学の背景が原因で、私はまだそれで完全に終わっていません。DSPDimension Webサイトのピッチシフトの記事に基づくアルゴリズムを実装しました:http ://www.dspdimension.com/admin/pitch-shifting-using-the-ft/

記事で説明しているように、真の周波数と振幅を抽出しますが、これで基本周波数を見つけることはできません。私は最大の大きさでビンを取得しようとしましたが、それはより高いピッチの信号に対して正しい結果を与えるだけであり、どのオーバーサンプリング係数を使用しても問題はありません。このアプローチは完全に間違っていますか、それとも私は正しい軌道に乗っていますが、何か不足していますか?

前もって感謝します、

編集:私はピッチクラスにのみ興味があることを言及するのを忘れていたので、ファンダメンタルズが欠けていても大丈夫ですが、サンプルには強い倍音があります。

EDIT2:みんなのおかげで、魅力的なアルゴリズムのバージョンが完成しました。低ピッチ推定の問題は、入力テストによるものでした。私が音符を歌ったとき、それは正しく一致しました。また、最高のピークだけでなく、すべての高調波を検討しています。


ウィキペディアにはいくつかの情報があります。
Emre、2012年

回答:


9

私は最大の大きさでビンを取得しようとしましたが、それはより高いピッチの信号に対して正しい結果を与えるだけであり、どのオーバーサンプリング係数を使用しても問題はありません。

これは、高調波基本波よりも大きいためです。スペクトルをプロットすると、表示されます。真のファンダメンタルを見つけるためのより良い方法は、自己相関です。次に、波形を「スライド」させて、波形がそれ自体と一致する遅延を見つけます。

http://www.phon.ucl.ac.uk/courses/spsci/matlab/lect10.html

あなたは本当に彼らに正確な音符を歌ってもらいたいですか、それとも彼らが彼らの声のレジスターに応じて1オクターブ上または下で歌ってもいいですか?


そうです、私はピッチクラスだけに興味があると言うのを忘れていました。ツールのテストに次のWebサイトを使用しています:sevenstring.com/tuningfork/tuningfork.html。A(220Hz)の入力では、見つかったピッチクラスとしてE(660Hz)を返します。直腸を確認したところ、220Hzは確かにそこにありますが、マグニチュードは660Hz未満です。最小マグニチュード未満の値を除外し、希望の範囲の周波数をキャップした後、これから得られるスペクトルには4つのピークがあります。[ピーク、マグ] = [220、0.0203]、[618、0.0142]、[660、0.0668]、[703、0.0497]。
フェリペリラ

真の周波数を取得するのと同じように、マグニチュードを計算するときに位相オフセットを考慮に入れるべきだと思いました。それは理にかなっていますか?つまり、ビンの位相オフセットが約90ºの場合、「ピーク」は0マグニチュードになりますね。
フェリペ・リラ

@elipedrl:つまり、基本的にギターチューナーを作成していることになります。:)私が理解しているように、それらは波形をクリーンアップするためのローパスフィルターと、ピッチを得るためにピークをカウントします。electronicdesign.com/article/articles/... aboutmicrocontroller.blogspot.com/2008/04/...あなたが安っぽさはなく、精度のためのつもりなら、より良い方法は、しかし、がありますgist.github.com/255291
endolith

@elipedrl:ビンの位相オフセットは、ピッチとは無関係である必要があります。各ビンは複素数であり、その数の絶対値または大きさに関心があります。en.wikipedia.org/wiki/Absolute_value#Complex_numbers
endolith

1
何らかの理由(レイテンシ、時間量子など)で2つの短いFFTが発生した場合、フェーズボコーダーの計算は、さらに長いFFTを実行してそれを補間するよりも計算量が少なくなります。
hotpaw2

6

はい、ピッチにピーク周波数推定器を使用するのは間違っています。ピッチは心理音響現象であるため、ピッチの検出または推定は周波数推定とは異なります。ここで同様の質問に対する以前の回答で与えられた多くのピッチ推定方法があります。選択肢は1つ以上あります。

1つは/programming/4227420/matlab-missing-fundamental-from-an-fft/4231322#4231322、もう1つはピッチ検出を改善するためのヒントです。

追加#1:このような質問が頻繁に寄せられるため、このトピックについてより長いブログ投稿を書きました:http : //www.musingpaw.com/2012/04/musical-pitch-is-not-just-fft- frequency.html


ピッチクラスだけに興味があるという情報で質問を更新しました。ポストプロセッシングを備えたFFTでこれで十分であることを本当に望んでいます。スケジュールがかなり遅れており、アプローチを変更するのはひどいことです。
フェリペリラ

@elipedrl:FFTが機能するはずです。いくつかのピークを取得し、そのうちの1つをスマートに選択するだけで十分です。有効なピークは基本波の整数倍に近くなりますが(正確ではありません)、スプリアスピークはそうではありません。スプリアスピークを選択したり、探しているノートから1オクターブ離れていない3次高調波などを選択したりしないでください。
内部石

可能性は低いですが、周波数のピークが音程の周波数にない場合もあります。一部の男性の母音はこれに近い場合があり、母音フォルマントでフィルタリングした後の高倍音のみが残ります。
hotpaw2 2012年

ハーモニックプロダクトスペクトル法は、最初のFFT結果を後処理することにより、スペクトルピークのグループのLCDの最小公分母推定値を見つけるのに適しています。
hotpaw2 2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.