Python
 Computer >> コンピューター >  >> プログラミング >> Python

Matplotlibでパワースペクトル密度(PSD)をプロットする方法

Matplotlibを使ってパワースペクトル密度(Power Spectral Density: PSD)をプロットするには、以下の手順に従います。

手順

  • 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。
  • 時間刻み幅を表す変数 dt を初期化します。
  • NumPyを使用して、t(時間)、nse(正規乱数ノイズ)、r(指数関数的に減衰する応答)、cnse(畳み込み後のノイズ)、s(信号)などのデータ点を作成します。
  • 図と一連のサブプロットを作成します。
  • plot() メソッドを使って、ts のデータをプロットします。
  • psd() メソッドを使ってパワースペクトル密度をプロットします。
  • show() メソッドで図を表示します。

コード例

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

dt = 0.01
t = np.arange(0, 10, dt)
nse = np.random.randn(len(t))
r = np.exp(-t / 0.05)
cnse = np.convolve(nse, r) * dt
cnse = cnse[:len(t)]
s = 0.1 * np.sin(2 * np.pi * t) + cnse

fig, (ax0, ax1) = plt.subplots(2, 1)
ax0.plot(t, s)
ax1.psd(s, 512, 1 / dt)

plt.show()

コードの解説

このコードでは、まず dt = 0.01 としてサンプリング間隔を定義し、np.arange() で0から10秒までの時間軸を作成しています。次に np.random.randn() でホワイトノイズを生成し、それを指数関数的に減衰するインパルス応答と畳み込むことで、色付きノイズ(相関のあるノイズ)を作り出しています。

最終的な信号 s は、振幅0.1の正弦波(1Hz)とこのノイズ成分を合成したものです。上段のサブプロットには時間領域の波形を表示し、下段のサブプロットでは psd(s, 512, 1 / dt) を呼び出して周波数領域におけるパワースペクトル密度を可視化します。第2引数の512はNFFT(FFTポイント数)、第3引数の 1 / dt はサンプリング周波数を表します。

実行結果

実行すると、上段に時間領域の信号波形が、下段に対応するパワースペクトル密度が表示されます。PSDのグラフからは、1Hz付近に正弦波成分によるピークが現れ、低周波域ほどノイズ成分のパワーが大きくなる傾向が確認できます。

  1. Matplotlibを使ってPythonで3D密度マップを描画する方法を徹底解説

    MatplotlibとNumPyを組み合わせると、Pythonで簡単に3D密度マップ(濃度分布図)を作成できます。本記事では、pcolormesh()メソッドを使って擬似カラープロットとして密度マップを可視化する具体的な手順を、サンプルコード付きでわかりやすく解説します。 3D密度マップを描画する基本の手順 NumPyでデータを生成する:side、x、y、zの各データをNumPyで作成します。特にlinspace関数を使うと、指定した2点間の範囲を任意の分割数で等間隔にデータ生成できるため便利です。 座標行列を作成する:sideデータをもとにmeshgrid()を使い、座標ベクトルから2次元

  2. PythonのMatplotlibでX軸に日付をプロットする方法

    Pythonで時系列データを可視化する際、X軸に日付を表示したいケースはよくあります。PandasとMatplotlibを組み合わせれば、日付をインデックスとしたデータフレームを作成し、gcf().autofmt_xdate()を使うことでX軸の日付表示を自動的に整形できます。実装の手順日付文字列のリストを作成し、pd.to_datetime()を使ってdatetime型に変換します。プロットするデータとして data = [1, 2, 3] を用意します。DataFrame() オブジェクト(ここではDF)を生成します。DFの value 列に手順2のデータを設定します。手順1で作成したda