MP3は数ある音響信号圧縮CODECの一つです。インターネットの普及と合わせて広く使われるようになって、一気に普及しました。

一般に音は、データの偏りが少ないためあまり圧縮できません。従来は、時間領域での相関を利用し、前後の音の差分を適応的に符号化するADPCMが使われていましたが、CD音質で1/4程度までしか圧縮できませんでした。そこで、MP3では、周波数領域で高周波成分や耳の鈍感な部分に割り当てる情報量を減らす事によって、1/10程度までの圧縮を実現します。耳はそもそも周波数領域で音を認識するため、周波数領域で処理する事によって、より実認識に近い形で処理できます。

MP3では、音を任意のブロック単位で処理します。これは、周波数変換がOrder(N LogN)の計算量なので、演算量的に曲全体を一度に周波数変換する、という事ができないためです。ここで、周波数変換はブロック単位で窓関数をかけて行います。これは、周波数成分の分析能力をあげるためです。しかしここで、窓関数をかけた場合、ブロックの両端が0に落ちてしまい、元の音声が復元できなくなってしまいます。そこで、ブロックを半分ずつ重複させる重複変換が行われます。しかし、その場合、重複分、周波数変換後のデータが多くなってしまい、データ量が二倍となります。それを解決するために、半分の周波数成分で完全再構成が保障されるMDCT(Modified Descrete Cosine Transform)を使います。MDCTを使う場合、窓関数には多少の制約がつきます。MDCTの実装においては、ネイピア数の部分を式変形する事でFFTの形にし、FFTで処理でき、OrderはNlogNにできます。また、DCTの形に変換する事で、最小のバッファサイズで実装する手法も提案されています。

MP3の場合は、先にフィルターバンクで帯域分割してからMDCTを行います。これは、MDCTの演算量を極力減らすための工夫です。周波数変換されたデータはクリティカルバンドごとに分割されて処理されます。クリティカルバンドとは、人間の耳の認識周波数単位であるBarkスケールの単位で、25個あります。低周波ほど狭く、高周波ほど広くなっています。これは、人間の耳が低周波ほど敏感である事を示しています。バンド分割されたデータは、バンドごとに特定のビット数が割り当てられ、そのビット数で量子化、ハフマン符号化され格納されます。ここで、どのバンドにどれだけのビット数を割り当てるかは、聴覚心理モデルにより求められるマスキング値との差によって決定されます。これにより、耳の鈍感な部分には少ないビットが、敏感な部分には多くのビットが割り当てられます。

聴覚心理モデルでは、FFTが出力する周波数成分を用います。これは、聴覚心理モデルを適用するには複素成分が必要なのですが、MDCTは複素成分を持たないため、FFTを補助的に用いる必要があるためです。ちなみに最近は、MDSTを複素成分とするCMDCTが提案されています。聴覚心理モデルにおいては、絶対的に小さな音を認識できない(ATH)、大きな音の近くの小さな音は認識できない(同時マスキング)、大きな音の後に鳴る小さな音は認識できない(時間マスキング)というデータに基づき、これ以下の音は聞こえないというマスキング値が決定されます。ATHは周波数に対応して一意に定まります。最初に実験データであるLoudness曲線があり、その後解析的に定式化されました。同時マスキングは、全周波数成分に対してSpreadingFunctionと呼ばれる三角形領域を構築し、その値のmaxを取る事で計算できます。時間マスキングは、以前のマスキング値を減衰させていき、現在のマスキング値とのmaxを取る事で計算できます。

一般に、MP3は聴覚心理モデルによって音をカットするため音が悪くなる、といわれますが、ATH以外の部分では0に落としていないため、128kBps程度では可聴域の部分でのマスキングは行われていません。適応的に割り当てビット数を割り当てるために用いられているだけです。適応的に割り当てなければ耳の敏感な部分からよりデータが削られるわけで、聴覚心理モデルによって音が悪くなっているわけではありません。よく音を周波数アナライザで見て、高周波が出ている!だからいい!という人がいますが、その聞こえずらい高周波部分の情報量だけ、よく聞こえる低周波部分から情報は削られているのです。音は目ではなく耳で聞くものですので、注意しましょう。

こうして求められたマスキング値とMDCT周波数成分値との差のlog2スケールで割り当てビット数を決定します。ここで、要求ビットレートにおさまるように、ビット数の総和を調整します。1bitずつ一番差が大きいバンドに与えていくものや、エントロピーを求めて解析的に計算するもの等があります。この辺りはよく特許がとられています。

量子化・符号化されたバンドは順次ストリームに出力されていきます。

MP3の窓幅は1152と小さいため、低ビットレートでは根本的に最低限必要な音分の情報量が確保できず、悲惨な音になります。

次回はAAC?