python - 为什么将 NumPy FFT 的输出除以 N?
问题描述
在许多教程/博客中,我看到了np.fft.fft(signal)
除以样本点数的输出N
。
我知道在某些实现中,变换是通过一些因素来缩放/标准化的,比如乘以N
. 但是,我只是阅读了文档,默认情况下输出fft.fft()
是未缩放的。然而,我仍然看到输出除以N
任何地方。
为什么是这样?
我注意到,通过按比例缩放输出,1/N
我可以得到贡献波信号的正确幅度。所以显然这是必要的,但我想了解纯输出与缩放输出相比是什么。
解决方案
要使 DFT 可逆 ( x == IDFT(DFT(x))
),您需要除以N
某处。在信号处理中,这种归一化通常在逆变换中完成。例如Wikipedia 以这种方式显示它。在其他领域,它更经常在前向变换中完成。在物理学中,我已经看到一半的归一化 ( 1/sqrt(N)
) 应用于每个变换,使它们对称。
当正向变换归一化时,它返回的值与信号长度无关(例如,零频率是所有信号值的平均值)。因此,在研究信号功率时,这是更有用的变体。
在逆变换中应用归一化的变体(通常在信号处理软件中实现,例如np.fft.fft()
和 MATLAB 的fft
),然后在频域中通过乘法计算卷积是最简单的:可以直接编写g = IDFT(DFT(f)*DFT(h))
. 如果在其他地方应用归一化,则必须部分撤消以获得正确缩放的结果。
其他软件,例如 FFTW 库,根本不规范化转换,这取决于用户。如果用户想要一个不同于库选择的标准化变体,这可以避免不必要的乘法。
推荐阅读
- entity-framework-core - Entity Framework Core Insert 不遵守默认值
- reactjs - 创建可用于 Vue 和 React 应用程序的动态页眉和页脚的最佳方法是什么?
- elasticsearch - serilog 解构 - 混合类型
- python - 递归函数:用python递归
- python - Python - 向用户显示游戏保存文件的推荐方式
- google-cloud-dataflow - PAssert 与字符串不匹配
- python - Anaconda python 路径似乎没有更新
- workflow - 仅在不存在延期交货项目时转换项目履行的工作流程
- angular - 如何将触觉/触觉反馈与 angular 和 nativescript 结合到我的应用程序中?
- asp.net - 如何在 ASP.NET Webforms 的 GridView 中获取选定的单元格值?