Why does values of fft change when length changes?
14 views (last 30 days)
Show older comments
Avishek Mondal
on 23 Dec 2017
Commented: Star Strider
on 26 Dec 2017
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!
0 Comments
Accepted Answer
Star Strider
on 23 Dec 2017
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 Comments
Star Strider
on 26 Dec 2017
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.
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!