Matplotlibでパワースペクトル密度(PSD)をプロットする方法
Matplotlibを使ってパワースペクトル密度(Power Spectral Density: PSD)をプロットするには、以下の手順に従います。
手順
- 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。
- 時間刻み幅を表す変数 dt を初期化します。
- NumPyを使用して、t(時間)、nse(正規乱数ノイズ)、r(指数関数的に減衰する応答)、cnse(畳み込み後のノイズ)、s(信号)などのデータ点を作成します。
- 図と一連のサブプロットを作成します。
- plot() メソッドを使って、t と s のデータをプロットします。
- 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付近に正弦波成分によるピークが現れ、低周波域ほどノイズ成分のパワーが大きくなる傾向が確認できます。
-
Matplotlibを使ってPythonで3D密度マップを描画する方法を徹底解説
MatplotlibとNumPyを組み合わせると、Pythonで簡単に3D密度マップ(濃度分布図)を作成できます。本記事では、pcolormesh()メソッドを使って擬似カラープロットとして密度マップを可視化する具体的な手順を、サンプルコード付きでわかりやすく解説します。 3D密度マップを描画する基本の手順 NumPyでデータを生成する:side、x、y、zの各データをNumPyで作成します。特にlinspace関数を使うと、指定した2点間の範囲を任意の分割数で等間隔にデータ生成できるため便利です。 座標行列を作成する:sideデータをもとにmeshgrid()を使い、座標ベクトルから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