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

PythonのMatplotlibでシグナル(信号)をプロットする方法を徹底解説

PythonのMatplotlibNumPyを組み合わせると、ノイズを含むシグナル(信号)を簡単に可視化できます。本記事では、正弦波にランダムノイズを重ねたシグナルをプロットする具体的な手順を、コード例とともにわかりやすく解説します。

シグナルをプロットする基本手順

  • 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を自動調整します。
  • 結果の再現性を確保するため、乱数シードを設定します。
  • サンプリング間隔 dt を初期化し、そこからサンプリング周波数 Fs を算出します。
  • np.arange() を使って時間軸 t のデータ点を作成します。
  • NumPyを利用してノイズ成分 nsercnse および信号 s を生成します。
  • subplots() メソッドで図とサブプロットを作成します。
  • プロットにタイトルを設定します。
  • ts のデータ点をプロットします。
  • x軸・y軸のラベルを設定します。
  • 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 # sampling interval
Fs = 1 / dt # sampling frequency
t = np.arange(0, 10, dt)

# generate noise:
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("Signal")
axs.plot(t, s, color='C0')
axs.set_xlabel("Time")
axs.set_ylabel("Amplitude")

plt.show()

実行結果

PythonのMatplotlibでシグナル(信号)をプロットする方法を徹底解説

コードのポイント解説

1. 乱数シードによる再現性の確保

np.random.seed(0) を指定することで、実行するたびに同じ乱数列が生成され、グラフの結果が常に一定になります。デバッグや検証の際に非常に便利です。

2. サンプリング間隔とサンプリング周波数

dt = 0.01 は10ミリ秒ごとにデータを取得することを意味し、サンプリング周波数はその逆数である Fs = 100Hz となります。t = np.arange(0, 10, dt) により、0秒から10秒までの時間軸を作成しています。

3. ノイズの生成方法

np.random.randn() で白色ノイズ(nse)を生成し、指数関数的に減衰するカーネル r との畳み込み(np.convolve)によって色付きノイズ(cnse)へと変換しています。最後に、振幅0.1・周波数2Hzの正弦波にこのノイズを加えることで、リアルなシグナル s が完成します。

まとめ

Matplotlibの subplots() とNumPyの乱数・畳み込み機能を活用すれば、ノイズを含む現実的なシグナルを短いコードで可視化できます。センサーデータや音声信号などの解析にも応用できるので、ぜひ実際にコードを実行して挙動を確認してみてください。

  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次元