Fråga:
Vad är sambandet mellan FFT-längd och frekvensupplösning?
Kellenjb
2011-04-01 20:23:03 UTC
view on stackexchange narkive permalink

Om jag har samplat en signal med hjälp av korrekta samplingsmetoder (Nyquist, filtrering osv.) Hur relaterar jag längden på min FFT till den resulterande frekvensupplösningen jag kan få?

Gillar jag om jag har en 2.000 Hz och 1.999 Hz sinusvåg, hur skulle jag bestämma längden på FFT som behövs för att exakt berätta skillnaden mellan dessa två vågor?

Sju svar:
Mark
2011-04-01 21:33:03 UTC
view on stackexchange narkive permalink

Frekvensupplösningen beror på förhållandet mellan FFT-längden och samplingsfrekvensen för insignalen.

Om vi ​​samlar in 8192 sampel för FFT kommer vi att ha:

$$ \ frac {8192 \ \ text {sampel}} {2} = 4096 \ \, \ text {FFT-lagerplatser} $$

Om vår samplingsfrekvens är 10 kHz, är Nyquist-Shannon samplingssatsen säger att vår signal kan innehålla frekvensinnehåll upp till 5 kHz. Då är vår frekvensupplösning:

$$ \ frac {5 \ \ text {kHz}} {4096 \ \, \ text {FFT-lager)} \ simeq \ frac {1.22 \ \ text { Hz}} {\ text {bin}} $$

Det här är kanske det enklaste sättet att förklara det begreppsmässigt men förenklat: din pappersupplösning är bara \ $ \ frac {f_ {samp}} {N } \ $, där \ $ f_ {samp} \ $ är insignalens samplingsfrekvens och N är antalet FFT-punkter som används (samplängd).

Vi kan se av ovanstående att för att bli mindre FFT-fack kan vi antingen köra en längre FFT (det vill säga ta fler prover i samma takt innan vi kör FFT) eller minska vår samplingsfrekvens.

Fångsten :

Det finns alltid en avvägning mellan tidsupplösning och frekvensupplösning.

I exemplet ovan måste vi samla in 8192 prover innan vi kan köra FFT , som vid sampling vid 10 kHz tar 0,82 sekunder.

Om vi ​​försökte få mindre FFT-lager genom att köra en längre FFT skulle det ta ännu längre tid att samla in de prover som behövs.

Det kan vara OK, det kanske inte. Den viktiga punkten är att den ökade frekvensupplösningen vid en fast samplingshastighet minskar tidsupplösningen. Ju mer exakt din mätning i frekvensdomänen är, desto mindre exakt kan du vara i tidsdomänen. Du tappar faktiskt all tidsinformation inuti FFT-längden.

I det här exemplet, om en 1999 Hz-ton börjar och slutar under första hälften av 8192-provet FFT och en 2002 Hz-ton spelas under andra halvan av fönstret ser vi båda, men de verkar ha inträffat samtidigt.

Du måste också överväga bearbetningstid. En 8192-punkts FFT tar anständig processorkraft. Ett sätt att minska detta behov är att minska samplingsfrekvensen, vilket är det andra sättet att öka frekvensupplösningen.

I ditt exempel, om du tappar samplingsfrekvensen till något som 4096 Hz, behöver du bara en 4096-punkts FFT för att uppnå 1 Hz-soptunnor * 4096 Hz, då behöver du bara en 4096-punkts FFT för att uppnå 1 hz-soptunnor och kan fortfarande lösa en 2 kHz-signal. Detta minskar FFT-fackets storlek, men minskar också signalens bandbredd.

I slutändan med en FFT kommer det alltid att finnas en avvägning mellan frekvensupplösning och tidsupplösning. Du måste utföra lite balans för att nå alla mål.

med rubriktaggar och lite formatering kan det här inlägget gå från bra till bra. Du berörde allt jag ville notera, och mycket bra, men hur inlägget är formaterat kommer färre människor att läsa det eftersom dess längd är oöverkomlig, om du ger rubriker med varje avsnitt av det du diskuterar kommer folk att hoppa till den saftiga biten som passar dem och ditt antal + 1 kommer att öka mycket. Inte från mig självklart, eftersom du redan tjänat det.
@kurtuk Jag spottar den här i en rusning, jag rensar upp formateringen när jag har lite ledig tid (eller gärna redigera den om du vill).
@kortuk,-namnet börjar med ett 'o'. Jag antog att du hade, jag delade bara min åsikt, både för dig om du inte redan visste det, men mer för samhället i stort.
Observera att du inte behöver beräkna FFT. Om du bara vill veta några soptunnor är det billigare att beräkna DFT för just dessa soptunnor än att köra en optimerad FFT som beräknar alla soptunnor samtidigt genom att dela många av operationerna.
Det är också värt att notera att en liknande avvägning mellan frekvens och tidsdomän gäller för analoga och IIR-filter.
jpc
2011-04-01 20:53:09 UTC
view on stackexchange narkive permalink

Grundläggande FFT-upplösning är \ $ f_s \ över N \ $, där \ $ f_s \ $ är samplingsfrekvensen.

Möjligheten att skilja mellan två mycket nära varandra signaler beror starkt på relativa amplituder och fönsterfunktion används.

Du kanske tycker att spela med Baudline-signalanalysatorn är ett bra sätt att utveckla lite intuition i den här frågan - och nej, att köra några FFT och plotta ett spektrum i taget i Matlab eller Python / Numpy är egentligen inte detsamma.

