Sıfır dolgulu bir FFT'nin sadece düşük katsayıları nasıl verimli bir şekilde hesaplanır


14

Ben sıfır bir dizilim 4N, bir FFT yapar ve sadece üretilen 4N dışında en düşük frekans N noktaları kullanan bir algoritma var.

Bu çok boşa giden bir iş gibi görünüyor, bunun nasıl daha hızlı yapılabileceği hakkında bir fikir var mı?


@Dilip. FFTW veya IMKL kütüphanelerini kullanacağım. Tabii ki kissfft kütüphanemi kullanabilirim, ama diğerlerine karşı hızlı bir dezavantajla başlıyor
Mark Borgerding

2
Sıklıkta decimation demek istediğim için yanıtladığınız yorumu sildim, ancak bunun yerine zamanında decimation yazdım. Ancak buradaki kelebek diyagramına bakın . FFT'nin çok sayıda sıfırı hesaba katması ve karşılık gelen çarpmaları atlaması için ilk iki aşama için bir kod yazarsanız, giriş vektörlerinin bulunduğu N -FFT'ler için FFT kitaplığı alt rutinini 4 kez çağırabilirsiniz. dolu". Tabii ki, sadece gerekmez N / 4 , her altprogram çağrısından çıkışların. 4N4NN/4
Dilip Sarwate

Yanıtlar:


2

Sadece birkaç bölmeniz varsa, aşağıdakiler sizin için çok verimli olabilir:
1. İhtiyacınız olan her frekansta DFT'yi yapın.
2. Söz konusu her frekans için Goertzel algoritmasını kullanın.


N4N2N+4N

Haklısın, soruyu okurken detayları bir şekilde özledim. Ben cevaplarken "Gee, kaç tane kutu istediğini bilmek güzel olurdu ..." diye düşündüm. Cevap vermeden önce soruyu tekrar okumalıyım.
Jacob

2

Sıfır dolgu, 4X uzunluğa kadar, daha uzun FFT'yi hesaplar ve daha sonra sadece alt 1/4 bölmeleri kullanarak, orijinal uzunluk FFT'nin pencereli Sinc enterpolasyonu ile hemen hemen aynı sonuçlar üretir.

Bu yüzden sadece orijinal FFT uzunluğunu kullanın ve uygun bir pencere genişliğine sahip 3 fazlı Sinc enterpolasyon çekirdeğini kullanarak enterpolasyon yapın.


0

Zaman alanındaki sıfır doldurma size daha yüksek frekans çözümü sağlar, ancak yeni bilgi vermez, bu nedenle frekans alanında esasen enterpolasyon sağlar. Sinyallerinizin doğasına ve gereken hassasiyete bağlı olarak, düzenli bir N noktası FFT'si ile ek frekans noktaları elde edebilir ve uygun bir enterpolasyon (doğrusal, spline, pchip, sinc vb.) Yapabilirsiniz.


x(z)=i=0N1xizixiN1Nαn,0nN1α=exp(j2π/N)NNXn=x(αn)x(z)Nx(z)βn,0nN1β=exp(j2π/4N)N

β4=αx(β4k)x(β4k)=x(αk)

Daha büyük FFT yapmaktan daha hızlı bir şekilde iyi bir enterpolasyon yapmanın zor olacağını düşünüyorum.
Mark Borgerding

128 nokta FFT ve 12800Hz örnekleme hızına sahip olduğunuzu varsayalım. 128 noktalı bir FFT değeri 0Hz, 100Hz, 200 Hz, 300Hz, vb. Değer verir. Sıfır dolgusunun yaptığı, frekans çözünürlüğünü 0 Hz, 25Hz, 50 Hz, 100Hz vb. Değerine yükseltmektir. Bu bir enterpolasyon problemi olarak görülebilir. Benim için matematiksel olarak kesinleştirilmiş 128. dereceden dairesel bir intperpolasyon yapmanız gerekiyor. Bu kesinlikle zahmete değmez, ancak uygulamaya ve hassasiyete bağlı olarak çok daha düşük bir sipariş enterpolasyonu yeterli olacaktır
Hilmar
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.