Simulinkで 10進数⇔2進数変換 を自作する方法

はじめに

今回はSimulinkで10進数と2進数の変換を自作してみた話だ。かなりネタっぽいので、マジでツっこまれても困る。

最近、10進数から2進数への変換(逆も)が必要になった。

標準機能としてはCommunications Toolboxにそのものズバりなブロック(Integer to Bit Converter)がある。 しかし、この一つのブロックのためだけにToolboxを使ってライセンス費用が課金されるのもナニなので考えて作ってみた。

Simulink上で二進数を扱う考え方

Simulink上で2進数はベクトルで表現する。上位ビットのindexが1とちょっとこんがらがるが、見た目的には分かりやすいかも。

10進数→2進数

考え方は以下の通り:

  1. もとの数を2で割った剰余が最下位ビットになる。
  2. 商を再び2で割る。その剰余が次のビットになる。
  3. 必要なビット数だけ繰り返す。

今回欲しかったのは最大8ビットだったので、ループを使うまでもなくベタ書きした。かなりダサいが、間違いも少ないだろう。 ループを使う場合はメモリーブロックなどで一回前のループでの値を覚えておく必要がある。

poorDec2Bin_8bit.slx

参考: Simulink上で​、10進数の信号を2​進数のビット列として​変換するにはどうすれ​ばよいですか?

2進数→10進数

逆もダサく書いた。

各ビットと2のn乗とのかけ算を足すだけ。これは分かりやすいだろう。

poorBin2Dec_8bit.slx

まとめ

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