【3】デジタル信号と音の圧縮 : MP3の仕組み

 

【音のデジタル化(離散化と量子化)】

普通の音は連続した波の信号になっています.このような音の信号をコンピュータで読み取るために色々と加工をします。この加工は音のデータをある間隔で数値データとします。最初に音のをある間隔で区切ります。専門用語ではこれを“離散化(サンプリング)”といいます(図1)。そして点だけの情報が残ります(図2)[1]

 

 

 

 

 

 

 

 

 

 今度はこの一つ一つの点のデータの大きさを数値で表す作業をします。これは専門用語で“量子化”といいます[1]。例えば図3のように0から最高の値を255としたとき,ある点の大きさは105で表すことができるようになります。この作業をすべての点について行います。これによって音のデータをすべて数値で表すことが可能となります。さて,この離散化の間隔が狭ければ狭いほど,音の微妙な変化を点にすることができます。通常はこの間隔を22マイクロ秒(約44kHz)にしています。しかし間隔を狭くするということはそれだけ点の数が増えることになり,データの量が増えるということになります。

また,量子化では通常は0から最高の値を65535にしています。この数値は2進法という方法では16桁で表現できます。なお,この桁を2進法では1桁をビットと言っていますので,正確には16ビット(2バイト)ということになります。そしてこれらの一連の作業が“デジタル化”と言われる作業です。

 

 

【圧縮の原理】

 デジタル化したデータは結構な大きさになります。1秒間の音を通常のCDと同じようにデジタルデータ化すると,44000(Hz)×16(ビット)×2(チャンネル)=1408000(バイト),つまり約1.4メガバイトになります。5分間の音楽だと約42メガバイトとなり,これでは幾らハードディスクがあっても足りません。そこで,何とかしてサイズを小さくする必要があります。

 一般の人の耳は20kHz以上の音は殆ど聞き取れないと言われています[2]。そこで,高い音のデータを省いてしまうことでデータのサイズを小さくすることが可能ではないかと考えられてきました。となると,低い音と高い音を区別する方法と,高い音を省く方法が必要になります。

 

図4は圧縮の一連の流れを示しています。これをMP3に沿って説明していきましょう。

 

 

 

 

 

 

【周波数変換】

 音等の信号はすべて SIN 波や COS 波からできることは前2回の説明でしました。ということは音等のデータにどの位の SIN 波や COS 波が混じっているかを調べることも可能です。普通はフーリエ変換というものを使って調べるのですが,MP3ではフーリエ変換と同じ様な直交変換である離散コサイン変換(DCT)を使っています[3]。この式は

 

 

 

と表現されます。なにやら難しい式になっていますが,N 個のデータから N 個の変換されたデータが出てきます。この変換されたデータのうち k=0 が一番周波数が低い部分で,k が大きくなるほど高い周波数ということになります。例えば N=8 とすると,8点のデータ数における波の種類(周波数)を表すことができます(図5)。このような感じで全部のデータの波の種類を分析します。

ちなみにMP3では N=18 が用いられているようです。

(DCT : Discrete Cosine Transform)

 

 

 

【量子化テーブル】

 離散コサイン変換(DCT)を使うことでデータを波の種類に分けることができました。

次に高い音の波,つまり高周波数の音の波を省略する作業を行います。波の種類に分けられたデータを見ると,低い周波数には大きな値が,高い周波数には小さな値が入っています。これは音というのは低い周波数には大きなエネルギーが,高い周波数になるにしたがってそのエネルギー量が減ってくることを意味しています[4]。だからこそ,多少高い周波数のデータを省略しても,人間の耳はあまり高い周波数が削られたことが分りません。ただし低い音には敏感なので,低い音に対しては沢山のデータが必要になります。

全てのデータをある値で割ると,データとして表現可能な桁数が少なくなります。しかし,どうしても高い周波数の音のデータも情報として残る可能性があります。そこで,高い周波数の音になるほど大きな値で割るようにすれば,高い周波数の音は限りなく0に近づくことになります。デジタルデータは整数しか扱えませんので,小数点以下の数値は切捨てになります。図6はそれを模式したものです。一番上の数値が入った箱はデータを数値化したものです。次の箱は割り算のための係数表です。そして,最後の箱はデータを数値化したものを,割り算係数で割った結果です。低い周波数の音は小さな値で,高い音は大きな値で DCT 後のデータを割れば,低い周波数の音ほど沢山のデータが残り,高い周波数の音は“0”,つまり,省略されていることがわかります。

この割り算のための係数の表を“量子化テーブル”といいます[3,4]。この量子化テーブルがあれば,データをどんな数で割ったのかが分りますので,元に戻すことが可能となります。しかし,“0”になっている高い周波数の部分はどんなに頑張っても元に戻りません。つまり,この高い周波数の部分は音として再生しないことになります。

なお”量子化テーブル”はデータのヘッダと呼ばれる色々な情報が書かれている部分に記載されています。この”量子化テーブル”は特に決まったものが定められているわけでなく,その情報をヘッダの中に記載することで圧縮をするツール側(エンコード側)で決めることが可能となっています。再生側(デコード側)はヘッダ情報に書かれている”量子化テーブル”を用いて元の値に近いデータを生成します。

なお,図6では最初の数値化されたデータの最高値は 220 です。これは 8 bit のデータが必要となりますが,量子化テーブルで割り算したあとの最高値は 44 で,これは 6bit のデータで表現可能となります。しかし,これではあまりデータ量を削減したことにはなりません。実際にはこの後にくる符号化という処理でうまくデータを削減させていきます。

 

 

【符号化】

 数値データがあった場合,同じようなデータをうまくまとめて符号を割り当てる作業を符号化といいます。例えば 00000001111110000 というデータがあった場合,最初に 0 が7個,次に1 が6個,そして,0 が4個並んでいることが分ります。これらをそれぞれあるパターンのコンパクトな符号を割り当てることで,より短いデータに変換することができます[4](図7)。MP3ではこの符号化に“ハフマン符号化”というものを用いています。ハフマン符号化はデータの出現が多いパターンに対しては短い符号で,あまり出現しないパターンに対してはすこし長い符号を割り当てます。MP3では予め約31種類程のパターンを用意して,それを元に最適な符号を割り当てることをしています.

 さて,ここで先ほどの図6を見ると,高い周波数のデータ2つが0になっています。ということはこの0というデータは連続して続いていますので,上手い具合にコンパクトな符号を割り当てられそうな感じがします。実際には MP3 では高周波の部分は沢山0が並んでいますので,よりコンパクトになる可能性があります。

 

 

 

 

 

 

 

 非常に簡単ですが音のデータを圧縮する基本的な事柄について述べてきました。圧縮して解凍するのに必要な情報は“量子化テーブル”と“符号化のパターン”になります。なお,実際のMP3はもっと複雑ですが,基本的なことが分れば,後は色々と調べることができるでしょう。

 

 

【参考文献】

[1] 玉井徳迪 監修,「ディジタル信号処理技術」,1998,日経BP

[2] 守田栄,「音響工学入門」,昭46,アース社

[3] 貴家仁志,「よくわかるデジタル画像処理」,1996CQ出版

[4] 「動画瞬間圧縮アルゴリズム」,Cマガジン,6月号,1996,ソフトバンク社

[5] ”データ圧縮について”,http://www.ann.hi-ho.ne.jp/jiro/assyuku2.htm