Huge difference between the result of fft function Matlab and analytical Fourier transform of the same function

조회 수: 29(최근 30일)
Hey,
I am trying to find a way to obtain the numerical fourier transform of a function (it is not a signal and I only want to obtain the numerical fourier transform of a function). For a test code, I tried to see what is the result of fft matlab for a Gaussian function and compared it with the analytical fourier transform of this Gaussian. I have attached the plot of both results. Why the amplitude of fft result is that huge compared to analytical result? I can use fftshift to shift the result of fft to center but still the issue of amplitudes are there. I am wondering isn't it because it is a Gaussian function and so not periodic over time? Does fft only works if the function we have is spanned from -infinity to +infinity (basically a signal)? or we can use it if we want ot calculate the fourier transform of a function which spans from t-1 to t-2?
  댓글 수: 2
Shaily_T
Shaily_T 2022년 9월 11일
Thanks for your response! I mean, my function starts at a certain point and ends at another certain point in time. For example, if we have a sin(2*pi*t) function, it is a periodic function that spans over the whole time range but a Gaussian function will start at a certain point and end at another certain point. My question is, can fft be used for both cases? By your second response, do you mean what I have done and shown in the code now? Multiplying fftshift by ts. Because now, I can get a similar result to the analytical form.
Here is my code for a Gaussian function.
I also have confusion which I appreciate your help for. I checked the result of fftshift by incorporating your guidance for multiplying it by ts, and its result is the same as using the direct definition of the fourier transform by allying trapz function. However, my question is, why is the result of fft before implementing fftshift strange? I have attached the plot. Indeed it shows two peaks in the frequency domain, which I’m pretty sure is not the case for the fourier transform of a Gaussian. I have seen some explanations, but still, I don’t understand why.
%% test for fourier of simple function
N = 5E4;
ts = 0.1;
t = (-N/2:N/2-1)*ts;
f = exp(-pi*(t.^2));
% plot(t,f)
deltaf = 1/(N*ts);
w = ((-N/2:N/2-1))*deltaf;
fourierf = exp(-pi*w.^2);
plot(w,fourierf)
fft_f = fft(f);
shift_fft_f = ts*fftshift(fft_f);
plot(w,abs(shift_fft_f))

댓글을 달려면 로그인하십시오.

채택된 답변

Paul
Paul 2022년 9월 11일
Can't say for sure w/o seeing the code, but I supsect the fftshifted curve will be close to the blue curve if you mulitply the fftshifted result by the sampling period.
  댓글 수: 6
Shaily_T
Shaily_T 2022년 9월 15일
Thank you so much Paul! I really appreciate your time to clarify all of this things to me! Thank you!

댓글을 달려면 로그인하십시오.

추가 답변(1개)

David Goodmanson
David Goodmanson 2022년 9월 11일
편집: David Goodmanson 2022년 9월 11일
Hi ST,
Your frequency grid runs from -5 to 5, which for an fft is -fs/2 to fs/2 (fs being the sampling frequency), so fs = 10. The sampling interval delta_t = 1/fs = 1/10. It appears that you are trying to approximate a continuous Riemann integral
Int g(t) e^(-2pi i f t) dt
by using the fft. That approximation is a sum over indices (done by the fft) times the width of the intervals.
Sum (stuff) * delta_t
So if you multiply by 1/10, that takes the fft result down by exactly the right amount.
  댓글 수: 1
Shaily_T
Shaily_T 2022년 9월 11일
Hi DG,
Thanks for your nice explanation! so, fft function indeed do a summation over the indices. Is that correct?
Also, If possible could you please comment on my latter questions as well? I mean this part:"I also have confusion which I appreciate your help for. I checked the result of fftshift by incorporating your guidance for multiplying it by ts, and its result is the same as using the direct definition of the fourier transform by allying trapz function. However, my question is, why is the result of fft before implementing fftshift strange? I have attached the plot. Indeed it shows two peaks in the frequency domain, which I’m pretty sure is not the case for the fourier transform of a Gaussian. I have seen some explanations, but still, I don’t understand why."
Thank you so much!

댓글을 달려면 로그인하십시오.

범주

Find more on Fourier Analysis and Filtering in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by