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関数、あるいはその両方をどのように改善できますか?