Qual è la relazione tra lunghezza FFT e risoluzione in frequenza?


67

Se ho campionato un segnale usando metodi di campionamento adeguati (Nyquist, filtraggio, ecc.) Come posso mettere in relazione la lunghezza del mio FFT con la risoluzione di frequenza risultante che posso ottenere?

Come se avessi un'onda sinusoidale da 2.000 Hz e 1.999 Hz, come determinerei la lunghezza della FFT necessaria per distinguere con precisione la differenza tra queste due onde?

Risposte:


81

La risoluzione della frequenza dipende dalla relazione tra la lunghezza FFT e la frequenza di campionamento del segnale di ingresso.

Se raccogliamo 8192 campioni per la FFT, avremo:

8192 samples2=4096 FFT bins

Se la nostra frequenza di campionamento è di 10 kHz, il teorema di campionamento di Nyquist-Shannon afferma che il nostro segnale può contenere un contenuto di frequenza fino a 5 kHz. Quindi, la risoluzione del nostro bin di frequenza è:

5 kHz4096 FFT bins1.22 Hzbin

Questo può essere il modo più semplice per spiegarlo concettualmente ma semplificato: la risoluzione del tuo cestino è solo , dove è la frequenza di campionamento del segnale di ingresso e N è il numero di punti FFT usato (lunghezza del campione).fsampNfsamp

