Gerçek Zamanlı İnsan Adımı Tespiti


11

Ham mikrofon girişini analiz edecek ve oyuncuya ne kadar iyi şarkı söylediğini söyleyecek bir şarkı oyunu uygulamaya çalışıyorum. Bunun gerçek zamanlı yapılması gerekiyor.

Aynı soruyu soran birçok konuya rastladım, ancak muhtemelen alandaki deneyim eksikliğimden ve sığ matematik arka planımdan dolayı hala bitirmedim. DSPDimension web sitesi adım kaydırma makalesine dayanan bir algoritma uyguladım: http://www.dspdimension.com/admin/pitch-shifting-using-the-ft/

Makalenin açıkladığı gibi gerçek frekansı ve büyüklüğü çıkarıyorum, ancak bununla temel frekansı bulacağımı bilmiyorum. Ben en büyük büyüklüğü ile bin almaya çalıştım ama bu sadece daha yüksek perde sinyalleri için bana doğru sonuçlar vermek, hangi aşırı örnekleme faktörü kullandığım önemli değil hala düşük frekans sinyalleri için kötü veri olsun. Bu yaklaşım tamamen yanlış mı yoksa doğru yolda mıyım, ama sadece bir şey mi eksik?

Şimdiden teşekkürler,

EDIT: Ben sadece pitch sınıf ilgileniyorum bahsetmeyi unuttum, bu yüzden temel eksikse Tamam ama örnek güçlü bir ton var.

EDIT2: Herkese teşekkürler, algoritmanın cazibe gibi çalışan bir sürümünü bitirdim. Düşük perde tahmin problemi girdi testimden kaynaklandı. Notu söylediğimde doğru eşleşti. Ayrıca, sadece en yüksek zirveyi değil, tüm harmonikleri düşünüyorum.


Wikipedia'nın bazı bilgileri var.
Emre

Yanıtlar:


9

Ben en büyük büyüklüğü ile bin almaya çalıştım ama bu sadece daha yüksek perde sinyalleri için bana doğru sonuçlar vermek, hangi aşırı örnekleme faktörü kullandığım önemli değil hala düşük frekans sinyalleri için kötü veri olsun.

Harmonikler nedeni budur olan temel büyüktür. Spektrumunuzu çizin ve göreceksiniz. Gerçek temeli bulmak için daha iyi bir yöntem otokorelasyonudur. Sonra dalga formunu kendinden geçiyorsunuz ve dalga şeklinin kendisiyle aynı hizaya geldiği gecikmeleri buluyorsunuz.

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

Tam nota söylemelerini gerçekten istiyor musunuz, yoksa ses kayıtlarına bağlı olarak yukarı veya aşağı oktav söylemeleri uygun mu?


Haklısın, sadece saha dersine ilgi duyduğumu belirtmeyi unuttum. Aracımı test etmek için bu web sitesini kullanıyorum: seventhstring.com/tuningfork/tuningfork.html . A (220Hz) girişi için bulunan eğim sınıfı olarak E (660Hz) değerini döndürür. Sprectum'a bir göz attım ve 220Hz gerçekten orada, ancak 660Hz'den daha az büyüklükte. İstediğim aralıktaki minimum büyüklük ve kapak frekanslarının altındaki değerleri filtreledikten sonra, bundan aldığım spgestumda 4 tepe var. [zirve, mag] = [220, 0.0203], [618, 0.0142], [660, 0.0668], [703, 0.0497].
Felipe Lira

Sadece gerçek frekansı elde etmek için yaptığım gibi, büyüklüğü hesaplarken belki de faz ofsetini dikkate almam gerektiğini düşündüm. bu mantıklı mı? Demek istediğim, bir depo gözü için kabaca 90º bir faz kayması varsa, "tepe" 0 büyüklükte olur mu?
Felipe Lira

@elipedrl: Yani aslında bir gitar tuneri yazıyorsunuz. :) Anladığım kadarıyla, dalga şeklini temizlemek için alçak geçiren filtre ve daha sonra sahayı elde etmek için zirveleri sayın. electronicdesign.com/article/articles/... aboutmicrocontroller.blogspot.com/2008/04/... Eğer ucuzluk yerine doğruluk için gidiyoruz iyi yollar olsa da, vardır gist.github.com/255291
Endolit

@elipedrl: Bir bölmenin faz ofseti, adımla alakasız olmalıdır. Her bölme karmaşık bir sayıdır ve bu sayının mutlak değeri veya büyüklüğü ile ilgilenirsiniz. en.wikipedia.org/wiki/Absolute_value#Complex_numbers
endolit

1
ve herhangi bir nedenden ötürü 2 daha kısa FFT'ye sahipseniz (gecikme, zaman kuantumu vb.), bir faz vocoder hesaplaması, başka bir daha uzun FFT yapmaktan ve bunu enterpolasyondan daha az hesaplamadır.
hotpaw2

6

Evet, adım için tepe frekans tahmincisi kullanmak yanlıştır. Pitch psikoakustik bir fenomendir, bu nedenle perde tespiti veya tahmini frekans tahmininden farklıdır. Burada benzer soruların daha önceki cevaplarında bol miktarda perde tahmin yöntemi verilmiştir. Aralarından seçim yapabileceğiniz 1'den fazla var.

Bunlardan biri: /programming/4227420/matlab-missing-fundamental-from-an-fft/4231322#4231322 ve diğeri: Adım algılamayı iyileştirmeye yönelik ipuçları

EKLENDİ # 1: Buna benzer sorular o kadar sık ​​sorulur ki, konuyla ilgili daha uzun bir blog yazısı yazdım: http://www.musingpaw.com/2012/04/musical-pitch-is-not-just-fft- frequency.html


Soruyu yalnızca saha sınıfıyla ilgilendiğim bilgilerle güncelledim. Umarım bir post işleme ile FFT bunun için yeterlidir, programımın çok gerisindeyim ve yaklaşımı değiştirmek benim için korkunç olacaktır.
Felipe Lira

@elipedrl: FFT o zaman çalışmalıdır. Birkaç tepe noktası elde etmek ve daha sonra bunlardan birini akıllıca seçmek yeterince iyi olmalıdır. Geçerli zirvelerin temelin tamsayı katlarına yakın (tam olarak değil) olacağını, sahte zirvelerin olmayacağını unutmayın. Sahte zirveleri seçmekten ve aradığınız nottan bir oktav olmayan 3. harmonik vb. Seçmekten kaçınmalısınız.
endolith

Belki de olası olmasa da, hiçbir frekans pikinin müzikal frekansta olmaması mümkündür. Bazı erkek ünlüler buna yakın olabilir, yalnızca ünlü harf tarafından filtrelendikten sonra yüksek tonlar kalır.
hotpaw2

Harmonik Ürün Spektrumu yöntemi, bir grup spektral tepe noktasının LCD en düşük ortak payda tahminini, ilk FFT sonuçlarını sonradan işleyerek bulmak için uygun olabilir.
hotpaw2
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.