为什么 DFT 中的频率必须是整数?

信息处理 fft 信号分析 傅里叶变换 自由度 频域
2022-01-25 19:33:50

我不知道为什么 MATLAB 中的 DFT 和 FFT 的结果如下图所示。 在此处输入图像描述

fs=128;t=0:1/fs:1-1/fs;x=cos(2*pi*3.5*t); X=fft(x); N=长度(x);n=0:N-1;f=fs*n/N;绘图(f,abs(X)/N);

如果我将频率设置为整数,上面的结果是这样的 在此处输入图像描述

fs=128;t=0:1/fs:1-1/fs;x=cos(2*pi*3*t); X=fft(x); N=长度(x);n=0:N-1;f=fs*n/N;绘图(f,abs(X)/N);

请教我为什么会发生差异..

4个回答

有几种不同的方法可以解释 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 所固有的窗口伪影,该信号在孔径中不是完全整数周期的,因为圆形不连续性不能轻易地由一组仅纯循环连续基向量。

当您仅考虑有限长度的信号时,信号的频谱会变宽。这与将信号与矩形窗口相乘相同。当我们将两个信号相乘时,它们的频谱相互卷积,因此无限长度信号的频谱是傅里叶空间中的单个 delta 函数,它与矩形窗口的频谱卷积,后者是一个 sinc 函数。

现在考虑到 FFT 实际上对有限长度信号的频谱进行采样,有时 FFT 的 bin 会放在 sinc 函数的零点(在您的情况下为整数频率),我们会产生单一频谱的错觉。

这张图片来自奥本海姆的书中,它显示了包含 2 个单色信号的实际频谱和通过 FFT 获得的采样频谱。

在此处输入图像描述

此图像显示了具有更多点的 FFT。 在此处输入图像描述

有几种不同的方式来展示这一点。矩阵乘法是一种方法。如果你有一个满秩方阵那么 DFT 可以表示为矩阵向量乘法。有一个称为 dftmtx(N) 的 Matlab 函数将计算大小之一。DFT 矩阵是一个正交矩阵所以如果是一个 x DFT 矩阵 所以如果我们取一行 (第一行) ofA

AA1=I
NANN
AAH=NI
a1A
Aa1H=[N00]
这对于的任何行都是正确的(调整输出向量中的位置) DFT 也是线性的,所以如果Ab=αa1+βa2
AbH=N[αβ00]

当您选择 x=cos(2*pi*3*t) (整数频率)对应于的两行并且您得到 2 个非零热值。A

当您选择 x=cos(2*pi*3.5*t) (非整数频率)时,您需要所有行来表示它,并且您的 DFT 输出显示了这一点。

顺便说一句,您的频率轴应该从 -128/2 到 128/2

关系不限于 DFT。还有其他变换AAH=aI