2016-08-09 25 views
0

Ich versuche, eine inverse FFT in Matlab zu tun, aber ich kann nicht scheinen, dass die inverse Arbeit richtig funktioniert. Hier ist mein Code:inverse fft mit Matlab funktioniert nicht

data = [-0.0005 
     -0.0004 
     -0.0003 
     -0.0002 
     -0.0001 
     -0.0000 
     0.0001 
     0.0001 
     0.0001 
     0.0002 
     0.0002 
     0.0002 
     0.0002 
     0.0002 
     0.0002 
     0.0002 
     0.0002 
     0.0002 
     0.0003 
     0.0004 
     0.0005 
     0.0006 
     0.0007 
     0.0009 
     0.0010 
     0.0011 
     0.0011 
     0.0012 
     0.0011 
     0.0011 
     0.0011 
     0.0010 ];  


%plot data 
figure(1) 
plot(data)  

%FFT 
N = 100; 
X = fft(data, N); 
F = [-N/2:N/2-1]/N; 
F = F/0.0125; 

X = fftshift(X); 
figure(2) 
plot(F, abs(X)) 

%inverse FFT 
y = ifft(X); 
figure(3) 
plot(F,y) 

Abbildung 1 und 3 sollten identisch sein, sind aber in keiner Weise. Ich habe dafür gesorgt, dass ich ifft des absoluten Wertes von fft nicht nehme, deshalb ist mir nicht klar, was falsch ist.

Antwort

1

Da Sie das Spektrum fftshift mit verschoben, müssen Sie „unshift“ das Spektrum vor der inversen Fourier-Transformation unter

y = ifft(fftshift(X)); 
+0

Das schnell war. Wenn mein 'N' zu groß gewählt wird, werden die Werte einfach auf 0 gesetzt. Warum ist das so, sollte ich dann überhaupt kein' N' passieren? – BillyJean

+0

Standardmäßig ist 'N' die Länge Ihres Signals. Wenn Ihr 'N' größer ist als die Länge Ihres Signals, wird es mit Null gepolstert. – Suever

+0

Empfehlen Sie, dass ich den Standardwert verwende, oder ist es besser, dass ich es manuell behebe? – BillyJean

Verwandte Themen