【发布时间】:2014-10-27 15:45:18
【问题描述】:
我真的很难理解 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 中可以找到一个很好的解释。
[/编辑]
【问题讨论】:
-
你在说
f = (0:n-1)*(fs/n)和t = (0:L-1)*T;在哪里?你是否意识到有时间和频率——两个不同的东西?我感觉您对如何使用 f、Fs 和 T 完成绘图感到困惑。 -
是的,我说的是 f = (0:(n-1))*(fs/n);即频率范围。时间范围是正确的,但频率范围对我来说没有意义。如果您查看 MATLAB 用于实现的 DFT 公式,您会在指数中看到:
-
(−2πi)/N*(j-1)*(k-1) 其中 j 是 x(j) 中和和时间索引的索引,k 是频谱。由于 x 在 x(jT) 处采样,因此应将其用于频率范围(以赫兹为单位,如果 T 以秒为单位):
f = (0:n-1)*(1/fs);