バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
前回、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
シグナル生成(10msサンプリング)
フクさん
じゃ、まずは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",
)
# tabular
conversion=dict()
conversion['raw_0']=1
conversion['raw_1']=5
conversion['raw_2']=8
conversion['phys_0']=10
conversion['phys_1']=30
conversion['phys_2']=60
sig_t10ms_table = Signal(
t10ms,
t10ms,
name="t10ms_tabular",
unit="rad/s",
conversion=conversion,
comment="t10ms_tabular",
)
# tabular(with interpolation)
conversion=dict()
conversion['raw_0']=1
conversion['raw_1']=5
conversion['raw_2']=8
conversion['phys_0']=10
conversion['phys_1']=30
conversion['phys_2']=60
conversion['interpolation']="0"
sig_t10ms_table_f = Signal(
t10ms,
t10ms,
name="t10ms_tabular_inp",
unit="rad/s",
conversion=conversion,
comment="t10ms_tabular_inp",
)
# value to text
conversion=dict()
conversion['val_0']=0
conversion['val_1']=1
conversion['val_2']=2
conversion['val_3']=3
conversion['val_4']=4
conversion['val_5']=5
conversion['text_0']='Neutral'
conversion['text_1']='1st'
conversion['text_2']='2nd'
conversion['text_3']='3rd'
conversion['text_4']='Top'
conversion['text_5']='OverTop'
conversion['default'] = 'default key'
sig_t10ms_value_to_text = Signal(
t10ms,
t10ms,
name="t10ms_value_to_text",
unit="",
conversion=conversion,
comment="t10ms_value_to_text",
)
# tabular with range
conversion=dict()
conversion['lower_0']=0
conversion['upper_0']=1.5
conversion['phys_0']=10
conversion['lower_1']=1.5
conversion['upper_1']=2.5
conversion['phys_1']=30
conversion['lower_2']=2.5
conversion['upper_2']=3.5
conversion['phys_2']=60
conversion['default'] = -1
sig_t10ms_tabular_with_range = Signal(
t10ms,
t10ms,
name="t10ms_tabular_with_range",
unit="",
conversion=conversion,
comment="t10ms_tabular_with_range",
)
# value range to text
conversion=dict()
conversion['lower_0']=0
conversion['upper_0']=0.5
conversion['text_0']='Neutral'
conversion['lower_1']=0.5
conversion['upper_1']=1.5
conversion['text_1']='1st'
conversion['lower_2']=1.5
conversion['upper_2']=2.5
conversion['text_2']='2nd'
conversion['lower_3']=2.5
conversion['upper_3']=3.5
conversion['text_3']='3rd'
conversion['lower_4']=3.5
conversion['upper_4']=4.5
conversion['text_4']='Top'
conversion['lower_5']=4.5
conversion['upper_5']=5.5
conversion['text_5']='OverTop'
sig_t10ms_value_range_to_text = Signal(
t10ms,
t10ms,
name="t10ms_value_range_to_text",
unit="",
conversion=conversion,
comment="t10ms_value_range_to_text",
)
シグナル生成(100msサンプリング)
フクさん
次は100msサンプリングの方。
# 無変換のチャネル
sig_t100ms_sin = Signal(
np.sin(t100ms),
t100ms,
name="t100ms_sin",
unit="V",
conversion=None,
comment="t100ms_sin",
)
# y(t)=at+bの物理変換式のチャネル
conversion = {"a": 5, "b": -3}
sig_t100ms_Linear = Signal(
t100ms,
t100ms,
name="t100ms_Linear",
unit="rad",
conversion=conversion,
comment="t10ms_Linear",
)
# cos(t)の物理変換式のチャネル
conversion = {"formula": "cos(X)"}
sig_t100ms_LinearToCos = Signal(
t100ms,
t100ms,
name="t100ms_LinearToCos",
unit="rad/s",
conversion=conversion,
comment="t100ms_LinearToCos",
)
# cos(t)の物理変換式のチャネル
conversion = {"formula": "cos(X)"}
sig_t100ms_LinearToCos = Signal(
t100ms,
t100ms,
name="t100ms_LinearToCos",
unit="rad/s",
conversion=conversion,
comment="t100ms_LinearToCos",
)
コードを確認した感想
太郎くん
まぁ基本は10msサンプリングの方が重要ってことだね。
フクさん
100msサンプリングの方は複数のDataGroupを定義してみるって目的で入れてるだけだしね。
太郎くん
とりあえず、シグナルの生成の仕方はわかったかな。
まとめ
フクさん
まとめだよ。
- シグナル生成の10msサンプリングと100msサンプリングの部分のコード作成。
- 10msサンプリングの方に複雑さが寄ってる状態。
- 各種物理値変換式のパターンを入れ込んでいるため。
- 100msサンプリングはDataGroupを複数にするために入れている。
- 10msサンプリングの方に複雑さが寄ってる状態。
バックナンバーはこちら。
コメント