Saha ekstraksiyonu için AMDF kullanırken düşük temel ile nasıl başa çıkılır?


11

Yarı periyodik bir ses sinyalinin temel frekansını tahmin etmek için Ortalama Büyüklük Farkı İşlevini kullanıyorum . AMDF şu şekilde tanımlanır:

Dn=1Nnk=nN1|SkSkn|

nerede Nsinyal uzunluğudur. Sinyal, süresine eşit bir miktarda kaydırıldığında bu işlev minimum gösterir.

Bu adım (Matlab) çıkarmak için kullandığım kod:

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

Ancak, temel frekansın çok düşük olduğu bir ses sinyali ile uğraşıyorum:

ses sinyalinin spektrumu

Sonuç olarak, bir perde katlama problemi ortaya çıkar: tespit edilen minimum, sinyalin süresinin yarısına karşılık gelir (yani ikinci harmonik):

Yukarıdaki sinyalin AMDF'si

Sadece ilk değil, en büyük zirveyi çıkarmaya çalıştım, ancak bazen bu sorun devam ediyor. Düşük temel düzey ile başa çıkmak için kodumu ve / veya AMDF işlevimi nasıl geliştirebilirim?


Psiko-akustik ve insan algısı algılanan zift ve oktav belirsizliğini etkiler. En büyük AMDF pikinin hangi koşullar altında duyulabilir bir fark yarattığını belirlemek için deney yapılması gerekebilir.
hotpaw2

frekansların ne kadar düşük? dinlemem için bir örnek var mı?
ederwander

Yanıtlar:


10

Saha tespit tesisinde buna " oktav problemi " diyoruz .

Her şeyden önce AMDF'yi ASDF olarak değiştirirdim. Ve gecikme arttıkça pencere boyutunu küçültmem. (Ayrıca, daha geleneksel olduğunu düşündüğüm şekilde gösterimi değiştiriyorum. "x[n]"ayrık zamanlı bir sinyaldir.)

Ortalama Kare Fark Fonksiyonu (ASDF) x[n] örnek mahallede x[n0] dır-dir:

Qx[k,n0]1Nn=0N1(x[n+n0N+k2]  x[n+n0N+k2+k])2

olduğu floor()takdirde, fonksiyon vek o zaman bile k2=k+12=k2.

Şimdi kareyi genişletin ve zirvelerin neye benzediğini düşünün N (bu değil N olan sonsuzluğa gidiyordu, ama size bir fikir olmadığını vermekNbüyük). ASDF doğrudan otokorelasyon ile ilişkilidir. Aslında otokorelasyon tersine döndü. Bu adımları sana bırakacağım. bu cevaba bir göz atın.

Şimdi bu sonlu uzunluktaki "otokorelasyon" (örnek mahallesinde)x[n0]) ASDF'den tanımlanmıştır:

Rx[k,n0]=Rx[0,n0]12Qx[k,n0]

nerede

Rx[0,n0]1Nn=0N1(x[n+n0N2])2

Dan beri Qx[0,n0]=0 ve Qx[k,n0]0 tüm gecikmeler için k, bu şu demek oluyor Rx[k,n0]Rx[0,n0] tüm gecikmeler için k.

Diyelim ki bir dakika x[n] periyodik, periyodlu P (ve P tamsayı olur), o zaman

x[n+P]=x[n]n

ve Qx[mP,n0]=0 ve Rx[mP,n0]=Rx[0,n0]Rx[k,n0] herhangi bir tam sayı periyodu için (mbir tamsayıdır). Yani bir tepe elde edersinizk=0 ve k diğer herhangi bir katına eşit P Eğer x[n]periyodiktir. Eğerx[n]olduğu değil mükemmel periyodik, ne beklediğinizden büyük zirve olank=0, başka bir tepe noktası (ancak biraz daha küçük) k=P (aradığımız dönem) ve daha büyük katları için giderek daha küçük zirveler P.

Yani oktav sorun yaklaşık nedenlerden dolayı çift geliyor. Her şeyden önce,Pille de bir tamsayı değildir. Bu bir enterpolasyon problemi, büyük bir sorun değil.

İkinci neden ve daha zor olan sorun subharmoniklerdir . Tam olarak A-440 Hz'de güzel bir periyodik ton dinlediğinizi ve orta C'nin üstünde 9 yarı ton olan bir A gibi geldiğini düşünün. -220? Kulağa nasıl gelecek ve matematiksel olarak "gerçek" dönem nedir?


Dönem için "sağ" pik seçimi .

Diyelim ki notunuzu bir DC engelleme filtresinden geçiriyorsunuz, böylece x[n]sıfırdır. Otokorelasyon ortalamasına neden olduğu ortaya çıktıRx[k,n0] herkes için n0 ayrıca sıfır (veya Nbüyük). Bunun anlamıRx[k,n0] toplamı geçmeli k) sıfıra yakın olmak anlamına gelir, yani sıfırın altında aşağıdaki kadar çok alan vardır.

Tamam Rx[0,n0] gücünü temsil eder x[n] etrafında n=n0 ve negatif olmamalıdır. Rx[k,n0] asla geçmez Rx[0,n0] ama ne zaman büyük olabilir x[n] periyodiktir. Rx[P,n0]=Rx[0,n0] Eğer x[n+P]=x[n]. Yani eğerx[n] periyodik, periyodlu P ve aralarında bir sürü tepe var Pve bu zirvelerin ne kadar yüksek olması gerektiği hakkında bir fikriniz var. Ve eğer DC bileşeniRx[k,n0]sıfır, yani tepeler arasında negatif değerler olması gerekir .

