Ayrık Fourier dönüşümü - temeli çabucak bulmak?


9

Birincisi, özür dilerim çünkü bir yazılım geliştiriciyim ve saf matematiğe dalmam çok uzun zaman oldu, bu yüzden sorum aptal görünebilir. Umarım değildir.

Bağlam müzikte perde tanımadır.

Bir nota alırsanız ve bir Fourier dönüşümü uygularsanız, verilen frekanslar için sonsuz genliğe sahip olacaksınız. Örneğin, herhangi bir enstrümanda temel olan bir nota çalarsam , Fourier dönüşümünden sonra harmonikler olur . Her frekansın enstrümanın tınısını tanımlayan belirli bir genliği olacaktır (piyano, ses, trompet, ... hepsi bu kanadı takip eder, ancak her harmonik için farklı genliklere sahip olursunuz)FF,2F,3F,...,nF

Şimdi yapmak istediğim belirli bir ses sinyalinden, bulun . Sadece bu. Göründüğünden daha karmaşık çünkü her zaman arka plan gürültüsüne sahip olacaksınız ... Dahası, zorunlu olarak en yüksek genliğe sahip frekans değildir!FF

Bu yüzden bulma fikrim bir DFT (aslında hız için bir FFT) uygulamak ve bir frekansı bulmaktır , böylece FFT çıkışında maksimumdur.FFF+2F+3F+...+nF

Bunun mümkün olduğunu düşünüyor musun? Bunun çok kısa sürede mümkün olduğunu düşünüyor musunuz (diyelim <5 milisaniye)?


Muhtemelen bu bir cevap olabilir: edaboard.com/thread197897.html

Evet, ama bu farklı bir yöntem değil mi? IMHO, daha kolay ama çok daha az güvenilir çünkü harmonik ve harmonik sesleri ayırt edemiyor ...
Dinaiz

Yanıtlar:


6

Açıkladığınız şey , bu Stanford CCRMA belgesinde listelendiği gibi Harmonik Ürün Spektrumu perde tahmini yöntemine çok benzer .

Bir FFT size "sonsuz genlik toplamı" vermez, ancak FFT'nin uzunluğuna bağlı olarak sınırlı sayıda sonuç kutusu verir.

5 mS, 200 Hz notanın yalnızca 1 periyodu ve 200 Hz'nin altındaki bir periyodun sadece bir kısmıdır. Müzikal perde tanıma genellikle perdeli bir sesin periyodikliğinin çok sayıda periyodunu duymayı veya analiz etmeyi gerektirir. Ve birçok müzik G2'nin altındaki notları kullanır. Yeterli uzunlukta bir verileriniz varsa, bu verilerden bir adım tahmini hesaplamak, modern bir PC veya mobil cihazda milisaniye yerine yalnızca mikrosaniye civarında olabilir.


İyi bir nokta. Ancak zaten 2F ve 3F'niz varsa, gerçekten F'ye ihtiyacınız yoktur, değil mi? Örneğinizde, 2F = 400hz ve 3F = 600hz, yani muhtemelen 5 ms'lik bir süreye sahip olacak kadar ses duymadan bile F'nin 200 olduğunu öğrenebilirsiniz, değil mi? Ayrıca dalgacık dönüşümünü duydum. Bunu yapmanın daha iyi bir yöntemi olduğunu düşünüyor musunuz?
Dinaiz

@Dinaiz: Eğimli sesin kaynağına ve aşırı ton frekanslarının bu parçalarının gerçekten durağan olup olmadığına bağlıdır. Dalgacıklar tamamen ayrı bir soru.
hotpaw2

Dolayısıyla bu yöntem f0'yi "neredeyse gerçek zamanlı" olarak bulmak için uygun değildir. Mevcut sanat durumunda, herhangi bir enstrümanla birkaç milisaniyeden daha kısa bir sürede f0'ı bulmak mümkün mü yoksa kayıp bir sebep mi ve görevimi bırakmalıyım? : D
Dinaiz
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.