MATLAB 的 `cpsd()` 和 SciPy 的 `csd()` 有什么关系?

信息处理 matlab fft Python 频谱估计
2022-01-11 07:22:13

我正在尝试确定 Python 中两个加速度信号之间的 H1 传递函数的估计值。为此,我使用计算 Pyxscipy.signal.csd()并将其除以使用计算的 Pxxscipy.signal.welch()

我在 MATLAB 中使用了相同的方法,计算 Pyx usingcpsd()和 Pxx using并通过除法 Pyx / Pxxpwelch()成功重现了 using 的结果。tfestimate()

当我比较这两种方法时,使用 scipy 的结果大不相同,我无法确定为什么会这样。与在 MATLAB中使用有什么scipy.signal.csd()不同?cpsd()

1个回答

scipy.signal.csd()和 MATLABcpsd()使用 Welch 的方法。
但它们的默认参数不同:

  1. 窗口:在 MATLAB 上是汉明窗口。在 SciPy 上,它是 Hann Window。
  2. 分段:MATLAB 将信号分段为 8 个不重叠的分段。SciPy 使用 256 个样本的片段长度。
  3. 去趋势:默认情况下,SciPy 会删除平均值。MATLAB 没有。

似乎通过自己设置每个参数,您应该得到相同的结果。

请注意,您还需要查看pwelch()vs scipy.signal.welch().。