タグ付けされた質問 「pitch」

4
ウィンドウサイズを大きくせずにFFTの周波数分解能を上げることはできますか?
マルチピッチ分析にSTFTを使用したいと思います。信号に存在する部分音を検出することはほんの始まりに過ぎないことを理解しています。まだ問題があります。 「CD」周波数でサンプリングされた信号があるとしましょう44100Hz。1024サンプルのウィンドウでは、周波数ビンの解像度がになり22500Hz/512=43Hzます。これが唯一のように見分けるの高いピアノのノートには十分です C5 = 523.251HzとC#5 = 554.365。 私1024は以前はかなり大きな窓だと思っていました。しかし、そうではないかもしれませんし、通常、パーシャルを検出するために大きなウィンドウが使用されますか? ウィンドウサイズを大きくする以外の方法で周波数分解能を上げると、時間分解能が悪くなりますか?私は2つの方法を考えました: 方法1: バンドパスフィルターを使用して、信号を周波数帯域に分割します(0-11.25Hzおよびなど11.25-22.5Hz)。 元の高周波数が低周波数になるように、より高い帯域をダウンサンプリングします(2番目の帯域でも同様です11.25-22.5Hz -> 0Hz-22.5Hz)-これが可能かどうかはわかりません。 結果のビンセットを調整されたラベルで連結します。 方法2: 制限を増やしながら一連のローパスフィルターを使用します。 増加する周波数範囲でFFTを実行します。 各周波数に対して、可能な限り最適な解像度(この周波数が含まれていた最初のFFTからのビン)を使用します。 これにより、低周波数の解像度が向上しますが、音が高いほど周波数の差が大きくなるため、これは問題ないと思います。 この問題についての発言に感謝します。 ここも読んでください: ウィンドウサイズ、サンプルレートはFFTピッチ推定にどのように影響しますか? ピークピッキングの結果を改善する方法について。使ってみようと思います。
12 filters  fft  pitch  stft 

2
リアルタイムの人間のピッチ検出
私は生のマイク入力を分析し、プレーヤーに彼の歌がどれだけ上手かを伝える歌のゲームを実装しようとしています。それはリアルタイムで行う必要があります。 私は同じ質問をする多くのスレッドに出くわしましたが、おそらくフィールドでの経験の不足と浅い数学の背景が原因で、私はまだそれで完全に終わっていません。DSPDimension Webサイトのピッチシフトの記事に基づくアルゴリズムを実装しました:http ://www.dspdimension.com/admin/pitch-shifting-using-the-ft/ 記事で説明しているように、真の周波数と振幅を抽出しますが、これで基本周波数を見つけることはできません。私は最大の大きさでビンを取得しようとしましたが、それはより高いピッチの信号に対して正しい結果を与えるだけであり、どのオーバーサンプリング係数を使用しても問題はありません。このアプローチは完全に間違っていますか、それとも私は正しい軌道に乗っていますが、何か不足していますか? 前もって感謝します、 編集:私はピッチクラスにのみ興味があることを言及するのを忘れていたので、ファンダメンタルズが欠けていても大丈夫ですが、サンプルには強い倍音があります。 EDIT2:みんなのおかげで、魅力的なアルゴリズムのバージョンが完成しました。低ピッチ推定の問題は、入力テストによるものでした。私が音符を歌ったとき、それは正しく一致しました。また、最高のピークだけでなく、すべての高調波を検討しています。

