DFT veya FFT'siz bir frekans bulmak için bir algoritma var mı?


34

Bir gitar alıcısı için Android uygulama mağazasında bakıyordum. Diğer uygulamalardan daha hızlı olduğunu iddia eden bir tuner uygulaması buldum. DFT'yi kullanmadan frekansı bulabileceğini iddia etti (Keşke bu şartnamede hala URL olsaydı).

Bunu hiç duymamıştım. DFT veya FFT algoritmasını kullanmadan bir ses sinyali alabilir ve frekansı hesaplayabilir misiniz?

Yanıtlar:


29

FFT aslında bir tuner yapmak için harika bir yol değil. FFT doğası gereği sınırlı bir frekans çözünürlüğüne sahiptir ve zaman penceresini aşırı derecede uzun hale getirmeden çok küçük frekans değişikliklerini tespit etmek kolay değildir; bu da onu hantal ve durgun hale getirir.

Daha iyi çözümler faz kilitli döngüler , gecikmeli kilitli döngüler , otomatik korelasyon, sıfır geçiş tespiti ve takibi, maksimum veya min tespiti ve takibi ve kesinlikle bu metotların akıllı kombinasyonuna dayanabilir.

Ön işleme her zaman yardımcı olur.


5
Bir FFT'nin küçük frekans değişikliklerini tespit edip etmemesi, onun uzunluğunda doğal değildir, ancak sinyal-gürültü oranına bağlıdır. Yeterince düşük gürültü ve parazit verildiğinde, FFT sonuçlarının enterpolasyonu kolayca alt kutu tekli frekans çözünürlüğü üretebilir.
hotpaw2


12

Bir FFT, spektrum frekans tepe noktasını veya tepe noktalarını (FFT bölmesi boyutuyla ölçülür) bildirir; Algılanan perde frekansının bir FFT spektrumundan tamamen eksik olması mümkündür.

En basit gitar tunerlerden bazıları sadece düşük geçişli veya bant geçişli filtreleme kullanmış ve sıfır geçişler arasındaki süreyi ölçmüştür. Karşılıklı bir frekans tahmini verir.

Otokorelasyon, başka bir yaygın perde tahmin yöntemidir; ve kayan korelasyon veya diğer kendi kendine benzerlik ölçümleri, kayan ASDF (kare fark), AMDF (ortalama fark), doğrusal olmayan desen eşleştiriciler, yalnızca sınırlı bir gecikme aralığı için uyarlamalı kontrol, gecikme enterpolasyonu, pencereleme ve adaptif pencere seçimi, çeşitli ağırlıklar ya da çoklu potansiyel gecikme geçmişi dizileri, vb. arasından seçim yapmak için karar teorisini kullanma, vb.

Diğer olasılıklar arasında PLL'ler, filtrelenmiş kareleme demodülatörleri, filtrelenmiş Hilbert dönüşümleri vb.

Ancak, bazı DSP filtreleme ve demodülasyon yöntemlerinin, sorunuza bir cevap olarak sığabilecek ya da sığmayabilecek pencereli bir DFT'nin 1 bölmesini yapmaya neredeyse hesaplamalı olduğunu unutmayın.


8

Pitch tespiti, çok yönlü ve ilginç şekillerde yapılabilir. Bunu yapmanın bir yolu otomatik korelasyon kullanmaktır . Bu makale nasıl kullanılabileceğine bir örnek vermektedir. Oto-korelasyon, 1-bit bir korelatör kullanılarak gülünç bir şekilde basitleştirilebilir (bir nedenden dolayı bununla ilgili iyi bir kağıt bulamadım). Yani teorik olarak, zift olabilir hızlı FFT ile daha algılanabilir, ama olmadan çok daha hassas olacağını şüphe gerçekten akıllı önceden işlenmesi.


Bence bağlantı koptu? ...
Spacey

Hayır, hepsi işe yarıyor. Daha yeni kontrol ettim.
Fonon

7

Ayrıca algoritmik olarak tanımlanmış nispeten yeni Hilbert-Huang Transform'a (HHT) bakınız. Uygulamanızla ilgili olabilecek durağan olmayan doğrusal olmayan sinyalleri kullanabilir.


Size bulduğumda bu bir mücevherdi, ancak size fourier ayrışması vermedi, ancak bunun yerine anlık frekans ayrışmasını sağladı.
Spacey

Gerçek hayattaki çoğu sinyal biraz durağandır, yani genlik ve sıklıkta biraz değişir. HHT, bu değişikliklere karşı daha az hassastır ve bu nedenle, bu sinyalleri, parçaların altta yatan fiziksel olaylarla daha yakından ilgili olduğu daha doğal bir şekilde ayrıştırır.
Nordlöw



2

Gerçekte, otokorelasyon matrisinin özvektörlerine bakan sözde spektrumunu kullanarak bir sinyalin frekansını hesaplayabilirsiniz. Temel olarak sinyalinizi gürültüye ve sinyal alt uzaylarına ayırır. Oradan, onun spektrumunu bulabilirsiniz. (Ayrıca sınırlayabilir ve kontrol etmesi için bir dizi frekans verebilirsiniz). Aynı zamanda bağışıklık oldukça güzel. Tabii ki, bu parametrik bir yöntemdir, DFT gibi parametrik olmayan bir yöntemdir.


Görünüşe göre bu FFT kullanıyor? mathworks.com/help/toolbox/signal/ref/peig.html
Endolit

1
@endolith İlgili FFT'ler olmadan hesaplayabilirsiniz. Korelasyon matrisinden özvektörleri ve sonra gürültü alt uzayını elde edersiniz. Sonra, kendi frekans vektörünüzü yansıtmak üzere inşa edebilirsiniz, böylece FFT kullanılmaz.
Spacey

1

Her şey, hangi platformu işlemek istediğinize bağlı, basit bir devreye ihtiyaç duyuyorsanız, sinyali kazançla çıkarmanızı ve kare bir dalga haline getirmenizi ve zamanlayıcıyı kullanarak bir mikroişlemci ile süreyi ölçmenizi öneririm.

Ancak, sinyal işleme konusunda şık olmak istiyorsanız, MUSIC yöntemine göz atın:

http://en.wikipedia.org/wiki/Multiple_signal_classification

Umarım yardımcı olur


0

DFT / FFT kullanmadan birçok perde tahmin yöntemi vardır, bunlardan bazıları MUSIC yöntemi de dahil olmak üzere bu makalede listelenmiştir: https://ieeexplore.ieee.org/abstract/document/6521410/ Bu makaledeki simülasyon sonuçları temel frekans çok düşük olduğunda, kesin NLS yönteminin listelenenler arasında diğerlerinden daha iyi performans gösterdiğini

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.