目次
はじめに
今回はSimulinkで10進数と2進数の変換を自作してみた話だ。かなりネタっぽいので、マジでツっこまれても困る。
最近、10進数から2進数への変換(逆も)が必要になった。
標準機能としてはCommunications Toolboxにそのものズバりなブロック(Integer to Bit Converter)がある。 しかし、この一つのブロックのためだけにToolboxを使ってライセンス費用が課金されるのもナニなので考えて作ってみた。
Simulink上で二進数を扱う考え方
Simulink上で2進数はベクトルで表現する。上位ビットのindexが1とちょっとこんがらがるが、見た目的には分かりやすいかも。
10進数→2進数
考え方は以下の通り:
- もとの数を2で割った剰余が最下位ビットになる。
- 商を再び2で割る。その剰余が次のビットになる。
- 必要なビット数だけ繰り返す。
今回欲しかったのは最大8ビットだったので、ループを使うまでもなくベタ書きした。かなりダサいが、間違いも少ないだろう。 ループを使う場合はメモリーブロックなどで一回前のループでの値を覚えておく必要がある。
参考: Simulink上で、10進数の信号を2進数のビット列として変換するにはどうすればよいですか?

2進数→10進数
逆もダサく書いた。
各ビットと2のn乗とのかけ算を足すだけ。これは分かりやすいだろう。

まとめ
- 手早く済ませたいなら既存のブロックを使うのが良いだろう。
- 2進数←→10進数程度であれば、自作するのもそれほど難しくない
- 任意のビット数に対応させるならループやMATLAB Functionブロックを使う必要があるだろう。