2
ピッチベンド(MIDI)値を「通常の」ピッチ値に変換
ここに記載されているrt_lpc(リアルタイムLPC)実装を使用して、オフラインLPC分析と合成を試みています。プログラム内には、オフラインLPC分析および合成プログラムに使用できるいくつかの関数があります。rt_lpcコードは、主に作曲家などを対象としています。つまり、MIDIまたは声門パルス入力を使用します。プログラムには、(自己相関から取得した)ピッチ値を値に変換するコードがいくつかありbendます。この関係は次のように与えられます。 pitch = (int)( Stk::sampleRate() / midi2pitch[ananya.data[1]] ) / pow( 1.0653f, bend/64.0f*11.0f ); power *= ananya.data[2] / 64.0f; bend = ge.data[1] / 128.0f + ge.data[2] - 64; いくつかのポイント: a。その場で生成されるように見えるananyaタイプのオブジェクトですMidiMsg。 b。geまたMidiMsg、オンザフライで生成されるように見えるタイプのオブジェクトでもあります。 c。これらの2つのオブジェクトは、プログラムがリアルタイムで実行されるときに作成されます(私のものは、自分のmain.cppでその一部を実行するオフラインバージョンです)。 私の質問: 1.ピッチベンドとは何ですか? 2.ピッチ値をベンド値に変換するにはどうすればよいですか?マッピング関係とは何ですか? 解決策を探しましたが、明確な答えは見つかりませんでした。
11 music  pitch 

