Perché la FFT è "rispecchiata"?


36

Se fai un diagramma FFT di un segnale semplice, come:

t = 0:0.01:1 ;
N = max(size(t));
x = 1 + sin( 2*pi*t ) ;
y = abs( fft( x ) ) ;
stem( N*t, y )

Sinusoide 1Hz + DC

1Hz

FFT di cui sopra

fft

Capisco che il numero nel primo cestino è "quanta DC" c'è nel segnale.

y(1)  %DC
  > 101.0000

Il numero nel secondo cestino dovrebbe essere "quanto 1 ciclo sull'intero segnale" c'è:

y(2)  %1 cycle in the N samples
  > 50.6665

Ma non è 101! Sono circa 50,5.

C'è un'altra voce alla fine del segnale fft, uguale in grandezza:

y(101)
  > 50.2971

Quindi di nuovo 50,5.

La mia domanda è: perché la FFT si rispecchia in questo modo? Perché non è solo un 101 in y(2)(il che ovviamente significherebbe che tutti i 101 bin del tuo segnale hanno una sinusoide da 1 Hz?)

Sarebbe preciso fare:

mid = round( N/2 ) ;

% Prepend y(1), then add y(2:middle) with the mirror FLIPPED vector
% from y(middle+1:end)
z = [ y(1), y( 2:mid ) + fliplr( y(mid+1:end) ) ];

stem( z )

Capovolgi e aggiungi la seconda metà del vettore FFT

inserisci qui la descrizione dell'immagine

Ho pensato ora, la parte specchiata sul lato destro viene aggiunta correttamente, dandomi il desiderato "tutti i 101 bin dell'FFT contengono una sinusoide da 1Hz"

>> z(2)

ans =

  100.5943

Una domanda simile è stata risolta qui: dsp.stackexchange.com/questions/3466/…
pichenettes,

Ma si tratta in particolare della simmetria (credo si chiama simmetria ermetica?) Del segnale.
bobobobo,

Per un segnale reale puro F (k) = conj (F (Nk)), questo è il motivo per cui la trasformata di Fourier di un segnale reale puro è simmetrica.
WebMonster,

Chiediti: quale risultato ti aspetteresti se il tuo segnale fosse 1 + cos (2 * pi t) ... E 1 + i cos (2 * pi t) ... E 1 + i sin (2 * pi * t) ...
Pichenettes,

2
Perché una trasformata di Fourier spezza un segnale in esponenziali complessi e un'onda sinusoidale è la somma di 2 esponenziali complessi. dsp.stackexchange.com/a/449/29
endolith

Risposte:


39

I segnali reali sono "riflessi" nelle metà reali e negative della trasformata di Fourier a causa della natura della trasformata di Fourier. La trasformata di Fourier è definita come la seguente-

H(f)=h(t)ej2πftdt

Fondamentalmente correla il segnale con un gruppo di sinusoidi complessi, ognuno con la propria frequenza. Che aspetto hanno questi complessi sinusoidi? L'immagine sotto mostra una complessa sinusoide.

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine

Il "cavatappi" è la sinusoide complessa rotante nel tempo, mentre le due sinusoidi che la seguono sono le componenti reali e immaginarie estratte della complessa sinusoide. Il lettore astuto noterà che i componenti reali e immaginari sono esattamente gli stessi, solo che sono sfasati tra loro di 90 gradi ( ). Poiché sono sfasati di 90 gradi, sono ortogonali e possono "catturare" qualsiasi componente del segnale a quella frequenza.π2

La relazione tra l'esponenziale e il coseno / seno è data dalla formula di Eulero-

ejx=cos(x)+jsin(x)

Questo ci consente di modificare la trasformata di Fourier come segue:

H(f)=h(t)ej2πftdt=h(t)(cos(2πft)jsin(2πft))dt

Alle frequenze negative la trasformata di Fourier diventa la seguente-

H(f)=h(t)(cos(2π(f)t)jsin(2π(f)t))dt=h(t)(cos(2πft)+jsin(2πft))dt

Il confronto tra la versione a frequenza negativa e la versione a frequenza positiva mostra che il coseno è lo stesso mentre il seno viene invertito. Sono comunque sfasati di 90 gradi l'uno con l'altro, consentendo loro di catturare qualsiasi componente del segnale a quella frequenza (negativa).

Poiché i sinusoidi sia in frequenza positiva che negativa sono sfasati di 90 gradi e hanno la stessa ampiezza, entrambi risponderanno ai segnali reali allo stesso modo. O meglio, l' entità della loro risposta sarà la stessa, ma la fase di correlazione sarà diversa.

EDIT: In particolare, la correlazione di frequenza negativa è il coniugato della correlazione di frequenza positiva (a causa del componente seno immaginario invertito) per segnali reali. In termini matematici, questo è, come sottolineato da Dilip, il seguente-