Eğer x[n] "yarı periyodik", bir döngü x[n] bitişik bir döngüye çok benzeyecek, ancak x[n]daha aşağıya doğru sinyal. Bu ilk zirve anlamına gelirRx[P,n0] ikinci saniyeden daha yüksek olacak Rx[2P,n0] veya üçüncü Rx[3P,n0]. Bu kural her zaman en yüksek zirveyi seçmek ve en yüksek zirvenin daima ilk zirve olmasını beklemek için kullanılabilir. Ancak, duyulmayan subharmonikler nedeniyle, bazen durum böyle değildir. bazen ikinci veya muhtemelen üçüncü zirve oh-so-biraz daha yüksektir. Ayrıca, çünkü dönemP muhtemelen tamsayı sayıda örnek değil, k içinde Rx[k,n0] her zaman bir tamsayıdır, dolayısıyla gerçek tepe değeri büyük olasılıkla tamsayı değerleri arasında olacaktır. k. Düzgün zirvenin olduğu yerde enterpolasyon yapsanız bile (ki bunu tavsiye ederim ve kuadratik enterpolasyon yeterince iyi) ve tamsayı arasında gerçekten ne kadar yüksekk, enterpolasyon algınız gerçekte olduğundan biraz daha yüksek veya biraz daha düşük bir tepe yapabilir. Bu nedenle, kesinlikle en yüksek zirveyi seçmek, diğerini gerçekten istediğinizde ikinci zirveyi sahte olarak seçebilir (veya tam tersi).

Yani bir şekilde yapmak zorunda handikap artırmayı zirvelerikbu yüzden ilk zirve bir olduğunu hafif Bunu nasıl vb saniyede üzerinde avantaj ve dördüncü (sonraki oktav aşağı) üzerinden ikinci,?

Bunu çarparak yaparsın Rx[k,n0] azalan fonksiyonu ile k böylece zirve k=2P aynı özneye göre bazı faktörler tarafından azaltılır. k=P. Güç işlevinin (üstel değil) bunu yaptığı ortaya çıkıyor. öyleyse hesapla

kα Rx[k,n0]

Yani, eğer x[n] dönemi ile mükemmel periyodikti Pve tamsayı olmayanlar için enterpolasyon sorunlarını göz ardı etme P, sonra

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

fakat

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

Bir oktavın daha düşük bir perdesi için zirvenin azaltılma faktörü, orandır.

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

Dolayısıyla, birinci zirvenize ikinci zirve üzerinde% 1 artış sağlamak istiyorsanız, alt harmonik aralık otokorelasyonu ilk harmonikten en az% 1 daha fazla olmadığı sürece perdeyi harmonik perdelik olarak seçmeyeceğiniz anlamına gelir. zirve, sen çözmek için α itibaren

2α=0.99

Bu, bir oktav altındaki subharmonik aralığa karşılık gelen zirveyi ağırlıklandırmanın, vurgulamanın veya vurgulamanın tutarlı bir yoludur.

Sizi hâlâ bir eşik değerinde bırakıyor. Seçmek zorundasınαiyi. Ama bu tutarlı yolu bir oktav daha düşüktür ikincinin üzerine ilk zirve vurgulamak, ama çok değil not gerçekten eğer olduğunu bir oktav daha düşük, ancak bu bile harmonik tüm enerji garip kıyasla güçlüydü harmonikler, bu yine de ikinci zirve için bir olasılık bırakacaktır.


1
Son sorunuzu cevaplamak için: 220 Hz'lik bir genlik eklerseniz, adım 220 Hz olacaktır, burada 440 Hz temelden sonraki ilk harmoniktir (matematiksel olarak konuşan). Benim durumum benzer ama daha yüksek harmonikler de var, bu yüzden eksik olan temel algısal açıdan bir sorun değil.
AMDF'yi

ama sorunun diğer yarısı * "neye benzeyecek?" buna cevap verin ve sonra adım dedektörünüzün ne yapmasını istediğinizi görelim.
robert bristow-johnson

hesaplamayı ve çizmeyi dene R,x[k,n0]AMDF için yaptığınız aynı ton için. baş aşağı AMDF gibi görünmelidir.
robert bristow-johnson

Daha yüksek harmonikleriniz yok, sadece 440 Hz olan varsa ve 220 Hz tonu yeterince düşükse, 440 Hz'lik bir ses duyacaksınız. Bir seviyenin üstünde (hangisini bilmiyorum), 220 Hz tonu ve böylece 220 Hz'lik bir ses duyacaksınız.
ateş

-60 dB dememin bir nedeni var. şimdi perde dedektörünüzün 220 Hz veya 440 Hz nota ya da başka bir şey olduğunu söylemesini istersiniz?
robert bristow-johnson

0

Sezgisel olarak, dile getirilen konuşmanın temel frekansı [70, 400] Hz aralığında olacaktır. Dolayısıyla, ilk adım, o bandı yaklaşık olarak izole etmek için bir bant geçiren filtre uygulamak olacaktır.

İkinci olarak, güç spektrumuna bir ağırlıklandırma fonksiyonu uygulayabilirsiniz. Temelin yakınında, ağırlık 1'e yakın olmalı, bandın sonuna yakınken, ağırlık 0'a yakın olmalıdır. Bu ağırlık elbette normalleştirilir. Sekizgenleri gerçekten öldürmek için süper doğrusal bir şey tavsiye ederim: ikinci dereceden, dörtlü vb.


Ağırlığı nasıl uygulayabilirim? Temelin nerede olduğunu bilmiyorum. Ayrıca, sinyalim bir enstrümanın notu, bu yüzden aralık daha büyük
ateş
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.