how to make inverse fourrier transform in the correct way?

5 views (last 30 days)
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 Comments
Adam
Adam on 7 Jul 2016
That probably comes from doing an fftshift - this is un-necessary and indeed gives incorrect results when applying an ifft to its result.

Sign in to comment.

Accepted Answer

Thorsten
Thorsten on 7 Jul 2016
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

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by