プログラミング

【組み込み】LSB(分解能)とオフセットを理解出来るよう整理してみた

組み込みの業務をしていると、LSB(分解能)とオフセットという言葉が出てきます。

何となく分かっているつもりではあったのですが、後輩に聞かれてちゃんと説明できないなーと思ったので、改めて調べて整理してみました。

LSB(分解能)の概要

アナログデータをどれだけ細かく表現するのか?を表すものです。

※ここではアナログデータの詳しい説明は省略しますが、分からない方は「温度とか速度とか時間など、現実に存在する感覚的なデータ」と思ってもらえればOKです。

ちなみにアナログデータは、物理値とも言われたりします。

アナログデータ(物理値)をデジタルデータ(CPU内部のデータ)に変換するときに使われて、1bitあたりのデジタルデータでは、アナログデータはいくつになるかを決めています。

 

アナログデータ ⇒ デジタルデータに変換するときの式は、以下の通りです。

アナログデータ = デジタルデータ * LSB

つまり、アナログデータが”1″という値をデジタルデータに変換する時、LSBによってはデジタルデータが、0.1になったり0.01になったりします。

LSB(分解能)とは何ぞや?

LSBは分解能とも言われ、アナログデータをどれくらいの精度で分解するのかによって、デジタルデータの精度が変わってきます。

 

たとえば、ぼくが今お湯を触ったときに、「熱い」と「熱くない」の言葉でしか表現できないとします。

ぼくが熱湯を触って「熱い!」と言ったら、この熱湯は確かに熱いということは分かります。

しかし、40℃くらい熱いのか、70℃くらいで結構熱いのかなど、どれくらい熱いのかが分かりません。

でも、「冷たい」「ちょっと冷たい」「普通」「ぬるい」「少し熱い」「結構熱い」と、細かく表現できるようにすると、どうでしょう。

ぼくが「少し熱い」と言えば、だいたい50℃くらいなのかなーと、予想できる温度の精度が上がりますよね。

 

結構思い切った例えですが、分解能とはこういった精度のことを言います。

分解能(LSB)が細かければ細かいほど、アナログデータをデジタルデータに変化したときの精度が上がります。

LSBの計算方法

アナログデータを細かく分割する時、その1つの単位をLSBと呼びます。「デジタルデータ(CPU内部データ)が1bitを取るとき、アナログデータ上ではXXを取る」といった意味です。

アナログデータが温度(℃)なら、1LSB = ℃/bitとも表せます。

なので例えば、1LSBが0.1(℃)で、デジタルデータ(CPU内部のデータ)が200だとすると、アナログデータは以下計算より2℃と表現することができます。

200 * 0.1 = 20℃

もし、1LSBが0.01(℃)とかになると、アナログデータは2℃となるわけですね。

これがLSBであり、LSB計算の基本部分です。

LSBの値が細かければ細かいほど良いのか?

「LSBの値で値の精度が決まるなら、とにかく出来るだけ細かい値を取れるようにした方が良いのでは?」

という疑問が出てくるかもしれません。しかし、そういうわけにもいかないと思います。

LSBを細かくすると、その分データを格納するサイズが増えてしまいます。

 

例えば、0℃~100℃までを表示する温度計を作るとしましょう。

LSB=0.01だとすると、100℃を表現するのは、10000のデジタルデータが必要になります。(10000 * 0.01 = 100(℃))

MAXが100℃なので、デジタルデータのMAX値も10000になるということは、デジタルデータを格納する変数の方は、short型(-32768~32767)の2byteデータで十分です。

しかし、より細かく値を取るためにLSB=0.001になるとどうでしょうか。100℃を表現するには、100000のデジタルデータが必要になるため、short型では値が収まりません。なので、long型の4byteデータを使用する必要があります。

 

組み込みはROMに限りがあるので、無駄なメモリは取りたくありません。なので、LSBも出来るだけ細かい方が良いけど、その分メモリを食ってしまうので、必要最低限のLSBに設定しているのではないかなと思います。

オフセットとは

オフセットは、「物理値をどれだけずらすかを表すもの」という意味合いです。「原点からいくつずらすか?」という意味の方が分かりやすいかもです。

たとえば、CPU内部データ=200,LSB=0.01(℃),オフセット=-5というものがあれば、以下の計算より、-3℃になります。

200 * 0.01 + (-5) = 2 + (-5) = -3

 

このオフセットが使われるのは正直ぼく自身も分かっていないので、設計上値をその分ずらさないと都合が悪いんだろうなーと思っています。

最後に

LSBとオフセットの解説でした。理解は出来たのですが、いざ誰かに解説しようとすると結構難しいです。

まぁ現場では、LSBとオフセットの計算方法さえとりあえず分かっていれば困ることは無いので、計算は確実にできるようにしておきましょう。