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

PythonのMatplotlibでマグニチュードスペクトルをプロットする方法

信号処理において、マグニチュードスペクトル(振幅スペクトル)の可視化は周波数成分を分析する上で非常に重要です。PythonのMatplotlibライブラリには、magnitude_spectrum()メソッドが用意されており、簡単にマグニチュードスペクトルを描画できます。

マグニチュードスペクトルをプロットする手順

以下の手順に従って、マグニチュードスペクトルをプロットできます。

  • 図のサイズを設定し、サブプロット間および周囲のパディングを調整します。
  • 乱数のシード値を設定して、結果の再現性を確保します。
  • サンプリング間隔としてdtを初期化し、そこからサンプリング周波数を求めます。
  • 時間軸tのためのデータ点を作成します。
  • NumPyを使用して、nse(ホワイトノイズ)、r(減衰衰係数)、cnse(畳み込みノイズ)、s(合成信号)を生成し、ノイズを含む信号を作成します。
  • subplots()メソッドを使って、図とサブプロットのセットを作成します。
  • プロットにタイトルを設定します。
  • magnitude_spectrum()メソッドでマグニチュードスペクトルを描画します。
  • show()メソッドで図を表示します。

コード例

import matplotlib.pyplot as plt
import numpy as np

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

np.random.seed(0)

dt = 0.01 # サンプリング間隔
Fs = 1 / dt # サンプリング周波数
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(4 * np.pi * t) + cnse

fig, axs = plt.subplots()

axs.set_title("Magnitude Spectrum")
axs.magnitude_spectrum(s, Fs=Fs, color='C1')

plt.show()

このコードでは、まずnp.random.seed(0)でシード値を固定することにより、実行するたびに同じ乱数が生成されるようにしています。次に、サンプリング間隔dt = 0.01からサンプリング周波数Fs = 100Hzを計算し、0〜10秒の時間軸を作成します。

ノイズ生成の部分では、正規分布に従うホワイトノイズnseを生成し、指数関数的に減衰する係数rとの畳み込みによって色付きノイズcnseを作成しています。最後に、振幅0.1・频率2Hzの正弦波とこのノイズを合成して信号sとします。

magnitude_spectrum()メソッドの引数Fs=Fsにより、x軸が実際の周波数(Hz)で表示され、オレンジ色('C1')でスペクトルが描画されます。実行すると、2Hz付近に正弦波成分によるピークが確認でき、ノイズ成分が広い周波数帯域にわたって分布している様子がわかります。

  1. Python Matplotlibで単一のポイント(点)をプロットする方法

    Matplotlibを使えば、たった1つのデータポイントでも簡単にグラフ上へプロットできます。ここでは、単一の点をプロットするための基本的な手順を解説します。 単一ポイントをプロットする手順 x と y のリストを、単一の値で初期化します。 plt.xlim() および plt.ylim() を使って、X軸・Y軸の表示範囲を0〜5に設定します。 plt.grid() を呼び出して、現在の線スタイルでグリッドを描画します。 plot() メソッドでxとyをプロットし、marker=o、markeredgecolor=red、markerfacecolor=green を指定してマーカーの見た目

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

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