Perché dovrei zero-pad un segnale prima di prendere la trasformata di Fourier?


77

In una risposta a una domanda precedente , è stato affermato che si dovrebbe

azzerare i segnali di input (aggiungere zeri alla fine in modo che almeno metà dell'onda sia "vuota")

Qual è la ragione di questo?


Dipende da cosa stai facendo. Questo avrebbe potuto essere un commento sulla mia risposta. Ho aggiunto qualche spiegazione ad esso.
endolith il

@endolith: inizialmente ho pensato di metterlo come commento, ma penso che la domanda possa essere di interesse generale e che sarebbe un peccato se una buona risposta fosse sepolta nei commenti da qualche parte. Se non sei d'accordo, eliminerò questa domanda.
Jonas,

9
Bene, è una domanda molto generale. Puoi azzerare il pad per trasformare qualcosa in una potenza di 2, puoi azzerare il pad per fare in modo che la trasformazione circolare si comporti come una trasformazione non circolare, puoi farlo per ricampionare un segnale, cambiare la risoluzione della frequenza, ecc. Ecc.
endolith

Risposte:


82

L'imbottitura zero consente di utilizzare un FFT più lungo, che produrrà un vettore di risultato FFT più lungo.

Un risultato FFT più lungo ha più bin di frequenza che sono più ravvicinati nella frequenza. Ma forniranno essenzialmente lo stesso risultato di un'interpolazione Sinc di alta qualità di una FFT più corta e senza zero dei dati originali.

Ciò potrebbe risultare in uno spettro più uniforme se tracciato senza ulteriore interpolazione.

Sebbene questa interpolazione non aiuterà con la risoluzione o la risoluzione di e / o tra frequenze adiacenti o vicine, potrebbe rendere più semplice risolvere visivamente il picco di una singola frequenza isolata che non ha segnali adiacenti significativi o rumore nello spettro . Statisticamente, la maggiore densità dei bin risultati FFT renderà probabilmente più probabile che il bin di magnitudine di picco sia più vicino alla frequenza di una sinusoide di frequenza di ingresso isolata casualmente e senza ulteriore interpolazione (parabolica, ecc.).

Ma, essenzialmente, lo zero padding prima di un DFT / FFT è un metodo computazionalmente efficiente per interpolare un gran numero di punti.

Lo zero-padding per la correlazione incrociata, l'auto-correlazione o il filtro di convoluzione viene utilizzato per non mescolare i risultati di convoluzione (a causa della convoluzione circolare). Il risultato completo di una convoluzione lineare è più lungo di uno dei due vettori di input. Se non fornisci un posto dove porre la fine di questo risultato di convoluzione più lungo, la convoluzione rapida di FFT lo mescolerà semplicemente e aumenterà il risultato desiderato. Lo zero padding fornisce molti zeri in cui mescolare il risultato più lungo. Ed è molto più semplice decomprimere qualcosa che è stato solo miscelato / sommato con un vettore di zeri.


12
L'ultimo paragrafo è la risposta chiave alla domanda originale, anche se penso che potrebbe essere affermato più chiaramente. Riempimento di zeri nel contesto di correlazione o la convoluzione può essere fatto per garantire che l'attuazione del processo dei rendimenti dominio della frequenza lineare anziché circolare convoluzione / correlazione. Tuttavia, farlo non è un requisito se si è disposti a svolgere alcuni lavori di contabilità sul lato, come negli algoritmi di sovrapposizione e salvataggio e sovrapposizione.
Jason R,

4
@Jason R: In realtà, sono entrambi convoluzione circolare. Una FFT normale (non potata) fa tutti i moltiplicamenti e aggiunge per avvolgere parte del risultato. È solo che nel caso sufficientemente azzerato, tutti quei moltiplicamenti e aggiunte hanno valore zero, quindi a nessuno importa del nulla che viene calcolato e avvolto attorno al cerchio.
hotpaw2,

9
Infatti; la moltiplicazione dei DFT di due segnali implementa sempre la convoluzione circolare. Avrei dovuto formularlo diversamente: riempi gli zeri alla fine di un segnale per assicurarti che il risultato ottenuto contorcendoli circolarmente sia lo stesso di quello che ottieni se li contorti linearmente (supponendo che la convoluzione lineare sia ciò che vuoi, che è di solito il caso).
Jason R,

27

Ci sono alcune cose da considerare prima di decidere di azzerare il segnale del dominio del tempo. Potrebbe non essere necessario azzerare affatto il segnale!

1) Allunga i dati nel dominio del tempo (non zero padding) per ottenere una migliore risoluzione nel dominio della frequenza.

