在 python 中,如果我对复杂数据执行 fft,然后仅对正频率进行 irfft,这对数据有何影响?

In python, If I perform an fft on complex data, then irfft only the positive frequencies, how does that affect the data?

所以我正在尝试对一组实值点执行频移。为了实现频移,必须将数据乘以复数指数,从而使生成的数据变得复杂。如果我只乘以一个余弦,我会得到和频和差频的结果。我只想要总和或差值。

我所做的是将数据乘以复指数,使用 fft.fft() 计算 fft,然后仅在正频率上使用 fft.irfft() 以获得实数值只有频率和移或差移的数据集。这似乎很有效,但我想知道这样做是否有任何缺点,或者是否有更合适的方法来实现相同的目标。提前感谢您提供的任何帮助!

你所做的一切都很好。您正在生成解析信号,以与离散希尔伯特变换相同的方式适应负频率。您将遇到一些缩放问题 - 您需要将 FFT 结果的实际频率部分中的所有非直流和非奈奎斯特信号加倍。

一些实际问题是此方法会产生 window 大小的延迟,因此如果您尝试实时执行此操作,您可能应该检查使用 FIR Hilbert 变换器和适当的总和。在这种情况下,延迟将是希尔伯特变换器的群延迟。

另一个需要注意的事项是,您需要记住,信号的直流分量也会随着所有其他频率发生偏移。因此,我建议您在移动之前降低数据(保存值),在对数据进行 FFT 后将 DC bin 归零(以删除 DC bin 中结束的任何频率分量),然后将平均值加回去以保留最后的信号电平。