様々な情報を数値に変換して、情報量として表現することを符号化という。
符号理論(Coding theory)は、情報を符号化して通信を行う際の効率と信頼性についての理論である。数学や情報理論と深く関わっている。
情報源符号
情報源で転送前のデータをより効率的に圧縮することを目的とする符号化
ハフマン方式やランレングス符号化方式などがある。
伝送路符号(通信路符号化)
データ伝送時に通信路上の雑音に対応するため、冗長ビットなどを付加して雑音などへの耐性を増やすための符号化
誤り検出や誤り訂正方法にリードソロモン符号方式・FEC・CRCなどがある。
コンパクト符号という符号化の一種で、一意に復号可能な符号のうち平均符号長が他より小さい符号のことを言います。
一意とは、2つ以上の値が存在しないことです。つまり、復号する際に解釈の違いによって復号後の結果が異ならないということを意味します。平均符号長とは、名前の通り全体の符号長の平均です。符号化前の符号の平均の長さより、符号化後の平均の長さが短くなれば圧縮成功となります。
コンパクト符号の一種であるハフマン符号は『復号後の結果はちゃんと元の符号に戻ることができ、かつ全体のデータ量を減らすことができる符号化』ということになります。各記号の出現確率を事前に求め、出現度の高い文字を短い符号で、出現率が低い文字を長い符号で表現することで、平均符号長を最小とする圧縮技術です。
● 符号化の手順
データ「ACBDBCBABECABCD」をハフマン符号化してみます。
まず、圧縮しない符号化の場合、
A | 000 |
B | 001 |
C | 010 |
D | 011 |
E | 100 |
を割り当てると、先ほどの文字列は、
A | C | B | D | B | C | B | A | B | E | C | A | B | C | D |
000 | 010 | 001 | 011 | 001 | 010 | 001 | 000 | 001 | 100 | 010 | 000 | 001 | 010 | 011 |
割り当てた符号の長さがすべて一定であるものを「固定長符号」といいます。
文字列のバイト数は、3bit×15文字=45bitになります。
これをハフマン符号化するには、まず文字の出現回数を数えます。そして出現頻度順にソート(並び替え)します。
文字 | 出現回数 |
B | 5 |
C | 4 |
A | 3 |
D | 2 |
E | 1 |
この表から「ハフマン木(Huffman tree)」を作っていきます。
これをもとにコード表を作成する。
文字 | 出現回数 | コード |
B | 5 | 0 |
C | 4 | 10 |
A | 3 | 110 |
D | 2 | 1111 |
E | 1 | 1110 |
このコードを割り当てると、先ほどの文字列は、
A | C | B | D | B | C | B | A | B | E | C | A | B | C | D |
110 | 10 | 0 | 1111 | 0 | 10 | 0 | 110 | 0 | 1110 | 10 | 110 | 0 | 10 | 1111 |
ビット数は、34bitになる。圧縮率は34/45=0.756
元に戻すには、
ピット列と先ほど作ったコード表を使って、先頭からコード表にあるコードを割り当てていく。
1101001111010011001110101100101111
ハフマン符号では、コード表の各文字に対する符号化で「全く同じビットの並びが存在しない」ような符号化をしている。
文字を判定している途中で元の文字以外の符号パターンが存在しないような符号化をします。
ビット数の少ないビットパターンがビット数の多いビットパターンの中にないということ。
A=1111、B=111がもしコード表に載っていると、もとのビットに1111があった場合、本来はAの文字なのだが、3ビットで判定してBになってしまう。
そのようにならないように文字にコードを割り当てている。
アナログの信号は連続した値をとる信号で、デジタル信号は飛び飛びの値を持つ信号
音声データや画像・写真などのアナログデータをコンピュータで利用するためには、デジタルデータに変換する必要がある。
このアナログデータをデジタルデータに変換することをA/D変換と呼ぶ。
A/D変換は、一般的に 標本化 → 量子化 → 符号化 の順で行われる。
【 標本化(サンプリング) 】
波形を一定の時間で区切る。
区切りと波の交点を標本点
区切る間隔を標本化周波数(サンプリング周期)
【 量子化 】
標本点の値にもっとも近い整数値を求める。
振幅を区切る間隔を短くすると、元の波形に近くなる。
もとのアナログ値との誤差を量子化誤差という
【 符号化 】
標本化と量子化によって得られた数値を n ビットの 2 進数に変換する。
n の値が大きいほど精度に優れるがデータ量は大きくなる。
たとえば、サンプリング周波数を 8kHz で、8 ビットで符号化すると、1 秒間のデータ量は
8000 × 8 = 64000 ビット = 64k ビット
になる。
www.it-shikaku.jp