2) Aumenta il numero di punti FFT oltre la lunghezza del segnale nel dominio del tempo (zero padding) se desideri vedere una migliore definizione dei bin FFT, sebbene non ti offra una risoluzione più reale. Puoi anche pad per arrivare a una potenza di 2 numero di punti FFT.

3) Quando si armeggiano con i punti FFT (nel punto precedente), assicurarsi che i punti di frequenza finiscano dove li si desidera. La spaziatura dei punti è , dove è la frequenza di campionamento e è il numero di punti FFT.f s Nfs/NfsN

Ci sono alcune belle figure che illustrano questi punti su http://www.bitweenie.com/listings/fft-zero-padding/

Un'ultima cosa da menzionare: se si azzera il segnale nel dominio del tempo e si desidera utilizzare una funzione di windowing, assicurarsi di impostare il segnale prima di azzerare il pad. Se si applica la funzione finestra dopo il riempimento zero, non si otterrà ciò che la finestra dovrebbe eseguire. Più specificamente, avrai comunque una netta transizione dal segnale a zero invece di una transizione graduale a zero.


8

In generale, lo zero padding prima di DFT equivale all'interpolazione, o campionamento più spesso, nel dominio trasformato.

Ecco una rapida visualizzazione di come funziona il contrario. Se campionate un segnale bandlimited nel tempo a una velocità maggiore, otterrete uno spettro più "schiacciato", cioè uno spettro con più zeri ad entrambe le estremità. In altre parole, è possibile ottenere più campioni in tempo semplicemente zero-padding in frequenza dopo DFT e quindi IDFT con il risultato a zero.

Lo stesso effetto vale al contrario quando si verifica uno zero padding nel tempo. Questo perché la ricostruzione perfetta del segnale è possibile fintanto che un segnale è illimitato e campionato almeno alla velocità di Nyquist.

Il termine "risoluzione" dipende da come lo si definisce. Per me, significa quanto bene i due punti di osservazione adiacenti nel tempo o nella frequenza possano essere discriminati (statisticamente) in modo affidabile. In questo caso, la risoluzione dipende effettivamente dalle dimensioni del DFT a causa di perdite spettrali. Cioè, più piccola è la dimensione della finestra, più sfocato o imbrattato il segnale trasformato e viceversa. È diverso dalla frequenza di campionamento o dalla definizione di "definizione". Ad esempio, è possibile campionare un'immagine molto sfocata ad alta frequenza (alta definizione), ma non è ancora possibile ottenere più informazioni rispetto al campionamento a velocità inferiore. Quindi, in sintesi, lo zero padding non migliora affatto la risoluzione poiché non si ottengono più informazioni di prima.


6

Se uno ha qualche interesse nello spettro della funzione di windowing usata per isolare il campione nel dominio del tempo, allora lo zero padding aumenterà la risoluzione di frequenza della funzione di windowing.

Se il segnale orario è , dove è la funzione di windowing, allora lo spettro complessivo è , dove indica la convoluzione. w ( t ) X ( f ) W ( f ) x(t)w(t)w(t)X(f)W(f)