Possiamo vedere da quanto sopra che per ottenere contenitori FFT più piccoli possiamo eseguire un FFT più lungo (ovvero prelevare più campioni alla stessa velocità prima di eseguire l'FFT) o ridurre la nostra frequenza di campionamento.

La presa:

C'è sempre un compromesso tra risoluzione temporale e risoluzione in frequenza.

Nell'esempio sopra, dobbiamo raccogliere 8192 campioni prima di poter eseguire la FFT, che quando il campionamento a 10 kHz richiede 0,82 secondi.

Se provassimo a ottenere contenitori FFT più piccoli eseguendo un FFT più lungo, ci vorrebbe ancora più tempo per raccogliere i campioni necessari.

Potrebbe essere OK, potrebbe non esserlo. Il punto importante è che a una frequenza di campionamento fissa, l'aumento della risoluzione della frequenza diminuisce la risoluzione temporale. Questo è quanto più accurata è la misurazione nel dominio della frequenza, tanto minore sarà la precisione nel dominio del tempo. Perdi effettivamente tutte le informazioni temporali all'interno della lunghezza FFT.

In questo esempio, se un tono a 1999 Hz inizia e si interrompe nella prima metà dell'FFT campione 8192 e un tono a 2002 Hz viene riprodotto nella seconda metà della finestra, vedremmo entrambi, ma sembrerebbero essersi verificati nello stesso tempo.

Devi anche considerare i tempi di elaborazione. Un FFT a 8192 punti richiede una discreta potenza di elaborazione. Un modo per ridurre questa necessità è ridurre la frequenza di campionamento, che è il secondo modo per aumentare la risoluzione della frequenza.

Nel tuo esempio, se riduci la frequenza di campionamento a qualcosa come 4096 Hz, allora hai solo bisogno di un FFT a 4096 punti per ottenere bin da 1 Hz * 4096 Hz, allora hai solo bisogno di un FFT da 4096 punti per ottenere bin da 1hz e puoi ancora risolvere un Segnale 2khz. Ciò riduce la dimensione del contenitore FFT, ma riduce anche la larghezza di banda del segnale.

Alla fine con una FFT ci sarà sempre un compromesso tra la risoluzione della frequenza e la risoluzione del tempo. Devi compiere un po 'di equilibrio per raggiungere tutti gli obiettivi.


con tag di intestazione e alcune formattazioni questo post potrebbe andare da buono a ottimo. Hai toccato tutto ciò che volevo notare, e molto bene, ma il modo in cui il post viene formattato meno persone lo leggeranno perché la sua lunghezza è proibitiva, se dai titoli alle sezioni di ogni sezione di cui stai discutendo le persone salteranno al punto succoso che li caratterizza e il tuo numero di +1 aumenterà molto. Non da me ovviamente, come l'hai già guadagnato.
Kortuk,

@kurtuk L'ho sputato di corsa, ripulirò la formattazione quando avrò del tempo libero (o mi sento libero di modificarlo se lo desideri).
Segna l'

1
@kortuk, il nome inizia con una 'o'. Supponevo che lo avessi fatto, stavo solo condividendo la mia opinione, sia per te se non lo sapevi già, ma di più per la comunità nel suo complesso.
Kortuk,

1
Si noti che non è necessario calcolare la FFT. Se si desidera conoscere solo alcuni bin, è più economico calcolare il DFT di tali bin, piuttosto che eseguire un FFT ottimizzato che calcola tutti i bin in una sola volta condividendo molte delle operazioni.
Chris Stratton,

Vale anche la pena notare che un simile compromesso dominio / frequenza si applica ai filtri analogici e IIR.
Caleb Reister,

10

La risoluzione FFT di base è , dove è la frequenza di campionamento.fsNfs

La capacità di differenziare due segnali molto ravvicinati dipende fortemente dalle ampiezze relative e dalla funzione di windowing utilizzata.

Potresti scoprire che giocare con l' analizzatore di segnali Baudline è un buon modo per sviluppare un po 'di intuizione su questo argomento - e no, eseguire alcuni FFT e tracciare uno spettro alla volta in Matlab o Python / Numpy non è davvero lo stesso.

EDIT: c'è anche un trucco per riempire l'ingresso con zeri e prendere una FFT più grande. Non migliorerà la tua capacità di differenziazione ma potrebbe rendere lo spettro più leggibile. È fondamentalmente un trucco simile all'antialiasing nella grafica vettoriale.


Sono l'unico a non vedere il codice in lattice visualizzato correttamente formattato?
Stevenvh

@stevenvh Non funziona anche per me.
terrazza

Per me va bene. Il lattice è solo 2 posti.
Kortuk,

2
Risolto (già da qualche tempo). Il componente aggiuntivo NoScript di Firefox ha bloccato mathjax.org.
Stevenvh,

3

Vale la pena notare che una FFT è un'alternativa al calcolo di un numero di coppie separate di somme (k = 0..sample_length-1) di Sample [k] * SineRefWave [j] [k] e Sample [j] * CosRefWave [j ] [k], per tutti j fino alla metà della lunghezza del campione. Se uno ha bisogno di letture di ampiezza a tutte quelle frequenze, un FFT le calcolerà tutte nel tempo O (NlgN), mentre il loro calcolo individuale richiederebbe il tempo O (N ^ 2). D'altra parte, se uno necessita solo di letture di ampiezza a poche frequenze, spesso sarà meglio semplicemente calcolarle individualmente, specialmente se si utilizza un processore o un DSP in grado di calcolare in modo efficiente quello stile di somma.

Vale anche la pena notare che mentre un FFT con ad esempio una finestra di campionamento di 20 ms non sarà in grado di distinguere tra un singolo tono del 1975Hz o una combinazione di frequenze (1975-N) Hz e (1975 + N) Hz per N <25, può essere usato per misurare frequenze isolate con precisione più fine rispetto alla finestra di campionamento se non ci sono altri contenuti spettrali nelle vicinanze. Una frequenza del 1975Hz solitario si raccoglierà ugualmente nei bin del 1950Hz e 2000Hz, così come una combinazione di toni 1974Hz e 1976Hz. Un tono isolato a 1974Hz, tuttavia, verrebbe rilevato più fortemente nel bin a 1950Hz rispetto a quello a 2000Hz, e un tono a 1976Hz si rileverebbe più fortemente nel bin a 2000Hz.


1

La risoluzione della frequenza non dipende dalla lunghezza di FFT, ma dalla lunghezza del tempo totale di campionamento T, ovvero 1 / T, che è anche la componente di frequenza più bassa ottenuta.

Nota, lo zero padding non aumenta la risoluzione in frequenza; Il DFT del segnale zero padding è semplicemente una migliore approssimazione del DTFT del segnale originale.


0

Se si conosce la gamma di possibili frequenze di ingresso e la gamma è ridotta, è possibile applicare il sottocampionamento per ridurre il numero di campioni e il tempo di calcolo della FFT. Con 256 campioni e una frequenza di campionamento di 256 Hz, ottieni la risoluzione desiderata di 1 Hz e una larghezza di banda priva di alias di 128 Hz.


-3

guarda questa foto. è chiaro. relazione tra risoluzione fs e fft

inserisci qui la descrizione dell'immagine


5
Da questa immagine non è del tutto chiaro cosa stia succedendo. (Non aiuta che l'immagine non sia in inglese.) Cosa aggiunge questo che le altre risposte non hanno menzionato?
Greg d'Eon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.