python - scipy 和 matlab 谱图之间的差异

标签 python matlab scipy

我正在尝试将 MATLAB 脚本转换为 Python,但使用 scipy v. 0.17.0 时,MATLAB 2012a 和 Python 之间的频谱图函数结果之间存在细微差异。在 MATLAB 中我有代码:

WINDOW = 240;
NOVERLAP = 180;
NFFT = 1024;
Fs = 4;

[~,F,T,PP] = spectrogram(data,hanning(WINDOW),NOVERLAP,NFFT,Fs);

其中data是大约15000个点的一维数组,这里PP将给出每个部分的PSD。

在 Python 中,代码如下所示:

from scipy.signal.spectral import spectrogram

WINDOW = 240
NOVERLAP = 180
NFFT = 1024
Fs = 4

[f, ts_i, pp] = spectrogram(data, fs=Fs, window='hanning', nperseg=WINDOW, 
                            noverlap=NOVERLAP, nfft=NFFT, detrend=False)

当我比较输出(MATLAB - Python)时,我得到相似但不相同的结果。下面是第一段的图像 Python 和 MATLAB 结果与绝对差一起绘制 一点一点。此行为对于其他分割市场来说是类似的。再次 差异并不大,但我很好奇最终的是什么 造成这些差异的原因是什么?

enter image description here

最佳答案

Scipy 和 MATLAB 使用不同的 FFT 库。 Scipy 使用 lapack,而 MATLAB 使用 FFTW。这些库使用不同的算法并产生略有不同的结果。

您可以使用 pyFFTW 与 Python 一起使用 FFTW包,你甚至可以将 scipy 猴子补丁到 use FFTW其 FFT 计算的幕后功能,尽管即使如此,由于 FFTW 库可能以不同的方式调用,它可能不会给出数字相同的结果。

关于python - scipy 和 matlab 谱图之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38998522/

相关文章:

python-2.7 - Scipy安装cygwin64 Windows10后期失败

python - 在python中计算狄利克雷分布的pdf

python - 使用 hexbin 的 Pairplot

python - 有任何信息理论可以帮助我在无需目视检查的情况下对数据集进行聚类吗?

java - 此 JVM 不支持 Jython CP720,因此不能在 python.console.encoding 中使用它

matlab - 如何在 Matlab 中简化符号和数字混合表达式

matlab - 使用 ODE45 求解 ODE 系统

python - 如何将 Python 转义字符与 MatLab 命令结合起来?

python - scipy:如何使用 weibull_min.pdf?

Python:TypeError:Unicode 对象必须在散列之前编码