FFT uzunluğu ve frekans çözünürlüğü arasındaki ilişki nedir?


67

Uygun örnekleme yöntemlerini kullanarak bir sinyali örneklediysem (Nyquist, filtering, vb.), FFT'imin uzunluğunu elde edebileceğim frekans çözünürlüğü ile nasıl ilişkilendiririm?

2.000 Hz ve 1.999 Hz sinüs dalgam varsa, bu iki dalga arasındaki farkı doğru bir şekilde söylemek için gereken FFT uzunluğunu nasıl belirlerim?

Yanıtlar:


81

Frekans çözünürlüğü, FFT uzunluğu ile giriş sinyalinin örnekleme hızı arasındaki ilişkiye bağlıdır.

FFT için 8192 örnek toplarsak, şunları yapacağız:

8192 samples2=4096 FFT bins

Örnekleme hızımız 10 kHz ise, Nyquist-Shannon örnekleme teoremi, sinyalimizin 5 kHz'e kadar frekans içeriğini içerebileceğini söyler. Ardından, frekans kutusu çözünürlüğümüz:

5 kHz4096 FFT bins1.22 Hzbin

Bu, kavramsal olarak açıklamak için kolay bir yol olabilir, ancak basitleştirilmiş: kutu çözünürlüğünüz sadece ,fsbirmpgiriş sinyalinin örnekleme oranı ve N kullanılan FFT noktaları (numune uzunluğu) sayısıdır.fsampNfsamp

Yukarıdan görüyoruz ki, daha küçük FFT kutuları almak için daha uzun bir FFT çalıştırabiliriz (yani, FFT'yi çalıştırmadan önce aynı oranda daha fazla örnek alabilir ) veya örnekleme oranımızı düşürebiliriz.

Yakalayış:

Geçici çözünürlük ve frekans çözünürlüğü arasında her zaman bir denge vardır.

Yukarıdaki örnekte, 10 kHz'de örnekleme yaparken 0.82 saniye süren FFT'yi çalıştırmadan önce 8192 örnek toplamamız gerekir.

Daha uzun bir FFT çalıştırarak daha küçük FFT kutuları almaya çalıştığımızda, gerekli örnekleri toplamak daha uzun sürer.

Tamam olabilir, olmayabilir. Önemli olan nokta, sabit bir örnekleme hızında, frekans çözünürlüğünün arttırılmasının zamansal çözünürlüğü düşürmesidir. Bu, frekans alanında ölçümünüz ne kadar doğru olursa, zaman alanında o kadar doğru olamazsınız. FFT uzunluğu içindeki tüm zaman bilgilerini etkili bir şekilde kaybedersiniz.

Bu örnekte, 8192 örnek FFT'nin ilk yarısında 1999 Hz tonu başlar ve durursa ve pencerenin ikinci yarısında 2002 Hz tonu çalınırsa, ikisini de görürüz, ancak aynı şekilde meydana gelmiş gibi görünürler. saati.

Ayrıca işlem süresini de düşünmelisiniz. 8192 puanlık bir FFT düzgün bir işlem gücü alır. Bu ihtiyacı azaltmanın bir yolu, frekans çözünürlüğünü arttırmanın ikinci yolu olan örnekleme oranını azaltmaktır.

Örneğinizde, örnekleme oranınızı 4096 Hz gibi bir şeye düşürürseniz, o zaman sadece 1 Hz kutu * 4096 Hz elde etmek için 4096 puanlık bir FFT'ye ihtiyacınız olur, o zaman sadece 1hz kutu elde etmek için 4096 noktalık bir FFT'ye ihtiyacınız olur ve yine de 2 khz sinyal. Bu, FFT kutusu boyutunu azaltır, ancak sinyalin bant genişliğini de azaltır.

Sonuçta bir FFT ile her zaman frekans çözünürlüğü ve zaman çözünürlüğü arasında bir denge olacaktır. Tüm hedeflere ulaşmak için bir miktar dengeleme eylemi gerçekleştirmelisiniz.


başlık etiketleri ve bazı biçimlendirme ile bu yazı iyi dan büyük gidebilir. Not etmek istediğim her şeye dokundun ve çok iyi, ama yazının biçimlendirilme şekli, daha az insanın uzunluğu yasak olduğu için onu okuyacak Bu onlara uygun ve + 1'lerin sayısı çok artacaktır. Elbette benden değil, zaten kazandığın gibi.
Kortuk

@kurtuk Bunu aceleyle tükürürüm, biraz zamanım olduğunda biçimlendirmeyi temizlerim (ya da isterseniz düzenlemekten çekinmeyin).
Mark

1
@kortuk, isim 'o' ile başlar. Var olduğunu sanmıştım, sadece fikrimi paylaşıyordum, ikiniz için henüz bilmediyseniz, hem de toplum için daha fazlası.
Kortuk

1
FFT'yi hesaplamanız gerekmediğini unutmayın. Yalnızca birkaç kutu bilmek istiyorsanız, bu kutuların DFT'sini hesaplamak, işlemlerin çoğunu paylaşarak aynı anda tüm depoları hesaplayan optimize edilmiş bir FFT'yi çalıştırmaktan daha ucuzdur.
Chris Stratton

Benzer bir frekans / zaman alanı değişiminin analog ve IIR filtreleri için de geçerli olduğuna dikkat etmek önemlidir.
Caleb Reister

10

fsNfs

Çok yakın mesafeli iki sinyali ayırt edebilme yeteneği, kuvvetli bir şekilde göreceli genliklere ve kullanılan pencereleme fonksiyonuna bağlıdır.

Baudline sinyal analizörü ile oynamanın , bu konuda bazı sezgiler geliştirmek için iyi bir yol olduğunu görebilirsiniz - ve hayır, bazı FFT'leri çalıştırmak ve Matlab veya Python / Numpy'de bir seferde bir spektrum çizmek gerçekten aynı değildir.

EDIT: Girdiyi sıfırlarla doldurmak ve daha büyük bir FFT almak için de bir hile var. Farklılaşma yeteneğinizi geliştirmeyecek, ancak spektrumu daha okunaklı hale getirebilir. Temel olarak vektör grafiklerinde antialiasing'e benzer bir numaradır.


Lateks kodunu doğru şekilde biçimlendirilmiş olarak görmeyen tek kişi ben miyim?
stevenvh

@ stevenvh Benim için de çalışmıyor.
teras

Benim için çalışıyor. Lateks sadece 2 yer.
Kortuk

2
Sabit (zaten bir süredir). Firefox'un NoScript eklentisi mathjax.org'u engelledi.
stevenvh

3

Bir FFT'nin, Örnek [k] * SineRefWave [j] [k] ve Sample [j] * CosRefWave [j] 'in birkaç ayrı toplam çiftinin (k = 0..sample_length-1) hesaplanmasına alternatif olduğuna dikkat etmek önemlidir. ] [k], tüm j için örnek uzunluğunun yarısına kadar. Eğer bir kişi bütün bu frekanslarda genlik okumalarına ihtiyaç duyuyorsa, bir FFT hepsini O (NlgN) zamanda hesaplar, oysa ayrı ayrı hesaplamak O (N ^ 2) zaman alır. Öte yandan, eğer sadece birkaç frekansta genlik değerlerine ihtiyaç duyulursa, özellikle de bir kişi veya özellikle de bu toplama yöntemini verimli bir şekilde hesaplayabilecek bir işlemci veya DSP kullanıyorsanız, bunları tek tek hesaplamak daha iyi olacaktır.

