コンピュータで使用されるデータは、「デジタルデータ」である必要があります。その「デジタルデータ」の対義語として「アナログデータ」が挙げられます。 

 ここでは、「アナログデータ」を「デジタルデータ」に変換(デジタル化)する(「A/D 変換」)について見ていきます。

離散値と連続値

 「デジタルデータ」は「離散値」が記録され、一方で「アナログデータ」は「連続値」が記録されます。
「離散値」とは、ざっくり言えば数えられるものです。例えば “りんご” の個数については、1個、2個と数えられるので離散値です。一方で“りんご”の重さについては数えることはできませんが、計量することでその値が得られます。これが「連続値」となります。さらに少しざっくりと言えば「離散値」は切れ目がある数で、「連続値」は切れ目のない数です。(“りんご”の重さについては計量した際、例えば300.1g などとなり切れ目があるように見えますが、それは使用した“はかり”に依存するもので、本質的には小数点以下の桁数は無限です。)

音のA/D 変換

 音については、「アナログデータ」で記録されたものの代表例が “レコード” で、「デジタルデータ」で記録されたものの代表例は “CD” です。
“レコード”は溝の形状(数えられないもの)で音を記録しており、 “CD” はピット(長さ数マイクロメートルの凹凸)の数(数えられるもの)で音を記録しています。 まさに「連続値」と「離散値」の違いがそこにあります。

それでは、音について「A/D 変換」を例行う手順を見ていきます。
まず「音のデータ」はマイク等の録音機器で電気信号に変換されているとします。その「音データ」をグラフにすると以下のようになります。


横軸は、「時間」であり一般的には “秒” が使用されます。また縦軸は「電気信号レベル」です(こちらは一般的には “電圧” となります)。

大事なのは、両軸の「時間」、「電気信号」共に「連続値」であるという事です。よって、両軸ともに「離散値」に変換するために以下の3つの手順を実行します。

1)標本化(サンプリング):横軸を一定の間隔に区切り、「標本点」を取り出す。

2)量子化:縦軸を一定の間隔に区切り、「標本点」を区切られた間隔のうち最も近い値にする。

3)符号化(コード化):2) で量子化された値を2進数に変換する。

以上の手順を以下に図でみていきます。

まず、1) 標本化では、以下のグラフのように横軸を一定の間隔で区切ります。

上の図では、1秒の範囲を10間隔に区切っています。これを「サンプリング周期」と呼び、この例では10(間隔)/秒 = 10(Hz)となります。また、その間隔上にある、グラフの値が「標本点」となります。これで、無限の点の集まりであるグラフが、10点に離散化されました。

続いて、2) 量子化です。これは、縦軸について離散化する操作です。

 この操作でも、横軸に対して行った操作と同様に、縦軸を一定の間隔に区切ります。この場合の間隔は、区切りの段数を2の累乗にするのが普通です。上記の例では、0〜7までの8段階に区切っています。よって 23 段階です。
 区切られた間隔に最も、近い値に標本点を近づけます。上の例では、オレンジ色の点が量子化により得られた、電気信号レベルにります。
この時、重要なのが、「量子化誤差」が発生するということです。連続値を離散値に変換する際には、避けては通れない誤差です。ただ、量子化の際の段数を細かくしていけば、その誤差を小さくしていくことは可能ですね。

 最後に 3) 符号化 です。上記の操作までで得られた値は、[ 1, 6, 4, 3, 6, 4, 1, 1, 2, 3 ]となりました。これを、2進数に変換すると、[ 001, 110, 100, 011, 110, 100, 001, 001, 010, 011 ] となります。ちなみに、この変換値を 3ビットに揃えているのは、8段階の最大値である 7 を表現するためには、7(10) = 111(2) と3ビットが必ず必要になるからです。

以上の手順で行われた結果を、改めて以下に図示すると、

となりました。元の波形に対して、それっぽい山持った図形ができています。しかしながら、特に後半の右肩上がりの部分などで、誤差が大きくなっている感じになっています。先述しましたが、これを回避するためには、サンプリング周期や量子化の段階を細かく設定する必要があります。ただ、細かく設定すればするほど変換後のデータ量は大きくなりますつまりデータの精度とデータ量が反比例の関係になるのです。このような関係を「トレードオフの関係と呼び、実生活でも良くある関係です。