2016-08-17 6 views
0

私はMATLABスクリプトをPythonに変換しようとしていますが、scipy v。0.17.0を使用してMATLAB 2012aとPythonの間のspectrogram関数の結果にわずかな違いがあります。 MATLABで私がコードしている:データは約15000点の一次元アレイであり、ここでPPは、各セクションのPSDをscipyとmatlabスペクトラムの違い

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

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

与えます。私は似ているが同一ではない結果を得る - 私は、出力(PythonのMATLAB)を比較すると

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) 

:Pythonで

のコードは次のようになります。以下は、 のPythonとMATLABの結果を最初のセグメントの画像で示したもので、絶対的な差異 を1点ずつプロットしたものです。この動作は他のセグメントと同様です。再び 違いは大きくありませんが、私はこれらの違いの原因が究極の であるのが不思議です。

enter image description here

答えて

1

scipyのダウンロードとMATLAB異なるFFTライブラリを使用しています。 Scipyはlapackを使用し、MATLABはFFTWを使用します。これらのライブラリは異なるアルゴリズムを使用し、わずかに異なる結果を生成します。

でも、それはFFTWライブラリので、数値的に同一の結果が得られないかもしれないが、あなたがpyFFTWパッケージを使ってPythonでFFTWを使用することができますし、あなたがそのFFT計算のためのボンネット下use FFTWにも、サル・パッチscipyのダウンロードすることができますさまざまな方法で呼び出すことができます。