Why does values of fft change when length changes?
3 次查看(过去 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!
0 个评论
采纳的回答
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 个评论
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 Center 和 File Exchange 中查找有关 Spectral Measurements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!