2
AMDFをピッチ抽出に使用する場合の低基本波への対処方法
私は、Average Magnitude Difference Functionを使用して、準周期的なオーディオ信号の基本周波数を推定しています。AMDFは次のように定義されます Dn=1N−n∑k=nN−1|Sk−Sk−n|Dn=1N−n∑k=nN−1|Sk−Sk−n| D_n = \frac{1}{N-n}\sum_{k=n}^{N-1}|S_k - S_{k-n}| ここで、は信号の長さです。この関数は、信号がその周期に等しい量だけシフトされたときに最小値を示します。NNN これは私がピッチを抽出するために使用しているコードです(Matlabで): a = amdf(f); a = a/max(a); [p l] = findpeaks(-a, 'minpeakprominence', 0.6); pitch = round(sample_freq/l(1); ただし、私は基本周波数が非常に低いオーディオ信号を扱っています。 結果として、ピッチが2倍になる問題が発生します。検出された最小値は、信号の周期の半分(つまり、第2高調波)に対応します。 最初のピークだけでなく、最大のピークを抽出しようとしましたが、この問題が残る場合があります。低ファンダメンタルズに対処するために、コードやAMDF関数、あるいはその両方をどのように改善できますか?

2
ピッチ検出における高調波製品スペクトルの制限
HPSを使用してピッチ検出アルゴリズムを作成しましたが、問題に直面しています。私は信号処理の初心者ですが、このサイトは以前から役に立ちました。 より高いピッチ(eg. >C6:1046.50hz)については、HPSからガベージデータを取得し始めています。ピッチが高いほど、多くのゴミが発生します(ゴミとは、オクターブエラーや高調波ではなく、約1Hz〜20Hzの周波数を意味します) 私が経験的に観察したこと: ピッチが高くなると結果は最悪になります。ファンダメンタルズがA6程度以上の場合、ガベージデータのみを取得します。 FFTは、非常に高いピッチでも正常に機能します(細かく言うと、ピークは基本波またはその高調波のいずれかを示しますが、ガベージは示しません)。 HPSで考慮する高調波の数を減らすと、ゴミは減りますが、基本波と高調波を区別するのが難しくなります。 これが私のアルゴリズムです: ->raw buffer -> hann window, 16384 samples, 50% overlap -> zero padding -> FFT -> HPS どんな助けでもありがたいです! 更新1:では、追加したいことがいくつかあります。 私が記録しているサンプルレートは44100 Hzです この振る舞いはギターではほとんど見えないが、デジタルピアノでは非常によく見えることを確認しました(同じ演奏ノートに対して) これが私のhpsアルゴリズムです、多分経験のある人が問題を見つけることができます。 int hps(float* spectrum, int spectrumSize, int harmonics) { int i, j, maxSearchIndex, maxBin; maxSearchIndex = spectrumSize/harmonics; maxBin = 1; for …

1
AMDFとは何ですか?
平均マグニチュード差分関数/数式(AMDF)のウィキペディアページが空のようです。AMDFとは何ですか?AMDFの特性は何ですか?自己相関などの他のピッチ推定方法と比較したAMDFの長所と短所は何ですか?

1
離散フーリエ変換-基本をすばやく見つける?
まず、私は謝罪します。私はソフトウェア開発者であり、純粋な数学に飛び込んでいないのは非常に長い期間なので、私の質問は馬鹿げているように見えるかもしれません。私は望みません。 コンテキストは、音楽のピッチ認識です。 音符を取り、それにフーリエ変換を適用すると、特定の周波数の振幅の合計が無限になります。たとえば、任意の楽器で基本がである音符を演奏すると、フーリエ変換後、F 、2 F 、3 F 、… 、n Fで高調波が発生します。すべての周波数には、楽器の音色を定義する特定の振幅があります(ピアノ、声、トランペットなどすべてはこの音に従いますが、すべての倍音に対して異なる振幅があります)。FFFF、2 F、3 F、… 、n FF、2F、3F、…、んFF, 2F, 3F,\ldots,nF 今私がしたいのは、与えられたオーディオ信号からです、見つけます。それだけ。常にバックグラウンドノイズなどがあるため、見た目よりも複雑です。さらに、Fは必ずしも最大の振幅を持つ周波数である必要はありません。FFFFFF したがって、を見つけるための私のアイデアは、DFT(実際には速度のFFT)を適用し、周波数Fを見つけることです。これにより、F + 2 F + 3 F + … + n FがFFT出力で最大になります。FFFFFFF+ 2 F+ 3 F+ … + n FF+2F+3F+…+んFF + 2F +3F + \ldots + nF それは可能だと思いますか?それは非常に短い時間で可能だと思いますか(<5ミリ秒としましょう)?
9 audio  fft  pitch 

5
ピアノのピッチ検出
私はピアノのチューニングプログラムに取り組んでおり、その一部にはリアルタイムのピッチ検出が必要です。これは私がこれまでに行ったスキームで、ある程度は機能しますが、おそらくいくつかの改良を使用できます。 モノラル、44.1kHz、16ビットPCMオーディオを2 ^ 14サンプルのチャンクでキャプチャしています。最後の4つのサンプルを長さ2 ^ 16のバッファーに結合し、ハンウィンドウをバッファーに適用して、FFTを実行します。次に、FFTの結果を2つの解像度でバケット化します。最初に、200バケットにバケット化してから、この粒度でHPSピッチ検出アルゴリズムを実行します。ここで正確な周波数を取得する必要はありません。近づきたいだけです。次に、12000バケットにバケット化すると、10Hzから10kHzまで1セントの解像度になります。200ビンHPSアルゴリズムからおおよその周波数がわかったら、12000ビンケースのその範囲でピークを検索して、より正確な周波数を取得します。 これは、キーボードの中央にあるノートでは問題なく動作するようです。低音で発生するのは、通常、実際の音の2番目または3番目の部分である約1.5秒の音の誤認と、その後の正しい音の誤認です。 何が起こっているのかを確認するために作成したすべてのスペクトルプロットでは、予想されるピークよりも広い幅があります。この幅は、200ビンから12000ビンのケースで視覚的にある程度一貫しています。200ビンの場合、ピークが狭くなると予想していました。 ですから、信号処理は私にとっては初めてなので、私が質問することは考えられない問題があるかもしれませんが、特定の質問に関しては、サンプルサイズはこのタスクに十分ですか?ハーンはウィンドウの正しい選択ですか?FFTの前にデータを平滑化する必要がありますか?ビンの数に対してHPSはどの程度敏感ですか?多くのビンを使用した場合、非調和性により、部分音がHPSアルゴリズムの2、3、4などで除算する単純なアプローチと基本波をオーバーラップしない可能性があると考えていました。
8 fft  audio  pitch 

2
高速ピッチ認識
ミュージシャンが音楽を再生しているときにピッチ(信号周波数の測定)を検出し、チューニングがずれている場合は警告を出す必要がありますが、音楽が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/Tdf=1/Tdf = 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の線形性は必要ありません。出力、対数スケールの方が良いでしょう。(おそらく、より多くのトレードオフが可能ですが、今のところ、他に何も思い浮かびません。) これは本当に良い絵です:
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.