gpt4 book ai didi

python - Octave/Matlab 与 Scipy 中的周期图

转载 作者:太空狗 更新时间:2023-10-29 20:21:43 26 4
gpt4 key购买 nike

我正在使用 scipy 将一些 matlab 代码移植到 python 并遇到以下行:

Matlab/Octave代码

[Pxx, f] = periodogram(x, [], 512, 5)

Python代码

f, Pxx = signal.periodogram(x, 5, nfft=512)

问题是我在同一数据上得到不同的输出。更具体地说,Pxx 向量是不同的。我为 signal.periodogram 尝试了不同的窗口,但没有运气(而且似乎默认的 scypy 的 boxcar 窗口与默认的 matlab 的矩形窗口相同)另一个奇怪的行为是在 python 中,Pxx 的第一个元素总是 0,无论什么数据输入是。

我错过了什么吗?任何建议将不胜感激!


带有实际数据的简单 Matlab/Octave 代码:http://pastebin.com/czNeyUjs
带有实际数据的简单 Python+scipy 代码:http://pastebin.com/zPLGBTpn

最佳答案

在研究了 octave 和 scipy 的周期图源代码后,我发现它们使用不同的算法来计算功率谱密度估计。 Octave (和 MATLAB)use FFT ,而 scipy 的周期图使用 Welch method .

正如@georgesl 所提到的,输出看起来很相似,但仍然不同。出于移植原因,这很关键。最后,我简单地写了一个小函数来使用 FFT 计算 PSD 估计值,现在输出是一样的。根据 timeit 测试,它的运行速度提高了约 50%(在 10.000 次迭代的循环中分别为 1.9006 秒和 2.9176 秒)。我认为这是因为 FFT 在 scipy 的实现中比 Welch 更快,只是速度更快。

感谢所有表现出兴趣的人。

关于python - Octave/Matlab 与 Scipy 中的周期图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17130795/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com