how to make inverse fourrier transform in the correct way?
2 次查看(过去 30 天)
显示 更早的评论
as you can see in my code, i made a fft of a simple signal but when i try to reconstruct it using ifft i can only see it in the ABS way, meaning that the ifft that i made is incorrect, please let me know what i did wrong
clear all
close all
clc
Ts=0.001;
t=0:Ts:10;
omega1=2*pi*15;
omega2=2*pi*40;
x=sin(omega1*t)+sin(omega2*t);
figure(1)
subplot(4,1,1)
plot(t,x)
grid on
xlim([0 0.1*pi])
title('\bf x=sin(\omega_1t)+sin(\omega_2t)')
xlabel('t[sec]')
ylabel('x(t)')
X_dft=fftshift(fft(x))/length(x);
Fs=1/Ts;
f=linspace(-Fs/2,Fs/2,length(t));
subplot(4,1,2)
plot(f,abs(X_dft))
grid on
xlim([-60 60])
title('\bf |Fourrier(x)|')
xlabel('f[Hz]')
ylabel('|X(f)|')
subplot(4,1,3)
X_phase=angle(X_dft);
plot(f,X_phase)
grid on
xlim([-60 60])
title('\bf Phase(x)')
xlabel('f[Hz]')
ylabel('Angle (\theta) [Radians]')
subplot(4,1,4)
x_ifft=abs(ifft(X_dft))*length(x);
plot(t,x_ifft)
grid on
xlim([0 0.1*pi])
title('\bf |x=sin(\omega_1t)+sin(\omega_2t)|')
xlabel('t[sec]')
ylabel('|x(t)|')
5 个评论
Adam
2016-7-7
That probably comes from doing an fftshift - this is un-necessary and indeed gives incorrect results when applying an ifft to its result.
采纳的回答
Thorsten
2016-7-7
Simple as this:
u = fft(x);
x2 = ifft(u);
The difference is within the tolerance of machine precision:
max(abs(x - x2))
ans =
3.10862446895044e-15
0 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Fourier Analysis and Filtering 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!