필터 지우기
필터 지우기

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 CenterFile Exchange에서 Fourier Analysis and Filtering에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by