連載
» 2007年01月26日 00時00分 公開

組み込みギョーカイの常識・非常識(6):デジタル信号、アナログ信号って何?

アナログ信号とデジタル信号を相互に変換するコンバータは、どんな処理をしているのか。グラフを使って具体的に解説してみよう

[中根 隆康 フリー・アーキテクト/(株)ネクスト・ディメンション,@IT MONOist]

 今回は信号(デジタル信号、アナログ信号)について書いてみたいと思います。信号といわれても、業務系ソフトやWeb系ソフトのプログラマの方にはピンとこないと思いますが、誰かに情報を伝えるものがすべて信号といってしまってもよいと思います。

アナログ信号とデジタル信号

 では、アナログ信号とデジタル信号とは何が違うのかですが、Webサイトなどをいろいろと調べてみると「アナログ信号は連続的に変化する情報(continuous quantity)、デジタル信号は離散的な情報(discrete quantity)」という説明が一般的のようです。また、例え話で「アナログ時計とデジタル時計」がよく使われますが、どちらも理解しにくい説明になっていることが多いように感じられます。

 これは私なりの解釈ですが、デジタル信号とは、前回までに説明してきたメモリやレジスタへの入出力データそのものだと考えてもらってよいと思います。MPU(CPU)の中でソフトウェアが扱うものは、すべてデジタル信号(データ)といえます。数値、コード(記号)や文字などがすべてデジタルデータです。

 次にアナログ信号ですが、これを説明するときによく例えられるのが「人間の五感(視覚、聴覚、触覚、臭覚、味覚)のようなもの」です。視覚は光の強さや色調、聴覚は音の強さや高低、触覚は圧力の強弱や温度の高低ということですが、これは非常にあいまいなもので、個人によっても感じ方が違いますね。もっと簡単なイメージは、電球が「明るく点灯している、薄暗く点灯している」というのはアナログ的な表現といえます。

 一方、電球が「××カンデラ(注1)で点灯している」というのがデジタル的な見方といえます。別の角度からデジタル的な見方をすると「点灯している(ONしている)、消えている(OFFしている)」という見方もできます。

※注1:カンデラ:candela(cd)
カンデラという単位は非常に難しい定義がありますので、ここで××カンデラと表現するのは適切ではないかも知れませんが、単位を付けた定量的なものというイメージを持ってもらえればよいと思います。


 アナログ信号とデジタル信号を対比させるときによく使われる図を示します(図1、図2)。デジタルに変換された信号は、棒グラフの頂点の値がデジタル値だと思ってください。

アナログ信号 図1 アナログ信号

デジタルに変換された信号 図2 デジタルに変換された信号

 ここで参考までに、アナログ信号をデジタル信号に変換するときによく使われる説明に「サンプリング(標本化)間隔で観測することを量子化という」というのがあります。簡単にいうと図1のアナログ信号を一定の間隔(サンプリング間隔:棒グラフの間隔)で信号の強さを調べて、それを値にするということです。

 では、アナログ信号をデジタル信号に変換するにはどうしたらよいでしょう。

アナログ−デジタル変換器(A/Dコンバータ)

 ここで登場してくるのがアナログ−デジタル変換器(A/Dコンバータ、ADCとも略される)です。このA/Dコンバータがアナログ信号の信号の強さ(通常は電圧)を調べて、値に変換してくれます。

 ただし、注意してほしいのは上述の量子化をやってくれるわけではありません。通常のA/Dコンバータ自体にはサンプリング間隔という考えはなく「アナログ信号をデジタルに変換しなさい」という指令を受けて変換を行うだけです。サンプリング間隔はソフトウェアやハードウェア・タイマで作ってやる必要があります。また、A/Dコンバータが変換するにはある程度の時間が必要ですので、変換指令を出してすぐに正しい値が読み出せる訳ではありません。

 A/Dコンバータの説明を見ると、下記のような書き方をしてあります。

  • 10ビットの分解能
  • アナログ変換電圧範囲 0V〜6V
  • 変換時間         8.6μs

 ここに書かれている「変換時間 8.6μs」というのが、「変換しなさい」という指令を受けてから正しい値を取り出せるまでの時間となります(変換が確定するまでの時間ともいいます)。

 また、A/Dコンバータのハードウェアマニュアルには図3のような図もよく見掛けられます。

A/Dコンバータの変換精度 図3 A/Dコンバータの変換精度

 図を見てもらうと分かるように、A/Dコンバータは変換の誤差を持っています。すべてを正確に変換してくれると誤解している方もいるいるようですので注意が必要です。では、この誤差をどうやって埋めるかですが、これについてはいろいろな手法があり、A/Dコンバータを使いこなすノウハウや、ハードウェアの設計も絡んでくる話なので別に機会にしたいと思います。

 A/Dコンバータの種類には以下のようなものがあります。詳しいことが知りたい方はWebや書籍などで調べてください。

  • 並列比較型
  • 逐次比較型
  • パイプライン型
  • 二重積分型
  • デルタ−シグマ型

 いろいろな型があり、どれが良いかは一概にはいえません。実際に入力されるアナログ信号がどんな傾向(特性)を持っているかで、どの型を使うかを検討しましょう。

デジタル−アナログ変換器(D/Aコンバータ)

 アナログ信号からデジタル信号へ変換するものがA/Dコンバータですが、逆にMPU(CPU)の中でさまざまな処理をして求まったデータをアナログ信号に変換するものが、デジタル−アナログ変換器(D/Aコンバータ、DAC(ダックと読みます)とも略される)です。A/Dコンバータの逆の動きをするものだと思ってもらってよいと思います。

 D/Aコンバータにも以下のような種類があります。

  • 抵抗ラダー型
  • 抵抗ストリング型
  • 電流出力型
  • デルタ−シグマ型

 D/AコンバータもA/Dコンバータと同じように、出力する信号の特性を見極めてどれを使うか決めるべきでしょう。

A/Dコンバータの処理の流れ

 何となくイメージは分かってもらえたでしょうか。最後にアナログ信号からデジタル信号に変換して、デジタルデータを読み込む簡単な流れを図にしてみます。

アナログ信号からデジタルデータへの変換の流れ 図4 アナログ信号からデジタルデータへの変換の流れ

 A/Dコンバータ、D/Aコンバータを使う機会は組み込みシステムで頻繁に出てきます。特に音声や通信を扱うときには必須といってもよいと思います(最近では信号を取り扱う入出力コントローラが賢くなったので、A/DやD/Aを直接使ったことがないという組み込みエンジニアもいるようですが…)。

 アナログ信号のイメージを理解できると、地上波デジタルテレビとかワンセグテレビなどが、いままでのラジオやアナログテレビとどう違うのかの理解もしやすくなるのではないかと思います。


 次回は、同じ信号でもちょっと違った意味を持つ、パルス信号について書いてみたいと思います。

 ご意見、ご要望などがありましたらできる限り取り込んでいきたいと思いますので、下記までメールをお送りください。(次回に続く)


Copyright © ITmedia, Inc. All Rights Reserved.