記事の内容
Pythonでシステム同定用入力信号の生成を行うサンプルスクリプト
作成する信号:ステップ入力、Chirp、白色ノイズ
参考情報
積分器を含む非線形システム同定のための離散値入力信号
機械学習によるディーゼルエンジン吸排気系の実時間MPC設計
サンプルスクリプト
qiita.rb
import numpy as np
import matplotlib.pyplot as plt
# 入力信号の生成(入力信号:ステップ入力)
duration = 1 # 信号の継続時間 (秒)
sampling_rate = 1000 # サンプリングレート (Hz)
t = np.linspace(0, duration, int(sampling_rate * duration), endpoint=False)
step_time = 0.1 #ステップ時刻
step_signal = np.zeros_like(t)
step_signal[int(step_time * sampling_rate):] = 1
#グラフ表示
plt.figure(figsize=(20, 8))
plt.plot(t, step_signal, label="step_signal")
plt.xlabel("t (s)")
plt.ylabel("Signal [-]")
plt.title("Randam signal")
plt.legend()
plt.grid(True)
plt.show()
# Chirp信号の生成
frequency_start = 10 # チャープ信号の開始周波数 (Hz)
frequency_end = 100 # チャープ信号の終了周波数 (Hz)
chirp_signal = np.sin(2 * np.pi * np.cumsum(np.linspace(frequency_start, frequency_end, len(t)) / sampling_rate))
# グラフ表示
plt.figure(figsize=(20, 8))
plt.plot(t, chirp_signal, label="chrip_signal")
plt.xlabel("t (s)")
plt.ylabel("Signal [-]")
plt.title("Signal")
plt.legend()
plt.grid(True)
plt.show()
# 白色ノイズの生成
duration = 1 # 信号の継続時間 (秒)
sampling_rate = 1000 # サンプリングレート (Hz)
t = np.linspace(0, duration, int(sampling_rate * duration), endpoint=False)
A = 1.0 # 振幅
white_noise_signal = 2*A*(np.random.rand(round(sampling_rate*duration))-0.5)
#グラフ表示
plt.figure(figsize=(20, 8))
plt.plot(t, white_noise_signal, label="white_noise")
plt.xlabel("t (s)")
plt.ylabel("Signal [-]")
plt.title("Signal")
plt.legend()
plt.grid(True)
plt.show()