Se la tua funzione di windowing è un semplice rettangolo (un'estrazione di alcuni set di valori da . Quindi è la funzione di sincronizzazione. Quindi, ad esempio, se Nfft è uguale alla larghezza del tuo rettangolo, e hai avuto una sinusoide proprio su una delle frequenze bin, quindi i campioni della funzione di sincronizzazione che apparirebbero centrati su quel bin cadono esattamente agli incroci zero non di punta e non vedi la forma della sincronizzazione in lo spettro. Se ora azzerate i vostri dati andando nella FFTX ( f )x(t)X(f), vedrai alcuni campioni in punti diversi dal picco e dagli incroci zero, rivelando la forma della funzione di sincronizzazione nello spettro risultante. Quindi a che serve il padding zero? È certamente di uso educativo nel rivelare la natura della trasformazione discreta dei segnali a finestra, che è il solito caso. In senso pratico, potrebbe essere utile in ogni caso in cui sei interessato alla forma spettrale di un inviluppo isolato che cavalca un'onda portante.


4

Ci possono essere diversi motivi per questo a seconda di qualsiasi processo eseguito prima e dopo la trasformazione di Fourier. Il motivo più comune è ottenere una maggiore risoluzione in frequenza in qualsiasi trasformazione risultante. Vale a dire che, maggiore è il numero di campioni utilizzati nella trasformazione, più stretta è la larghezza di banda nello spettro di potenza risultante. Ricorda: binwidth = sample_frequency / transform_size (spesso chiamato dimensione della finestra). Potete immaginare da ciò che, quando aumentate le dimensioni della vostra trasformazione, la binwidth si riduce (= migliore risoluzione della frequenza). Lo zero padding è un modo per aumentare la dimensione della trasformazione senza introdurre nuove informazioni al segnale.

Quindi perché non prendere una trasformazione più grande senza zero padding? Ciò non otterrebbe lo stesso effetto? Buona domanda. In molti casi potresti voler analizzare un flusso di dati del dominio del tempo, per il quale potresti utilizzare una trasformata di Fourier (stft) per un breve periodo di tempo. Ciò comporta la trasformazione di ogni N campione in base alla risoluzione temporale necessaria per caratterizzare i cambiamenti nello spettro delle frequenze. Qui sta il problema. Una finestra troppo grande e perderai la risoluzione del tempo, una finestra troppo piccola e perderai la risoluzione della frequenza. La soluzione quindi è quella di prendere piccole finestre del dominio del tempo che offrano una buona risoluzione temporale e quindi azzerarle per ottenere una buona risoluzione della frequenza. Spero che questo ti sia utile

Aggiornamento
Non l'ho spiegato bene. Avrei dovuto chiarirlo meglio. Facendo riferimento a una trasformazione finestrata, in effetti non si ottiene una risoluzione di frequenza maggiore "reale" ma ai fini della visualizzazione (lettura dello spettro di potenza con l'occhio) può fornire risultati più chiari. Usando la frequenza di campionamento critica, ciascun lobo laterale occupa un singolo contenitore, che a seconda della tecnica grafica potrebbe essere fuorviante. Lo zero padding fornisce uno spettro di frequenza interpolato che può essere più rivelatore. Inoltre, se si utilizza un semplice metodo di picco picking per la stima della frequenza, l'effetto di interpolazione spettrale dello zero pad vi darà un campione spettrale più vicino al picco reale del lobo principale. Questo link fornisce alcuni diagrammi utili: http://www.dsprelated.com/dspbooks/sasp/Practical_Zero_Padding.html


9
Questa risposta non è corretta Lo zero padding non migliora affatto la risoluzione della frequenza; interpola semplicemente tra le uscite della trasformata più piccola. Puoi pensare allo zero-padding come ad aggiungere più bin di frequenza con la stessa larghezza di banda che hanno con la trasformata più piccola; pertanto, dal punto di vista della banca del filtro, i loro passband si sovrappongono.
Jason R,

1
Se aiuta a capire: puoi anche fare il contrario: prendi la FFT di un segnale, quindi azzera il risultato e inverti la FFT. Ciò avrà l'effetto di interpolare il segnale originale. Ma ovviamente il segnale sarà sempre lo stesso segnale, con la stessa larghezza di banda di Nyquist. L'interpolazione non fornirà informazioni sulla frequenza più elevate di quelle originariamente presenti.
endolith

1
@Jason R - Hai ragione, la mia risposta è stata fuorviante, ho tentato di chiarire sopra il post originale. Non avrei dovuto dire che zero padding aumenta la risoluzione della frequenza.
Dan Barry,

2

Non ho visto questi menzionati nelle precedenti buone risposte, quindi aggiungerò i seguenti motivi importanti aggiuntivi per zero padding:

Gli algoritmi Radix-2 sono più efficienti, quindi zero padding alla potenza successiva di 2 (o la potenza di 4 in alcuni casi per radix-4), o evitare in modo più significativo eventuali fattori primi di grandi dimensioni può migliorare le prestazioni in tempo reale. Inoltre, quando si utilizza FFT per l'analisi, spesso viene eseguito il riempimento zero per calcolare i campioni del DTFT, ad esempio per determinare la risposta in frequenza di un FIR: confronta fft ([1 1 1 1]) con fft ([1 1 1 1], 512) che è identico a freqz ([1 1 1 1]).

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.