为什么 RFFT 的最后一个值总是实数?

信息处理 傅里叶变换
2022-02-09 11:10:50

我正在使用numpy对实值数据进行 FFT。而且我不明白为什么奈奎斯特频率总是真实的(或零相位)。

所以,say A = rfft(data)thenA[-1]总是一个真正的值,而不是复杂的。这是该频率的正确值吗?或者这是一个可以修复的计算工件?

文档中给出的解释是:

A[-1]包含表示正和负奈奎斯特频率的术语(+fs/2 和 -fs/2),并且也必须是纯实数。

有没有办法只提取正频率并消除由真实 FFT 的厄米特性质引起的虚部退化?

3个回答

FFT 或 DFT 的实部表示余弦或偶数正弦曲线(围绕中心对称),虚部表示正弦或奇数正弦曲线(围绕中心反对称)。反对称波形必须在偶数长度窗口的中心为零。如果频率为 Fs/2 的正弦曲线在任何样本处为零,则在以 Fs 采样率采集的所有样本处为零。出于同样的原因,DFT 变换的基向量在 N/2 处的虚部也全为零。因此,Fs/2 处的假想 bin 是零乘以零的总和,并且必须为零。对于偶数长度的 DFT,将结果严格保留在 bin N/2 中。也许这是您为 A(-1) 报告的 RFFT 实施报告的 bin。

这也是奈奎斯特采样率必须高于 the_highest_frequency / 2,而不等于的原因。如果在以 F/2 采样时该分量恰好具有频率 F,则采样将遗漏任何反对称波形或波形分量的一部分(在任何偶数长度的样本中)。

奇数长度 FFT 有不同的规则。

想一想:最后的 FFT 将使用“复数”指数进行,其值[1 -1 1 -1 1 -1 ...]始终为实值。如果信号也是实数值,则该系数不能是复数。

正交(或虚数)部分提供了有关分量相位的信息,但对于实数输入,第一个分量(零频率或 DC)和最后一个分量都没有可用的此类相位信息。如其他答案所述,该分量的系数为+-1(正如零频率分量的系数均为+1),因此它只能测量幅度。最后一个分量的相位将反映在幅度中;零相位将是全幅值(在每个采样瞬间也是 +-1),90 度相位将在所有采样瞬间为零。

请注意,组件可能具有负值,因此“无相位信息”可能不是完美的描述。