why fft (exp(-t)) don't fit my analytique expression?
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Rabih Sokhen
el 3 de Feb. de 2022
Comentada: William Rose
el 5 de Feb. de 2022
Hey guys, I am trying to find the fft of exp (-t).
Also, I know that's the fft of (exp (-t)) is --> 1/(1+i*2*pi *f)
I tried to compare the fft (exp (-t)) with 1/(1+i*2*pi *f) and I didn't get the same result, when I zoom in I have almost the same shape but not the same amplitude.
can someone help me ?
thank you in advance
my code is :
clear all
clc
dt=0.1;
t=[-5:dt:5];
z=length(t);
f= (-z/2 : z/2 -1)*1/dt;
h_t=exp(-t);
h_f1=fftshift(fft(h_t))/z;
h_f2=1./(1+1i*2*pi*f);
subplot(1,2,1)
plot(t,h_t,'r')
title('h_t = e^-^t')
subplot(1,2,2)
plot(f,real(h_f1),'b',f,real(h_f2),'r')
grid on
title('h_f=TF(h_t)= 1/(1+i2\pif)')
legend('h_f_1=TF(h_t)', 'h_f_2=1/(1+2\pi i f)')
0 comentarios
Respuesta aceptada
Matt J
el 3 de Feb. de 2022
Editada: Matt J
el 3 de Feb. de 2022
dt=0.001;
t=-5:dt:5;
N=numel(t);
f= t/N/dt^2;
h_t=exp(-t).*(t>=0); %<---- truncate to zero for t<0
h_f1=fftshift(fft(ifftshift(h_t)))*dt; %<---- scale by dt, not 1/z
h_f2=1./(1+1i*2*pi*f);
subplot(1,2,1)
plot(t,h_t,'r')
title('h_t = e^-^t')
subplot(1,2,2)
plot(f,real(h_f1),'xb',f,real(h_f2),'r')
grid on
title('h_f=TF(h_t)= 1/(1+i2\pif)')
legend('h_f_1=TF(h_t)', 'h_f_2=1/(1+2\pi i f)')
xlim([-2,2])
2 comentarios
Matt J
el 4 de Feb. de 2022
Editada: Matt J
el 4 de Feb. de 2022
Regarding f, when working with FFTs, you have to make sure dt,df, and N satisfy N*dt*df=1. So,
f=df*(t/dt)=t/(N*dt^2)
Regarding h_f1, you are using the FFT to approximate the continuous Fourier transform integral. In the formula for the Fourier transform, we can clearly see that the exponentials need to be weighted by both the signal samples x(t) and dt..
Más respuestas (1)
William Rose
el 3 de Feb. de 2022
The difference is due to differences in normalization of the discrete Fourier transform (DFT) of x(t), where x(t) is discrete, and the continuous Fourier transform (cFT) of x(t), where x(t) is continuous.
The code below compares the absolute value of the DFTs of three discrete signals to the Fourier transform of the continuous signal. The three discrete signals are x=e(-at), sampled at different rates and durations.
The deviation between the DFT and cFT at high frequencies (where high means approaching the Nyquisy frequency) is due to the fact that the DFT is the convolution in frequency domain, or multiplication in the time domain, of a boxcar sequence with x(t). Another way of thinking of it is that the DFT must produce a signal that repeats over and over. In this case, that means restarting the decaying exponential after 5 or 10 secnds, depending on which version of x(t) we're looking at. That requires an almost discontinuous jump, which requires power at high frequencies to produce. So the DFT has power at high frequencies while the cFT does not.
The deviaiton between the DFT and cFT at f=0 is due to the fact that the DFT's value at DC, X(0), equals the sum of all the points in the signal. Put another way, it equals the mean value of the signal times N, the number of points. The cFT=1 at f=0. COnsider the three discrete signals X1, X2, X3. The mean value is approximately 1/a (=the area under a decaying exponential with rate constant a) divided by the signal duration in seconds. So, for the three signals, that is
mean =(1/a)/Tmax=(1/a)/(N*dt)=fs/(a*N)
X(f=0)=mean*N=[fs/(a*N)]*N=fs/a
The plots of abs(X(f)) show that this is in fact true. and it epxlains the discrepancy at DC between the DFT and the cFT.
%fourierTransformComparison.m
%Compare FFT of discrete signal to the theoretical Fourier transform.
%W. Rose 2022-02-03
clear;
N1=100;
fs1=10; %sampling rate (Hz)
t1=(0:N1-1)/fs1; %time vector (s)
f1=(0:N1-1)*fs1/N1; %frequency vector (Hz)
a=1.0; %rate constant (1/s)
x1=exp(-a*t1);
X1=fft(x1);
N2=50;
fs2=10; %sampling rate (Hz)
t2=(0:N2-1)/fs2; %time vector (s)
f2=(0:N2-1)*fs2/N2; %frequency vector (Hz)
a=1.0; %rate constant (1/s)
x2=exp(-a*t2);
X2=fft(x2);
N3=100;
fs3=20; %sampling rate (Hz)
t3=(0:N3-1)/fs3; %time vector (s)
f3=(0:N3-1)*fs3/N3; %frequency vector (Hz)
a=1.0; %rate constant (1/s)
x3=exp(-a*t3);
X3=fft(x3);
Xtheo=1./(a+1i*2*pi*f3);
figure;
subplot(121)
plot(t1,x1,'-r.',t2,x2,'-gx',t3,x3,'-bo');
grid on; xlabel('Time (s)'); ylabel('x(t)');
legend('N=100,fs=10','N=50,fs=10','N=100,fs=20');
subplot(122)
plot(f1,abs(X1),'-r.',f2,abs(X2),'-gx',f3,abs(X3),'-bo',f3,abs(Xtheo),'-k^');
grid on; xlabel('Frequency (Hz)'); ylabel('|X(f)|');
legend('N=100,fs=10','N=50,fs=10','N=100,fs=20','Theo');
Experiment with the code above.
2 comentarios
William Rose
el 5 de Feb. de 2022
@Rabih Sokhen, You're welcome. Good luck with your work and your studies.
Ver también
Categorías
Más información sobre Spectral Measurements en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!