バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
前回は、MDFの生成方針とそれに伴ったMDF構成を決めた。
DG2つ、CN2つ&それぞれに物理値変換式を含む構成。
AsamMdfによるMDF生成手順も確認したので、今回からは実際にMDFを作成していく。
登場人物
博識フクロウのフクさん
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
import処理
今回から実際にPythonでMDFの生成だね。
まずはimport。
numpyとasasmmdfモジュールをimportするんだけど、
asammdfモジュールの方はMDFとSignalをimportする。
以下の書き方になるね。
import numpy as np
from asammdf import MDF, Signal
numpyも使うんだ。
numpyは疑似シグナルを作成するためにimportする。
MDF生成としてmustなものではないが・・・まぁ大体必要になるだろう。
タイムスタンプ生成
次はタイムスタンプを生成しておく。
今回の構成だと10msサンプリングと100msサンプリングの2種類。
期間としては10秒にしておこう。
numpyの等差数列で簡単に作れる。
term = 10
dt10ms = 0.01
dt100ms = 0.1
t10ms = np.arange(0,term,dt10ms)
t100ms = np.arange(0,term,dt100ms)
一撃かー。
これはnumpy様様だなー。
数列、ベクトル、行列使うときはもう必須ライブラリだね。
シグナル生成
次はシグナルの生成。
10msサンプリングと100msサンプリングがあるので分けて書いておこう。
まずは10msサンプリングの方を書くと以下になる。
■ シグナル生成
# 無変換のチャネル
sig_t10ms_sin = Signal(
np.sin(t10ms),
t10ms,
name="t10ms_sin",
unit="V",
conversion=None,
comment="t10ms_sin",
)
# y(t)=at+bの物理変換式のチャネル
conversion = {"a": 2, "b": -0.5}
sig_t10ms_Linear = Signal(
t10ms,
t10ms,
name="t10ms_Linear",
unit="rad",
conversion=conversion,
comment="t10ms_Linear",
)
# sin(t)の物理変換式のチャネル
conversion = {"formula": "sin(X)"}
sig_t10ms_LinearToSin = Signal(
t10ms,
t10ms,
name="t10ms_LinearToSin",
unit="rad/s",
conversion=conversion,
comment="t10ms_LinearToSin",
)
前回出したMDF構成のDataGroup1の方の構成だね。
Signalを生成するときに信号、タイムスタンプを引数にする。
オプションパラメータとして、以下がある。
name:チャネル名
unit:単位
conversion:物理変換式または係数
comment:チェンネルの説明
conversionのところが良く分からないな・・・。
conversionのところは、結構魔境なんだよね・・・。
ま、魔境!!!
(これはつつかない方が吉だ!!!)
と言って放って置くのも気持ち悪いんで次回詳しく説明しよう。
(いやだーーーー!!!)
まとめ
まとめだよ。
- 今回からPythonによるMDF生成を開始。
- まずはimport
- asammdfモジュールのMDFとSignal。
- 疑似データ生成用にnumpyも。
- numpyでタイムスタンプ生成。
- シグナルを生成。
- 信号、タイムスタンプを引数にして生成。
- これ以外のオプションもあるがconversionが魔境。
バックナンバーはこちら。
コメント