scipy和matlab谱图之间的差异

时间:2016-08-17 13:48:04

标签: python matlab scipy

我正在尝试将MATLAB脚本转换为Python,并使用scipy v.1.17.0在MATLAB 2012a和Python之间运行spectrogram函数的结果之间的细微差别。在MATLAB中我有代码:

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

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

其中数据是大约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

1 个答案:

答案 0 :(得分:1)

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

你可以使用pyFFTW包将FFTW与Python结合使用,你甚至可以将scipy修改为use FFTW以进行FFT计算,尽管它可能不会在数字上给出 - 由于FFTW库可能以不同的方式调用,因此会产生相同的结果。