我正在尝试将 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 结果与绝对差一起绘制 一点一点。此行为对于其他分割市场来说是类似的。再次 差异并不大,但我很好奇最终的是什么 造成这些差异的原因是什么?
最佳答案
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/