how to make inverse fourrier transform in the correct way?

2 ビュー (過去 30 日間)
Kobi
Kobi 2016 年 7 月 7 日
コメント済み: Adam 2016 年 7 月 7 日
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 件のコメント
Kobi
Kobi 2016 年 7 月 7 日
the real part shows me some weird signal with a lot of fluctuations....
Adam
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
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 件)

カテゴリ

Help Center および File ExchangeFourier Analysis and Filtering についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by