我正在使用numpy
对实值数据进行 FFT。而且我不明白为什么奈奎斯特频率总是真实的(或零相位)。
所以,say A = rfft(data)
thenA[-1]
总是一个真正的值,而不是复杂的。这是该频率的正确值吗?或者这是一个可以修复的计算工件?
文档中给出的解释是:
A[-1]
包含表示正和负奈奎斯特频率的术语(+fs/2 和 -fs/2),并且也必须是纯实数。
有没有办法只提取正频率并消除由真实 FFT 的厄米特性质引起的虚部退化?
我正在使用numpy
对实值数据进行 FFT。而且我不明白为什么奈奎斯特频率总是真实的(或零相位)。
所以,say A = rfft(data)
thenA[-1]
总是一个真正的值,而不是复杂的。这是该频率的正确值吗?或者这是一个可以修复的计算工件?
文档中给出的解释是:
A[-1]
包含表示正和负奈奎斯特频率的术语(+fs/2 和 -fs/2),并且也必须是纯实数。
有没有办法只提取正频率并消除由真实 FFT 的厄米特性质引起的虚部退化?
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 度相位将在所有采样瞬间为零。
请注意,组件可能具有负值,因此“无相位信息”可能不是完美的描述。