Why does values of fft change when length changes?

7 次查看(过去 30 天)
Hi, I've got the following code-
x =[1,2,3,2];
y = [2,2,2,0,-4,4,4];
xlen = length(x);
ylen = length(y);
resultlength = xlen+ylen-1;
x1 = [x zeros(1,resultlength-xlen)];
y1 = [y zeros(1,resultlength-ylen)];
X = fft(x); Y=fft(y);
X1 = fft(x1); Y1=fft(y1);
X2 = fft(x,512); Y2 = fft(y,512);
% X2 = X2(1:10); Y2 = Y2(1:10);
freq1 = linspace(0,100,resultlength);
freq2 = linspace(0,100,512);
plot(freq1,abs(X1),'ro'); hold;
plot(freq2,abs(X2),'bo');
Shouldn't the blue plot and the red plot follow each other? Why are there values in the red plot that are not in the blue plot?
Thanks!

采纳的回答

Star Strider
Star Strider 2017-12-23
You have zero-padded both of your ‘x’ signals, extending ‘x1’ from 4 to 10 by adding 6 zeros at the end, and ‘x2’ by zero-padding it out to a length of 512. The ‘energy’ in the signal are in the non-zero-padded data (zeros within the data are of course permitted). It is necessary to ‘normalise’ the fft by dividing the results by the length of the original (non-zero-padded) signal.
Compare the plots for these two normalised results:
X1 = fft(x1)/xlen;
X2 = fft(x,512)/xlen;
They come very close to overlapping. The blue curve has increased frequency resolution, so appears more continuous.
  5 个评论
Avishek  Mondal
Avishek Mondal 2017-12-26
Hey thank you so much! I realised this after tinkering with the resultlength value. Is there any documentation about how Matlab implements its fft function? I think this might help me.
So does this mean that zero padding improves the accuracy of the fft, i.e. fft is a closer approximation to the analytical Fourier Transform with more zero padding?
Once again, thanks for your help!
Star Strider
Star Strider 2017-12-26
As always, my pleasure!
See the references at the end of the fft documentation page for information on the MATLAB implementation. With respect to the Fourier transform itself, see Fourier Transforms (link). All good digital signal processing textbooks discuss the algorithm involved in calculating the Fast Fourier Transform in detail.
‘So does this mean that zero padding improves the accuracy of the fft, i.e. fft is a closer approximation to the analytical Fourier Transform with more zero padding?’
Yes! I could not have stated it better.

请先登录,再进行评论。

更多回答(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