2017-07-28 1 views
0

J'essaye une simple (Fast Fourier Transform) fft et la convertir en arrière, mais cela ne fonctionne pas. Je dois commencer par cela afin de procéder à l'ajout de phase à chaque composant. Pouvez-vous s'il vous plaît jeter un oeil et voir où je vais mal avec ça?fft matlab temps à freq et retour

[email protected](t) cos(1.5e12*t) 
nttf=2^17; 
t=linspace(-3*t_signal_pulse/2,3*t_signal_pulse/2,nttf); 
dni_ni=(1/(t(2)-t(1))); 
ni=-dni_ni/2:dni_ni/(nttf):dni_ni/2-dni_ni/(nttf); 
w=ni.*2*pi; 
figure(1) 
plot(t,fun_cos(t)) 
FFt_cos=fftshift(fft(fun_cos(t),nttf))/length(t); 
figure(2); 
plot(w,abs(FFt_cos)) 
fft_back=ifft(ifftshift(FFt_cos)); 
figure(1) 
hold on 
plot(t,abs(fft_back),'.r') 

Freq domain. you can see here two freq even though I only need one

Final result. The blue is the original cosine and the red is the one that I would expected to be the same

Aussi, si je veux ajouter la phase à la fois le domaine de domaine temporel et la fréquence individuellement (s'il vous plaît noter que je ne connais que d'un côté de la fréq. Phases de domaine et pas les deux donc je ne sais pas comment procéder à ce moment)

+0

S'il vous plaît fournir un [mcve] et en incluant également le résultat peut être utile. – m7913d

+0

vient d'ajouter une photo avec le résultat. Le bleu est la fonction originale. le rouge est celui que je pensais être le même mais comme vous pouvez le dire, ce n'est pas – elis02

Répondre

2

Vous avez oublié de rééchelonner avec « longueur (t) »:

fft_back=ifft(ifftshift(FFt_cos*length(t))); 

MaxError=max(abs(fun_cos(t)-fft_back)) %reconstruction error 
+0

Merci. Cela fonctionne. – elis02