为什么 DFT 中的频率必须是整数?
有几种不同的方法可以解释 DFT 的数学。我发现最适合解释 DFT 的这一特性和其他特性的假设是对连续傅立叶域进行采样,这会导致时域变为周期性(就像对信号进行采样,导致傅立叶域变为周期性一样)。
如果您的信号包含正弦波,则它具有单一频率。但是,如果这个正弦波的非整数周期由离散信号中的样本表示,那么在复制这些样本时就会出现不连续性。这种不连续性包含所有频率。
DFT 中使用的“频率”参数,通常表示为k,与信号的长度有关。如果您的信号恰好显示正弦波的单个周期,则该正弦波的频率k = 1。如果您正好看到两个周期,则它的频率k = 2。如果您看到一个半句点,那么k将是 1.5,这是不存在的。
画一个半周期的正弦波。现在复制该信号多次端到端:
x = cos(linspace(0,3*pi,1000));
plot(repmat(x,1,7))
set(gca,'xticklabel',0:7)
您现在有一个信号,其中最低频率对应于原始信号的重复,周期长度是原始信号的长度。这是k = 1。下一个频率是这个最低频率的两倍(周期是一半)。如果您研究上面的图表,您会注意到没有任何重复频率是最低频率的 1.5 倍(周期是原始信号的 1.5 倍)。由于信号的构造方式,不存在这样的频率。
长度为 N 的 DFT 是将矩阵分解为 N 个基向量,这些基向量恰好是 N 个正交正弦曲线(如果您认为基向量是实余弦和实正弦正弦曲线而不是复指数正弦曲线,则为 2N)。
如果一个信号在频率上与这些 DFT 基向量之一完全匹配,则它被表示为该单个基向量的幅度和相位。
但是,如果信号与那些 N 个正弦曲线之一的频率不完全匹配(例如,在 DFT 长度中不完全是整数周期),那么信息必须以某种方式表示,而不是与频率的精确匹配相同的方式。因此,关于其精确频率的信息被传播(分解)到所有 N 个 DFT 结果中,但主要是在频率上最接近信号的 DFT 结果箱。这是关于如何在变换中表示信息,并且不需要任何关于在 DFT 窗口之外继续的任何信号的周期性的错误假设。
另一种解释是,这种扩展是对可能更长的信号使用任何有限长度 FFT 或 DFT 所固有的窗口伪影,该信号在孔径中不是完全整数周期的,因为圆形不连续性不能轻易地由一组仅纯循环连续基向量。
有几种不同的方式来展示这一点。矩阵乘法是一种方法。如果你有一个满秩方阵那么 DFT 可以表示为矩阵向量乘法。有一个称为 dftmtx(N) 的 Matlab 函数将计算大小之一。DFT 矩阵是一个正交矩阵所以如果是一个 x DFT 矩阵 所以如果我们取一行 (第一行) of
当您选择 x=cos(2*pi*3*t) (整数频率)对应于的两行并且您得到 2 个非零热值。
当您选择 x=cos(2*pi*3.5*t) (非整数频率)时,您需要所有行来表示它,并且您的 DFT 输出显示了这一点。
顺便说一句,您的频率轴应该从 -128/2 到 128/2
关系不限于 DFT。还有其他变换