为什么要计算 DFT 的负频率?

信息处理 频谱 自由度
2021-12-20 18:11:26

这个答案说,在计算实值信号的 DFT 时,(大约)后半个 bin 是前半个 bin 的复共轭。首先我很好奇这是真的吗?

如果这是真的,似乎出于频率分析的目的,您可以放弃计算箱的后半部分,如果您想在频域中存储信息,这应该有助于计算时间和存储空间,因为您可以计算下半年信息点播。

对于人们在进行 FFT 时的期望,这似乎也“更正确”。

例如,如果使用等式:

Xk=1Nn=0N1xke2iπkn/N,k[0,N),kZ

如果您对 4 个样本余弦波进行 DFT:[1,0,1,0],它给出了结果:[0,0.5,0,0.5].

但是,如果您只计算正频率,将等式修改为这样似乎是合理的:

Xk=2Nn=0N1xke2iπkn/N,k[0,N/2),kZ

当应用于 4 个样本余弦波时,我们得出以下结果: [0,1]

它表明它似乎更正确(无论如何对我来说!)0 Hz(DC) 的幅度为 0,并且1 Hz幅度为 1。另一种方式有点令人困惑,其中1 Hz波在正负之间分裂1 Hz频率。

那么,为什么对于实值信号,我们甚至会费心计算和报告负频率呢?

2个回答

主要是因为它更容易。FFT 是一种计算 DFT 的特定算法。但是,它仅在您计算所有频率时才有效(无论您是否想要它们)。它接受 N 个复数值并吐出 N 个复数值。因此,FFT 可用于评估您的第一个方程式,但不能评估您的第二个方程式。

在您的示例中,这是一个微不足道的区别;但对于较大的 FFT 大小,这会产生很大的不同。使用 FFT 计算负频率的值并简单地将它们丢弃然后使用不同的算法仅计算正频率的值要快得多。

话虽如此,有一些方法可以利用冗余:

  1. 您可以将两个实信号打包成一个复数,执行一个复数 FFT 并将其拆分为奇数和偶数部分,以获得两个输入信号的 DFT
  2. 有一种方法可以使用 N/2 点复 FFT 进行 N 点实 DFT。它只需要一个额外的“展开”结果阶段。

DFT 不会将信号分解为规则的正弦曲线,而是将其分解为复指数。因此,实数值信号的傅里叶变换必须是共轭对称的(同时具有正频率和负频率),因为当我们计算逆 DFT 时,DFT 的实数值会相加,而虚部相抵消,得到实数值信号。你的例子x=[1,0,1,0] 是一种特殊情况,因为它的 DFT 表示没有任何复系数(但它仍然是共轭对称的),如果你考虑类似x=[1,0,1,1]你会看到它的 DFT 是

f=[1.0+0.0i,2.0+1.0i,1.0+0.0i,2.01.0i]

现在您需要所有系数来获得信号的逆 DFT。并注意系数不相同,而是共轭的。