FFT dell'onda sinusoidale non arriva come previsto, ovvero punto singolo


14

Il diagramma ciano è uno spettro di 50 Hz e quello magenta è un'onda sinusoidale di 50.1 Hz (con ampiezza 0,7). Entrambi sono campionati a 1024 campioni / s. Ho eseguito un FFT a 1024 punti per ottenere questo spettro.

Perché solo lo spettro 50Hz è un valore singolo? Perché il seno a 50.1 Hz è costituito da altre frequenze oltre a 50.1 Hz; da dove provengono queste nuove frequenze?

Non ho eseguito alcuna elaborazione non lineare sul segnale 50,1 Hz! Anche il 50,1 Hz sembra avere un'ampiezza massima più piccola, cioè non è 0,7, quando in realtà l'onda sinusoidale che ho generato ha un'ampiezza di 0,7.

Perchè è questo?

Due spettri, rispettivamente per 50Hz e 50.1Hz Ottenuto dal comando MATALB fft ();


Potresti per favore pubblicare il codice che hai usato per produrre questa trama? La mia ipotesi migliore è che, poiché i tuoi segnali sono così vicini tra loro, la FFT non può risolverli correttamente. Quello, o qualche sbavatura spettrale perché i campioni non si allineano con le frequenze.
Tom Kealy,

4
Le risposte di seguito sono corrette. Il termine per ciò che stai osservando si chiama dispersione spettrale e viene osservato quando si analizza una sinusoide la cui frequenza non si trova esattamente al centro di uno dei bin di uscita DFT.
Jason R,

per favore, posso sapere cosa hai pianificato contro cosa per te essere in grado di ottenere il tuo picco al segno di 50Hz
Nazario_Jnr

Vedi questa risposta per una descrizione dettagliata di quale sia il problema e come risolverlo.
Dilip Sarwate,

Risposte:


14

In realtà la risposta di Matt offre già una visione del problema qui: il DFT è implicitamente periodico sia nel dominio del tempo che della frequenza (vedi questa domanda ). Dai tuoi parametri possiamo calcolare che il tuo periodo di osservazione è di 1 s. Ciò significa che si osservano 50 periodi di un tono di 50 Hz. L'estensione periodica di tale intervallo di osservazione provoca sempre un'onda sinusoidale apparente. Se prendi il tono di 50,1 Hz, stai trasformando 50,1 periodi di un'oscillazione. L'estensione periodica di quel segnale comporterà salti di fase che causano ulteriori tributari spettrali.

fS/NDFT=1024Hz/1024=1Hz

Entrambi gli effetti sopra descritti contribuiscono allo spettro che stai osservando.


1
Ha senso. Ma solo per essere una perdita spettrale più chiara che hai descritto è un problema con lo strumento (FFT) per l'osservazione degli spettri. Non è un difetto perse nel segnale. Mezzi Se "ascolto" un segnale audio di 50,1 Hz, sembrerà alle mie orecchie come un singolo tono e non una sorta di "rumore". Ho ragione?
gpuguy,

1
Hai assolutamente ragione. Mostra quanto sia importante capire cosa sta effettivamente facendo il DFT per poterlo interpretare correttamente. Come sidenote: ciò che "ascolteresti" in un'implementazione effettiva dipende anche da come stai convertendo il segnale discreto in un segnale analogico.
Deve il

11

Questo è l'effetto del troncamento o del windowing del segnale sinusoidale. Devi troncare in modo tale che se aggiungi il segnale spostato a quello troncato, rimarrà comunque l'onda sinusoidale originale.


6

Otterrai un solo punto FFT risultato per una frequenza di sinusoide pura non modulata che è esattamente intera periodica nell'apertura o larghezza FFT. Qualsiasi altra frequenza di sinusoide apparirà come contorta con la trasformazione (un Sinc periodico) della finestra predefinita (un rettangolo).

50,1 Hz non è esattamente periodico nella finestra di 1 secondo della FFT.

Quegli altri bin risultati o frequenze FFT "a perdita" sono necessari per rappresentare la discontinuità prodotta tra i confini della finestra da qualsiasi segnale che non sia esattamente intero periodico nella larghezza FFT. Questo perché tutti i vettori di base di un DFT sono esattamente periodici interi nella larghezza del DFT e quindi non hanno una netta discontinuità tra la fine e l'inizio del vettore di base. Quindi qualsiasi segnale che non ha quelle caratteristiche non può essere rappresentato da un solo vettore base DFT (e dal suo complesso coniugato), quindi le informazioni sul resto del segnale devono andare da qualche parte.

Poiché l'energia totale è preservata dalla trasformata FFT (teorema di Parseval'a), l'energia nei contenitori di "dispersione" toglie il contenitore di picco. Pertanto, l'ampiezza del contenitore di picco deve essere inferiore.


5

Scommetto che la tua onda sinusoidale è zero al primo e ultimo campione? Non dovrebbe essere. Dovrebbe essere allineato in modo che il prossimo campione dopo l'ultimo campione sia zero, in modo da poter copiare e incollare copie del segnale uno dopo l'altro e sembreranno continui, senza campioni duplicati. Forse pensalo come uno sfondo del desktop piastrellato, in cui un bordo deve incontrare perfettamente il bordo opposto quando piastrellato. :)

Consulta https://gist.github.com/endolith/236567 per un esempio di Python:

# Sampling rate
fs = 128 # Hz

# Time is from 0 to 1 seconds, but leave off the endpoint, so that 1.0 seconds is the first sample of the *next* chunk
length = 1 # second
N = fs * length
t = linspace(0, length, num = N, endpoint = False)

# Generate a sinusoid at frequency f
f = 10 # Hz
a = cos(2 * pi * f * t)

# Use FFT to get the amplitude of the spectrum
ampl = 1/N * abs(fft(a))

Guarda come due copie del segnale si incastrano end-to-end per creare un'onda continua:

inserisci qui la descrizione dell'immagine

Quando ciò accade, l'energia FFT è contenuta interamente in un singolo cestino:

inserisci qui la descrizione dell'immagine


1
Ho avuto lo stesso problema di OP. È stato risolto grazie all'impostazione endpoint = False flag. Ho pensato che lo spazio delle linee sia (chiuso, aperto) per impostazione predefinita, ma risulta essere (chiuso, chiuso). Ho trovato il bug grazie al tuo codice.
Trismegistos,

-1

Ciò si verifica a causa di perdite spettrali e finestre. La risposta ideale, ovvero la funzione di impulso, è per l'onda sinusoidale a tempo continuo. Quando prendi la DFT di un'onda sinusoidale discreta in un computer digitale, stai fondamentalmente prendendo la Trasformata di Fourier del seno finestrato e campionato e poi campionandola nel dominio della frequenza. Ciò provoca la perdita spettrale. Consultare: http://w.astro.berkeley.edu/~jrg/ngst/fft/leakage.html

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.