<デジタルって?> |
・
デジタル まずは「デジタル」とは何ぞや?ここからですね。 デジタルというのは、情報を「1」と「0」のみで表し、それらの数列で記録したり処理したりするもののことです。「1」と「0」のことを符号といい、これら1つの数字が占める領域のことを、「bit(ビット)」と言います。8bitになると、「bite(B・バイト)」というまとまりで表し、基本的にバイト以上のサイズを扱います。 言葉だけでは分かりにくいですよね。では、簡単な例から入ってみたいと思います。 まず、簡単なアナログの情報を用意します。「あいうえお」としましょう。ここで、それぞれの文字を符号化してみます。 例えば、「あ」は「0000」、「い」は「1111」、「う」は「1010」、「え」は「0101」、「お」は「1100」といった具合です。(本来は最低でも8bit必要ですが、わかりやすくする為に今回は4bitで符号化します。) そして、「あいうえお」は、「00001111101001011100」という20bitの数列で表すことができます。この、情報を数列に置き換えてまとめたものを「ファイル」といいます。 ・圧縮について 皆さん、良く「圧縮」という言葉を目にするのではないでしょうか。なんとなく、どんなものかイメージできても、実際にどんなことが行われているのかまでは、あまり知る機会がありませんよね。 「圧縮」とは、上の数列のようになった情報を、ある決まりに従って情報を操作し、最終的にもとの大きさより小さくすることを言います。この、「圧縮の決まり」のことを「コーデック」といい、コーデックに従って圧縮することを、基本的に「エンコード」と言います。 また、圧縮には大きく分けて2種類あります。1つ目は「可逆圧縮」、2つ目は「非可逆圧縮」というものです。 「可逆圧縮」は、圧縮後に、また「完全に」元の状態に戻せる圧縮方式をいいます。逆に「非可逆圧縮」は、圧縮の際に一部の情報が「完全に破棄」され、その後、圧縮前のファイルなしでは完全に元に戻すことができません。 やはり言葉だけでは分かりにくいと思うので、具体的な例で見ていきましょう。 >>例1 可逆圧縮 まずは可逆圧縮から見ていきましょう。まず、圧縮するためには、圧縮の決まりである「コーデック」を指定する必要があります。 ここでは例のために、簡単なコーデックを1つ作ってみましょう。 >>可逆圧縮コーデック 隣り合う「0000」と「1111」は、「0000」に置き換える。 隣り合う「1010」と「0101」は、「1010」で置き換える。 圧縮された「1010」と非圧縮の「1100」が隣り合ったら、「1100」で置き換える。 最初に必ず「01」という符号を付加する。 これがここでの「コーデック」となるわけです。 では実際に「あいうえお」の数列をエンコードしてみましょう。 00001111101001011100 = 0000+1111+1010+0101+1100 (文字ひとつ一つに分解) 0000+1111 = 0000 (コーデックに従って圧縮) 1010+0101 = 1010 1010+1100 = 1100 01+0000+1010+1100 = 0100001100 (最後に、符号「01」を付加して、ファイルとしてまとめる) ざっと、こんな感じです。 手順としては、上から順番に進めています。決まりに従って、まとまった8つの符号を4つに置き換えます。 最後に「01」を付加しましたが、これは、「このコーデックで圧縮しましたよ」という印のようなものです。次にこれを元に戻す作業のときに必要になります。 さて、ここで20bitあったファイルサイズを10bit、つまり半分まで圧縮できました。この状態を、「圧縮率50%」といい、元のサイズに対してどれだけ小さいかを表しています。 では次に、元に戻してみましょう。コーデックを逆算することで、ファイルを元の状態に戻せるのです。この、「圧縮されたファイルを元に戻す」作業を、「デコード」と言います。 まずは、符号「01」のチェックを行います。これが付加記録されていないファイルを受け付けることは出来ません。なぜかというと、もしこのコーデックで圧縮していないのに、このコーデックでデコードしてしまうと、意味の分からない数列が出てきてしまうからです。 最初の2bitをチェックし、無事に「01」を確認できたら、次のステップです。 まず最初の2bitを除去します。これは、ファイルの内容とは関係ないからです。 すると、 00001100 と言う数列が現れます。 次に、最後に圧縮した方からデコードしていきます。 1100 = 1010+1100 となります。ここで、まだ1010の部分が圧縮されているので、ここを次にデコードします。 1010 = 1010+0101 = 10100101 更に続けます。 0000 = 0000+1111 = 00001111 最後に1つにまとめます。 00001111+10100101+1100 = 00001111101001011100 (20bit) ここで、ようやく「デコード」完了です。 ためしに、人間に分かるように解読していくと、 00001111101001011100 = 0000(あ)+1111(い)+1010(う)+0101(え)+1100(お) 無事に全て取り出すことが出来ました。これをまとめると、「あいうえお」になりますね。 >>例2 非可逆圧縮 では次に非可逆圧縮を見ていきます。 今度はすごく簡単なコーデックになります。 >>非可逆圧縮コーデック 後半10bitを破棄する。 はい、これだけです。このあまりにも横暴に見える圧縮こそが、非可逆圧縮なのです。 ためしに、エンコードとデコードをしてみましょう。 00001111101001011100 = 0000111110 これでエンコード作業は完了です。先ほどの可逆圧縮と同じ「圧縮率50%」になりました。ですが、この後が問題です。 デコードします。 0000111110 = 0000(あ)+1111(い)+10(不明) ここまでしか情報を取り出せません。まとめると、「あい10」というわけの分からないものが現れます。 >>それぞれの特徴 ここまで見てしまうと、可逆圧縮以外考えられないように感じるかもしれませんが、オーディオの場合は、完全に情報が残っていなくても「音」として聞こえるので、非可逆圧縮が積極的に用いられてきました。 非可逆圧縮にも利点はあり、可逆圧縮と比べてデコード処理が簡単なために、ポータブルプレーヤ等ではバッテリー寿命を延長できたりします。 また、完全に元に戻さなければならない可逆圧縮と違い、符号切捨ての自由度が高く、可逆圧縮よりも圧縮率を簡単に高めることが出来ます。 ですので、必ずしも可逆圧縮がいいわけではなく、適切に使い分けることが求められます。 >>戻る |