簡體   English   中英

Scipy和Matlab頻譜圖之間的區別

[英]Differences between scipy and matlab spectogram

我正在嘗試將MATLAB腳本轉換為Python,並使用scipy v。0.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結果以及逐點絕對差。 對於其他細分市場,此行為類似。 同樣,差異並不大,但我很好奇這些差異的最終原因是什么?

在此處輸入圖片說明

Scipy和MATLAB使用不同的FFT庫。 Scipy使用lapack,而MATLAB使用FFTW。 這些庫使用不同的算法,並產生略有不同的結果。

您可以使用FFTW與使用Python的pyFFTW包,你甚至可以猴子補丁SciPy的到FFTW使用在引擎蓋其FFT計算,但即使如此,它可能不會給數控機床,相同的結果,因為FFTW庫可以被稱為以不同的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM