Belirli bir frekans aralığı için FFT.


11

Bir sinyali frekans alanına dönüştürmek istiyorum. İstenen frekans aralığı 0.1 Hziçin 1 Hzve frekans çözünürlüğü 0.01 Hz.

Örnekleme oranı ile 30 HzFFT frekans bileşenlerini 15 Hz'e kadar verir. Örnekleme oranını yükseltmek daha iyi frekans çözünürlüğü sağlar. Ancak, FFT daha geniş frekans aralığı sağlar. Benim durumumda, ben sadece istiyorum 0.1 Hziçin 1 Hz, FFT kadar verir 15 Hz(Ekstra hesaplama).

Sorum şu ki, belirli bir frekans aralığı ve yüksek çözünürlük ile bir sinyalin frekans alanını hesaplayabilmem için standart bir yol var mı?


2
senin gibi sesler Yakınlaştırma FFT istiyorum arc.id.au/ZoomFFT.html
Endolit

Örnekleme hızı 2 Hz ve süresi 100 sn olan standart bir DFT yaparsanız, 0,01 Hz çözünürlüklü 0 ila 1 Hz arasında bir frekans bandı alırsınız. Örneklerinizin sadece% 10'u ilgilendiğiniz bandın dışında olacaktır. Bu nispeten küçük hesaplamanın verimliliğini artırmak için "standart olmayan" bir algoritmanın detaylarını incelemeye gerçekten değer mi?
Foton

Kısıtlama, sürenin mümkün olduğunca kısa olması gerektiğidir. 100'ler çok uzun. Yaklaşık 10+ s ihtiyacımız var
NcJie

Yanıtlar:


5

Bence probleminize en iyi çözüm chirp-DFT kullanmaktır. Belirli bir frekans aralığı için bir büyüteç gibidir. DFT'nin (FFT'siz) doğrudan uygulanmasından daha etkilidir, çünkü bir FFT algoritması bazı uygun ön ve son işlemlerle kullanılabilir. Temel olarak sinyalinizi bir cıvıltı sinyali ile modüle etmeniz, ardından bir FFT kullanarak filtrelemeniz ve daha sonra istenen frekans cevabını almak için sinyalinizi cıvıltı-modüle etmeniz gerekir. Chirp-DFT'nin nasıl uygulanacağına ilişkin ayrıntılar için buraya ve buraya bakın .


2

Frekans çözgü kullanma olasılığı da vardır (aynı zamanda yüksek frekanslarda daha düşük çözünürlük pahasına aynı boyuttaki FFT için ilgi frekansınızda gelişmiş çözünürlük elde etmeniz için bir büyüteç olarak da çalışabilirsiniz). Ancak, FFT boyutu küçülmediği ve frekans eğrilmesi ucuz olmaktan uzak olduğu için hiçbir MIPS tasarrufu yapmazsınız.

Sadece FFT'deki belirli kutuları hesaplamak (ve böylece MIPS'i kaydetmek) istiyorsanız, bunu yapmak için birkaç yöntem vardır. Örneğin, kayan DFT. Bu makaledeki referanslar çok güzel bir açıklama vermektedir http://www.comm.utoronto.ca/~dimitris/ece431/slidingdft.pdf . Ayrıca goertzel algo'nun benzer bir şey yaptığını düşünüyorum ama bilmiyorum.

Sonra FFT'ing'den önce altörnekleme seçeneği var. Bu muhtemelen bazı MIPS tasarruf sağlayacaktır.

Düzenleme: Sadece Goertzel algoritması ile ilgili yorumu netleştirmek için yararlı olmuyor. Değerleri doğrudan bu wiki sayfasının altındaki ifadeye http://en.wikipedia.org/wiki/Goertzel_algorithm takarak , gerekli FFT boyutu 128'den büyük olduğunda Goertzel yaklaşımı bir FFT'den daha karmaşık olacaktır. (FFT boyutunun 2 faktörü ve sayı tabanı-2 uygulaması olduğunu varsayarsak).

Bununla birlikte, Goertzel lehine dikkate alınması gereken başka faktörler de vardır. Sadece wiki sayfasını belirtmek için: "FFT uygulamaları ve işleme platformlarının göreceli performans üzerinde önemli bir etkisi vardır. Bazı FFT uygulamaları [9], anında katsayıları üretmek için dahili karmaşık sayı hesaplamaları yapar ve maliyetlerini önemli ölçüde artırır. FFT ve DFT algoritmaları daha iyi sayısal verimlilik için önceden hesaplanmış katsayı değerleri tablolarını kullanabilir, ancak bu, harici bellekte arabelleğe alınan katsayı değerlerine daha fazla erişim gerektirir; bu da sayısal avantajın bir kısmını karşılayan önbellek çekişmesine neden olabilir ."

"Her iki algoritma da karmaşık değerli girdi verileri yerine gerçek değerli girdi verileri kullanıldığında yaklaşık 2 verimlilik faktörü kazanır. Bununla birlikte, bu kazançlar Goertzel algoritması için doğaldır, ancak gerçek dönüşüm için uzmanlaşmış belirli algoritma varyantları kullanılmadan FFT için elde edilemez. değerli veriler. "


1
Kayan DFT, giriş sırasının çok uzun olduğu ve spektrumun düzenli aralıklarla yeniden hesaplanması gereken gerçek zamanlı spektrum analizi bağlamında gerçekten yararlıdır. Goertzel algoritması, yalnızca birkaç DFT değerinin hesaplanması gerektiğinde çok etkilidir. İstenilen sayıda frekans noktası çok büyük olduğu için, verilen problemi çözmek için yararlı olmaz.
Matt L.

Teşekkürler @ MattL. Goertzel Algoritma zayıflığına işaret etmek için.
NcJie

1

Δf=fsN-
fsN-N-

N-s(t)fcfbx(n)s(t)x(n)=s(n/fs)

x~(n)=x(n)e-j2πk0/N-
k0=fc/fsfbfb+fcf~sfbx~(n)M=fs/fbN-

s(t)M

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.