Ayrıca, örneğin 20ms örnekleme penceresi olan bir FFT, 1975Hz'lik tek bir ton tonu veya N <25 için (1975-N) Hz ve (1975 + N) Hz frekansların kombinasyonunu ayırt edemeyecekken, Yakınlarda başka bir spektral içerik yoksa izole edilmiş frekansları, örnekleme penceresinden daha hassas bir hassasiyetle ölçmek için kullanılabilir. Yalnız bir 1975Hz frekansı, 1974Hz ve 1976Hz ton kombinasyonunun yaptığı gibi, 1950Hz ve 2000Hz'lik kutularda eşit olarak toplanacaktır. Bununla birlikte, izole edilmiş bir 1974Hz tonu, 1950Hz selesinde 2000Hz selesinden daha güçlü bir şekilde toplanacak ve 1976Hz tonu 2000Hz selesinde daha güçlü bir şekilde toplanacaktır.


1

Frekans çözünürlüğü FFT'nin uzunluğuna bağlı değildir, ancak toplam örnekleme süresinin (T) toplam uzunluğuna bağlıdır, yani elde ettiğiniz en düşük frekans bileşeni olan 1 / T'dir.

Not, sıfır doldurmanın frekans çözünürlüğünü artırmadığını; Sıfır doldurma sinyalinin DFT'si yalnızca orijinal sinyalin DTFT'sinin daha iyi bir yaklaşımıdır.


0

Mümkün olan giriş frekanslarının aralığını biliyorsanız ve aralık darsa, örnek sayısını ve FFT hesaplamak için gereken zamanı azaltmak için örnekleme uygulayabilirsiniz. 256 örnek ve 256 Hz örnek frekansı ile, istenen 1-Hz çözünürlüğü ve takma adsız bir 128 Hz bant genişliği elde edersiniz.


-3

bu resme bak bu açık. fs ve fft çözünürlüğü arasındaki ilişki

görüntü tanımını buraya girin


5
Neler olup bittiğinden bu resimden net değil. (Resmin İngilizce olmadığına yardımcı olmaz.) Bu, diğer cevapların bahsetmediği neyi ekliyor?
Greg d'Eon
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.