EDIT: Det finns också ett knep för att lägga in ingångarna med nollor och ta en större FFT. Det förbättrar inte din differentieringsförmåga men kan göra spektrumet mer läsbart. Det är i grunden ett trick som liknar antialiasing i vektorgrafik.

Är jag den enda som inte ser Latex-koden visas korrekt formaterad?
@stevenvh Fungerar inte för mig också.
Funkar för mig. Latexen är bara två platser.
Fast (redan under en tid). Firefox: s NoScript-tillägg blockerade mathjax.org.
supercat
2011-05-10 21:11:36 UTC
view on stackexchange narkive permalink

Det är värt att notera att en FFT är ett alternativ till att beräkna ett antal separata par av summor (k = 0..prov_längd-1) av prov [k] * SineRefWave [j] [k] och prov [j] * CosRefWave [j] [k], för alla j upp till halva provlängden. Om man behöver amplitudavläsningar vid alla dessa frekvenser beräknar en FFT dem alla under O (NlgN) -tid, medan beräkning av dem individuellt skulle ta O (N ^ 2) -tid. Å andra sidan, om man bara behöver amplitudavläsningar vid ett fåtal frekvenser, är det ofta bättre om man bara beräknar dem individuellt, speciellt om man använder en processor eller DSP som effektivt kan beräkna den summan.

Det är också värt att notera att medan en FFT med t.ex. ett samplingsfönster på 20 ms kommer inte att kunna skilja mellan en enda 1975Hz-ton eller en kombination av frekvenser (1975-N) Hz och (1975 + N) Hz för N<25, det kan användas för att mäta isolerade frekvenser med noggrannhet finare än provtagningsfönstret om det inte finns något annat spektralt innehåll i närheten. En ensam 1975Hz-frekvens kommer att ta upp lika mycket i lådorna 1950Hz och 2000Hz, liksom en kombination av 1974Hz- och 1976Hz-toner. En isolerad 1974Hz-ton skulle dock ta upp starkare i 1950Hz-facket än i 2000Hz-facket, och en 1976Hz-ton skulle ta upp starkare i 2000Hz-facket.

chaohuang
2013-01-26 03:54:24 UTC
view on stackexchange narkive permalink

Frekvensupplösningen beror inte på längden på FFT, utan längden på den totala samplingstiden T, dvs det är 1 / T, vilket också är den lägsta frekvenskomponenten du erhållit.

Obs, zero padding ökar inte frekvensupplösningen; DFT för nollpolstringssignalen är bara en bättre approximation av den ursprungliga signalens DTFT.

för att summera, betyder det att den lägsta frekvensen bara ges av \ $ 1 / T \ $ och den maximala frekvensen är samplingsfrekvens / 2?
Jason Kouvdos
2020-06-08 23:45:59 UTC
view on stackexchange narkive permalink

Jag ska försöka förklara detta på ett annat sätt. Icke 2 ^ n-nummer kan hjälpa till. Först och främst är det bra att komma ihåg vad FFT (DFT, i princip) gör: det multiplicerar en -fönster- signal med den grundläggande cosinus (och sinus) och nästa N-övertoner av den som algoritm skapar. I en digital dator skapar algoritmen cos (2 pi tn) [+ j sin (2 pi nt) men låt oss lämna sinus åt sidan], där t (och inte n - n är det harmoniska order) är antalet lagerplatser. Detta är den viktigaste delen: i en digital dator kvantiseras t, tiden, i de tillhandahållna soptunnorna . Så datorn beräknar cosinus för a-skalartidsvärdet, x harmonisk ordning x 2 pi.

Låt oss anta en samplingsfrekvens på 1 kHz; det betyder att du får ett värde (spänning, vanligtvis) var 1 ms. Om vi ​​sätter soptunnorna till 200, har den längsta cosinus som skapas en tidsmässig längd på 200 x 0,001 = 0,2 s, så dess period är 0,2 s, så dess frekvens är 5 Hz. Detta är cosinus som bara har en topp och ett tråg i hela soptunnorna; det är f_min. Nästa överton kommer att ha två toppar och två tråg, nästa överton tre av vardera etc. Övertonerna kommer att vara massor av 5, 10, 15 etc. Hz.

Om även om vi hade valt 500 lager, skulle den grundläggande kosinusen utvidgas mer: den skulle ha en tidslängd på 500 x 0,001 = 0,5 s => f_min = 2 Hz. Så i det sistnämnda fallet byggs kosinoserna upp som en serie av 2,4,6,8 ... Vi ser alltså att ökande antal lagerplatser ökade algoritmens upplösning.

Upplösningen ökades eftersom algoritmens undersökningsverktyg , cosinuskoefficienterna (och sinus), är tätare. Ingångssignalen påverkas endast av samplingshastigheten.

Om vi ​​inverterar multiplikationerna och konverterar perioderna till frekvenser, kommer typerna av det första inlägget ut.

Rainald62
2016-02-15 19:02:53 UTC
view on stackexchange narkive permalink

Om du känner till intervallet för möjliga ingångsfrekvenser och intervallet är smalt kan du använda undersampling för att minska antalet samplingar och tiden för att beräkna FFT. Med 256 sampel och en samplingsfrekvens på 256 Hz får du den önskade 1-Hz-upplösningen och en aliasfri bandbredd på 128 Hz.

hamid
2015-11-09 19:10:13 UTC
view on stackexchange narkive permalink

titta på den här bilden. dess tydliga. samband mellan fs och fft-upplösning

enter image description here

Det är inte helt klart från den här bilden vad som händer.(Det hjälper inte att bilden inte är på engelska.) Vad lägger detta till som de andra svaren inte har nämnt?


Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 2.0-licensen som det distribueras under.
Loading...