我真的很难理解MATLAB中的fft函数是如何工作的。 根据:
http://www.mathworks.de/help/matlab/math/fast-fourier-transform-fft.html
fs / n是频谱中采样点之间的距离,其中fs是采样频率,n是信号的长度。他们提供的代码确实提取了频率(虽然我不知道为什么),但根据fft的实现,他们提出了:
http://www.mathworks.de/help/matlab/ref/fft.html
光谱中各点之间的距离应为:1 / fs。因为不是索引j,所以插入j * T,其中T = 1 / fs是采样时间,然后你可以计算点之间的距离,这不应该是fs / n。
如果有人能解释一下频域中的点之间的距离是什么以及为什么会这样,我真的很感激:)
[编辑]
这不是Matlab特有的问题。关于傅里叶变换和离散傅立叶变换之间的关系以及频率轴的缩放/单位,这是一个更大的问题。可以在第3页的PDF-Document中找到一个很好的解释。
[/编辑]
答案 0 :(得分:2)
两种情况下,频谱上的频率点之间的距离为fs/n
,这是正确的值。如果我们采用http://www.mathworks.co.uk/help/matlab/ref/fft.html中的代码,我们就会:
>> Fs = 1000; % Sampling frequency
>> T = 1/Fs; % Sample time
>> L = 1000; % Length of signal
>> t = (0:L-1)*T; % Time vector
>> NFFT = 2^nextpow2(L); % Next power of 2 from length of y
>> f = Fs/2*linspace(0,1,NFFT/2+1);
>> f(2)-f(1)
ans = 0.97656
>> Fs/NFFT
ans = 0.97656
你可以仔细检查所有其他f(n+1)-f(n)
,它们都是一样的。