AMDFをピッチ抽出に使用する場合の低基本波への対処方法


11

私は、Average Magnitude Difference Functionを使用して、準周期的なオーディオ信号の基本周波数を推定しています。AMDFは次のように定義されます

Dn=1N−n∑k=nN−1|Sk−Sk−n|

ここで、は信号の長さです。この関数は、信号がその周期に等しい量だけシフトされたときに最小値を示します。N

これは私がピッチを抽出するために使用しているコードです(Matlabで):

 a = amdf(f);
 a = a/max(a);
 [p l] = findpeaks(-a, 'minpeakprominence', 0.6);
 pitch = round(sample_freq/l(1);

ただし、私は基本周波数が非常に低いオーディオ信号を扱っています。

オーディオ信号のスペクトル

結果として、ピッチが2倍になる問題が発生します。検出された最小値は、信号の周期の半分(つまり、第2高調波)に対応します。

上記の信号のAMDF

最初のピークだけでなく、最大のピークを抽出しようとしましたが、この問題が残る場合があります。低ファンダメンタルズに対処するために、コードやAMDF関数、あるいはその両方をどのように改善できますか?


心理音響学と人間の知覚は、知覚されるピッチとオクターブの不確実性に影響を与えます。AMDFの最大ピークがどのような条件下で聞こえるかを判断するには、実験が必要な場合があります。
— hotpaw2

あなたの周波数はどのくらいですか?私が聞く例はありますか?
— ederwander

回答:


10

これは、ピッチ検出ビズで「オクターブ問題」と呼んでいるものです。

まず、AMDFをASDFに変更します。そして、ラグが大きくなるので、ウィンドウサイズを小さくしません。(また、表記をより慣習的なものに変更します。「」は離散時間信号です。)x[n]

サンプル近傍におけるの平均二乗差分関数(は、次のとおりです。x [ n 0 ]x[n]x[n0]

Qバツ[k、ん0]≜1NΣん=0N−1(バツ[ん+ん0−⌊N+k2⌋] − バツ[ん+ん0−⌊N+k2⌋+k])2

⌊⋅⌋はfloor()関数であり、が偶数の場合、。⌊ Kk⌊k2⌋=⌊k+12⌋=k2

次に、正方形を展開し、合計がとしてどのように見えるかを検討します(が無限大になるわけではありませんが、が大きいかどうかを判断するためです)。ASDFは、自己相関に直接関連しています。それは本質的に逆さまにされた自己相関です。これらのステップは、私があなたに残します。この答えを見てください。N→∞NN N

それでは、から定義された(サンプル近傍にある)この有限長の「自己相関」を考えます。x[n0]

Rバツ[k、ん0]=Rバツ[0、ん0]−12Qバツ[k、ん0]

どこ

Rバツ[0、ん0]≜1NΣん=0N−1(バツ[ん+ん0−⌊N2⌋])2

以降と全てのラグのための、ことを意味すべてのラグのための。、Qはxは [ K 、nは0 ] ≥ 0 k個のR X [ K 、nは0 ] ≤ R X [ 0 、N 0 ] 、KQバツ[0、ん0]=0Qバツ[k、ん0]≥0kRバツ[k、ん0]≤Rバツ[0、ん0]k

が周期周期的である(そしてたまたま整数である)と仮定すると、P Pバツ[ん]PP

バツ[ん+P]=バツ[ん]∀ん

そして、 および、任意の整数の周期(は整数)です。そのため、が周期的である場合、で、に他の倍数に等しいピークが得られます。が完全に周期的でない場合、予想されるのはでの最大ピーク、(探している期間)での別のピーク(ただし少し小さい)、および次の大きな倍数での徐々に小さいピークです。。R X [ m個のP 、N 0 ] = R X [ 0 、N 0 ] ≥ R X [ K 、nは0 ] MのK = 0 のk P X [ N ] X [ n ] k = 0 k = P PQx[mP,n0]=0Rx[mP,n0]=Rx[0,n0]≥Rx[k,n0]mk=0kPx[n]x[n]k=0k=PP

だから、オクターブ問題があるための理由のカップルの約きます。まず、は必ずしも整数である必要はありません。これは補間問題であり、大した問題ではありません。 P

2番目の理由とより難しい問題は、サブハーモニクスの問題です。あなたがちょうどA-440 Hzで素敵な周期的な音を聞いていて、それが中央のCから9半音上にあるAのように聞こえると考えてください。今、誰かがその音に非常に小さい振幅(60 dBのような)を追加するとしますA -220?それはどのように聞こえ、数学的に「真の」期間は何ですか?


期間の「正しい」ピークを選択します。

ノートをDCブロッキングフィルターに通して、平均がゼロになるとします。ごとの自己相関の平均もゼロになる(またはが大きい場合はそれに近い)ことがます。つまりは(超えて)合計がほぼゼロになる必要があることを意味します。これは、ゼロより上の領域が以下と同じであることを意味します。R x [ k 、n 0 ] n 0 N R x [ k 、n 0 ] kx[n]Rx[k,n0]n0NRx[k,n0]k

さて、は、周辺の累乗を表し、負でない必要があります。 がを超えることはありませんが、が周期的である場合はがことがあります。 もし。したがって、が周期周期的であり、だけ離れた一連のピークがあり、それらのピークの高さを把握しているとします。また、のDC成分がゼロの場合、つまりピークの中間にある場合、負の値でなければなりません。x [ n ] n = n 0 R x [ k 、n 0 ] R x [ 0 、n 0 ] x [ n ] R x [ P 、n 0 ] = R x [ 0 、n 0 ]Rx[0,n0]x[n]n=n0Rx[k,n0]Rx[0,n0]x[n]Rx[P,n0]=Rx[0,n0]x [ n ] P P R x [ k 、n 0 ]x[n+P]=x[n]x[n]PPRx[k,n0]

場合、「準周期的」だった、の一周期、隣接するサイクルのように多くのことを見ていきますが、それほどのサイクルのような遠く時間で信号ダウン。つまり、最初のピークは、2番目のピークまたは3番目のよりも高くなります。このルールを使用して、常に最も高いピークを選択し、最も高いピークが常に最初のピークになると期待できます。しかし、サブハーモニックが聞こえないため、そうでない場合もあります。ときどき2番目またはおそらく3番目のピークが少し高くなることがあります。また、期間ので、おそらくサンプルの整数倍ではなくでx [ n ] x [ n ] R x [ P 、n 0 ] R x [ 2 P 、n 0 ] R x [ 3 P 、n 0 ] P k R x [ k 、n 0 ] kx[n]x[n]x[n]Rx[P,n0]Rx[2P,n0]Rx[3P,n0]PkRx[k,n0]は常に整数なので、真のピークはおそらく整数値の中間になります。滑らかなピークがどこにあるかを補間する場合(これはお勧めしますが、2次補間で十分です)、実際に整数間の高さであっても、補間アルゴリズムによって、実際のピークよりもわずかに高くまたはわずかに低くなる可能性があります。したがって、絶対的に最も高いピークを選択すると、最初のピークよりも2番目のピークが誤って選択される可能性があります(またはその逆)。kk

どういうわけか、最初のピークが2番目よりわずかに有利で、2番目が4番目(次のオクターブ下)よりも有利になるように、増加でピークをハンディキャップする必要があります。k

これを行うには、に減少関数を掛けて、でのピークがでの同一のピークと比較して、ある係数だけ減少するようにします。(指数ではなく)べき関数がそれを行うことがわかります。だから計算するk k = 2 PRx[k,n0]kk=2Pk=P

k−α Rx[k,n0]

したがって、が周期で完全に周期的であり、非整数補間問題を無視する場合、x[n]PPP

Rx[2P,n0]=Rx[P,n0]

だが

(2P)−αRx[2P,n0]=(2P)−αRx[P,n0]<P−αRx[P,n0]

1オクターブ下のピッチのピークが減少する係数は、比率です。

(2P)−αRバツ[2P、ん0]P−αRバツ[P、ん0]=(2P)−αP−α=2−α

したがって、最初のピークを2番目のピークよりも1%ブーストしたい場合、つまり、サブハーモニックピッチの自己相関が最初のピークより少なくとも1%大きい場合を除き、ピッチをサブハーモニックピッチに選択しません。ピーク、からのを解決しますα

2−α=0.99

これは、1オクターブ下のサブハーモニックピッチに対応するピークに重みを付けたり、強調を解除したり、ハンディキャップしたりするための一貫した方法です。

それでも、しきい値の問題が残ります。うまく選択する必要があります。しかし、これは1オクターブ低い2番目のピークよりも最初のピークを強調する一貫した方法ですが、ノートが実際に1オクターブ低い場合はそうではありませんが、すべての偶数の高調波のエネルギーは奇数に比べて強かったです高調波、これはまだ2番目のピークが選択される可能性を残します。α


1
最後の質問に答えます。220Hzの振幅を追加すると、ピッチは220 Hzになります。440Hzは、基本波(数学的に言えば)の後の最初の高調波です。私の場合も同様ですが、高調波も存在するため、欠落した基本波は知覚の観点からは問題ありません。私は空自とAMDFを交換しオクターブの問題を解決する可能性がどのように理解していない
— firion

質問の残りの半分は*「どのように聞こえますか?」それに答えて、ピッチ検出器に何をさせたいか見てみましょう。
— robert bristow-johnson

に対して行ったのと同じトーンのを計算してプロットしてみてください。AMDFの上下が逆になっているはずです。Rバツ[k、ん0]
— robert bristow-johnson

他の高次高調波がなく、440 Hzの高調波だけがあり、220 Hzのトーンが十分に低い場合、440 Hzのピッチが聞こえます。あるレベルの上では(どちらかわかりません)、220 Hzのトーン、したがって220 Hzのピッチも聞こえます。
— フィリオン

-60 dBと言ったのには理由があります。次に、ピッチ検出器に220 Hzや440 Hzの音符など、何を伝えたいですか?
— robert bristow-johnson

0

ヒューリスティックな方法では、有声音声の基本周波数は[70、400] Hzの間隔になります。したがって、最初のステップは、バンドパスフィルターを適用して、そのバンドをほぼ分離することです。

次に、パワースペクトルに重み関数を適用できます。ファンダメンタルの近くでは、ウェイトは1に近く、バンドの終わりに近いほど、ウェイトは0に近いはずです。このウェイトはもちろん正規化されています。私は超線形の何かをお勧めします:二次、四次など-オクターブを本当に殺すために。


ウェイトを適用するにはどうすればよいですか?基本がどこにあるのかわかりません。また、私の信号は楽器のノートなので、範囲が大きくなります
— firion
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.