10

scipy を使用していくつかの matlab コードを python に移植していますが、次の行で行き詰まりました。

Matlab/オクターブ コード

[Pxx, f] = periodogram(x, [], 512, 5)

Python コード

f, Pxx = signal.periodogram(x, 5, nfft=512)

問題は、同じデータに対して異なる出力が得られることです。具体的には、Pxx ベクトルが異なります。signal.periodogram に別のウィンドウを試してみましたが、うまくいきませんでした (デフォルトの scypy のボックスカー ウィンドウは、デフォルトの matlab の長方形のウィンドウと同じようです)。もう 1 つの奇妙な動作は、Python では、Pxx の最初の要素が、データに関係なく常に 0 であることです。入力は。

何か不足していますか?どんなアドバイスでも大歓迎です!


実際のデータを含む単純な Matlab/Octave コード: http://pastebin.com/czNeyUjs
実際のデータを含む 単純な Python+scipy コード: http://pastebin.com/zPLGBTpn

4

4 に答える 4

3

私は同じ問題に直面しましたが、 scipyのピリオドグラムのドキュメントに出くわしました

そこにあるように、 detrend='constant' がデフォルトの引数です。これは、Python が各ポイントから入力データの平均を自動的に減算することを意味します。(ここを読む)。Matlab/Octave はそのようなことはしませんが、それが出力が異なる理由だと思います。detrend=False を指定してみてください。scipy のピリオドグラムを呼び出しているときに、Matlab と同じ出力が得られるはずです。

于 2015-07-01T10:06:28.367 に答える
0

結果を見ましたか?

出力

2 つの結果のわずかな違いは、最適化、デフォルト ウィンドウ、実装などに起因する可能性があります。

于 2013-06-21T13:55:00.857 に答える