H(f)=[H(f)]

Un altro modo di pensarci:

I componenti immaginari sono proprio questo ... immaginario! Sono uno strumento che consente di impiegare un piano in più per visualizzare le cose e rende possibile gran parte dell'elaborazione del segnale digitale (e analogico), se non molto più semplice dell'utilizzo di equazioni differenziali!

5i


Buona risposta - un leggero pignolo però, non sono d'accordo con "Poiché sono uguali, qualunque cosa a cui uno è correlato, anche l'altro lo farà con la stessa identica magnitudine e uno sfasamento di 90 gradi". So cosa stai cercando di dire, tuttavia (come sai), un seno è correlato a un seno (punteggio 1), ma non sarà affatto correlato con un coseno (punteggio 0). Sono lo stesso segnale, ma con fasi diverse dopotutto.
Spacey,

Hai ragione. C'è anche un altro problema più serio. Lo riparerò più tardi.
Jim Clay,

Sarebbe bello se potessi modificare la tua risposta per essere più reattivo alla domanda che riguarda i DFT (anche se dice FFT nel titolo) piuttosto che dare la teoria generale delle trasformazioni di Fourier.
Dilip Sarwate,

@DilipSarwate Il mio obiettivo è aiutare l'interrogante a capire, e penso che il mio approccio sia il migliore per quello. Ho votato a favore della tua risposta, comunque, per aver fatto la matematica discreta.
Jim Clay,

H(f)=[H(f)]|H(f)|=|H(f)|x(t)è un segnale di valore reale e che questo è il "mirroring" di cui l'OP stava chiedendo. In altre parole, ti chiedo di modificare la tua risposta per renderla più rispondente alla domanda effettivamente posta (come ho richiesto nel mio commento precedente).
Dilip Sarwate,

20

N101NN2k4k in modo da velocizzare il calcolo DFT tramite FFT.

x=(x[0],x[1],x[2],,x[N1])NX=(X[0],X[1],X[2],,X[N1])

X[m]=n=0N1x[n](exp(j2πmN))n,m=0,1,,N1
j=1XxxX[0]=n=0N1x[n]Nexp(jπ)=1
X[N2]=n=0N1x[n](exp(j2πN/2N))n=n=0N1x[n](1)n
NXx m1mN1
X[m]=n=0N1x[n](exp(j2πmN))nX[Nm]=n=0N1x[n](exp(j2πNmN))n=n=0N1x[n](exp(j2π+j2πmN))n=n=0N1x[n](exp(j2πmN))n=(X[m])
1mN1X[Nm]=(X[m])m=N/2NX[N/2]=(X[N/2])X[N/2]

m(Nm)

1


x11

x[n]=1+sin(2π(0.01n)), 0n100
x[0]=x[100]=1101
X[m]=n=0100(1+sin(2π(n100)))(exp(j2πm101))n
100101X[m]2m99 sono diversi da zero, anche se piccoli. D'altra parte, supponiamo che tu debba adattare l'array tnel tuo programma MATLAB100 campioni prelevati a t=0,0.01,0.02,...,0.99 così che quello che hai è
X[n]=1+peccato(2π(0.01n)), 0n99.
Quindi il DFT è
X[m]=Σn=099(1+peccato(2π(n100)))(exp(-j2πm100))n,
vedrai che il tuo DFT sarà esattamente X=(100,-50j,0,0,...,0,50j) (or at least within round-off error), and the inverse DFT will give that for 0n99,
x[n]=1100m=099X[m](exp(j2πn100))m=1100[10050jexp(j2πn100)1+50j(exp(j2πn100))99]=1+12j[exp(j2πn100)exp(j2πn100)]=1+sin(2π(0.01n))
which is precisely what you started from.

So, is it possible to tell from the FFT if a signal is periodic or not?
displayname

@displayname That is a separate question that should be asked in its own right (and perhaps has been asked and answered already).
Dilip Sarwate

When I carefully pry out the conjugate symmetrical bins [By writing a 0 + 0i into them] and reconstruct the time domain signal using ifft, the magnitude of the reconstructed time domain signal has halved. Is this natural or is it a tooling problem? I do take care of FFT output normalization and its reverse after iFFT.
Raj

14

Note that an FFT result is mirrored (as in conjugate symmetric) only if the input data is real.

For strictly real input data, the two conjugate mirror images in the FFT result cancel out the imaginary parts of any complex sinusoids, and thus sum to a strictly real sinusoid (except for tiny numerical rounding noise), thus leaving you with a representation of strictly real sine waves.

If the FFT result wasn't conjugate mirrored, it would represent a waveform that had complex values (non-zero imaginary components), not something strictly real valued.

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.