Perché si verifica una perdita spettrale in una FFT?


18

Ho provato a cercare su Google e a cercarlo su Wikipedia, ma non ho ottenuto alcuna risposta oltre "è perché la frequenza del segnale di input è compresa tra due bin".

Capisco che questa è la ragione, ma ciò che non riesco a capire è perché la perdita sembra estendersi a più contenitori adiacenti anziché a un solo contenitore adiacente.

Per illustrare di cosa sto parlando, ecco alcuni dati simulati (codice alla fine del post): Freq_10

Sopra è lo spettro FFT (tracciato su una scala logaritmica) di un'onda sinusoidale di frequenza 10. La frequenza di campionamento è una e il numero di campioni è 100. Il grafico è stato spostato FFT. C'è chiaramente solo un picco nel bin 10, e il resto è nell'ordine dell'errore numerico, o in giro.

Freq_10_1

Questo è lo spettro di frequenza con una frequenza generata di 10.1. Chiaramente c'è "perdita" in più contenitori oltre al bidone immediatamente adiacente.

freq_10_5

Questa è la trama per una frequenza di 10,5.

Domanda: Perché esiste questa perdita e perché si estende a tutti gli altri contenitori, anziché al contenitore adiacente immediato?


Codice, per chiunque sia interessato (codice Python)

import numpy as np
import matplotlib.pyplot as plt

xFreq = 10.5
xSize = 100.0
xPeriod = xSize/xFreq
x = np.linspace(1,xSize,xSize)

data = np.sin(2*np.pi*x/xPeriod)
fft = np.fft.fft(data)
fft = np.fft.fftshift(fft)

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(abs(fft), "o")
ax.set_yscale('log')
plt.show()

Ho cambiato il xFreqvalore da 10.0a 10.5, ecc.


Qualsiasi segnale che non si adatta esattamente alla lunghezza della finestra della FFT produce una discontinuità quando la avvolgi. Le discontinuità, come gli impulsi o le funzioni di passaggio, contengono alcune di tutte le frequenze.
endolith,

Risposte:


12

Una FFT ha una lunghezza finita e costituisce quindi una finestra rettangolare predefinita su un flusso di dati. Una finestra nel dominio del tempo provoca una convoluzione nel dominio della frequenza con la trasformazione della finestra. Si noti che la trasformazione di una finestra rettangolare è una funzione Sinc (sin (x) / x), che ha una larghezza infinita. Non è solo 2 bidoni di larghezza. Pertanto, le increspature della funzione Sinc appariranno come "perdite" lontano da qualsiasi picco spettrale che non sia perfettamente periodico nella lunghezza della FFT.

L'immagine seguente mostra parte della risposta in frequenza della funzione sinc. Quando il tono è centrato su uno dei bin, tutti gli altri punti sono allineati con i null nella risposta in frequenza. Se non è centrato su un bidone, è come spostare l'intera risposta in frequenza, il che fa cadere gli altri bin su porzioni non nulle della risposta in frequenza.

inserisci qui la descrizione dell'immagine

Un altro modo di vederlo è che un FFT è solo un banco di filtri, in cui ogni piano di banda di arresto del filtro ha molte increspature e non è certamente infinito in attenuazione a più di 1 bin dalla frequenza centrale. Alcune finestre (von Hann, ecc.) Diverse da quelle rettangolari hanno bande di arresto inferiori, motivo per il loro uso popolare.


1
Si noti che la cosiddetta "dispersione" spettrale non viene visualizzata nella FFT di input periodici esattamente centrati sul bin perché la funzione Sinc è esattamente zero (tra i cambiamenti di segno) in tutte le altre frequenze del centro del bin (completamente ortogonale a quei kernel di filtro e Vettori di base FFT).
hotpaw2,

Spero non ti dispiaccia la modifica. Sentiti libero di lanciarlo se non ti piace.
Jim Clay,

@Jim Clay: grazie per il grafico aggiunto. Non sono riuscito a capire come inviarne uno dal mio iPhone.
hotpaw2,

1
Grazie, grazie, grazie. Grazie per NON aver spiegato la perdita dicendo: "La FFT presume che la sua sequenza di input sia periodica". Quella sciocca nozione di "presunta periodicità" è, purtroppo, ripetuta troppo spesso nella letteratura di DSP. [-Rick-]

Occasionalmente, l'assunzione della periodicità di input è utile, ad esempio quando si esegue il campionamento sincrono con rotazione dell'albero della lunghezza del frame FFT (o creando esempi sintetici in classe). Ma con l'audio (ecc.), I frame di dati di sezionamento e windowing non correlati a lunghezze di periodicità sono più comuni, rendendo l'assunto generalmente falso per il lavoro in quelle aree.
hotpaw2,

0

hotpaw2La risposta è buona, ma vorrei approfondire un po user5133'il commento:

Grazie per NON aver spiegato la perdita dicendo: "La FFT presume che la sua sequenza di input sia periodica". Quella sciocca nozione di "presunta periodicità" è, purtroppo, ripetuta troppo spesso nella letteratura di DSP

e allo stesso tempo rispondi anche alla domanda. Nota che sono un esperto in questo campo --- sentiti libero di commentare, correggere o confermare.

Z{1,2,...,N}

X(ω)=Σn=-X[n]e-ioωn.

NNZ

XK =DEF Σn=0N-1Xne-2πioKn/N,KZ
X(2πK/N)n{1,2,...,N}X[n]w[n]wn{1,...,N} e 0 ovunque.

Ma la trasformata di Fourier di un prodotto è la convoluzione delle trasformate di Fourier:

F{fg}=F{f}*F{g}

sinc

-w(f)e-jωtdt=-ττe-jωtdt=2τsinc(ωτ)

La convoluzione con a sinc


sembra che @ user5133 non sia più in giro. ma la gratitudine di Rick non è corretta: "Grazie per NON aver spiegato la perdita dicendo: 'La FFT presume che la sua sequenza di input sia periodica.' Quella sciocca nozione di "presunta periodicità" è, purtroppo, ripetuta troppo spesso nella letteratura di DSP. " Si sbaglia. Il DFT sicuramente estende periodicamente i dati a lunghezza finita passati ad esso. La DFT fa assumere i dati passata è un periodo di una sequenza periodica.
robert bristow-johnson,
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.