音の符号化

14.5. 音の符号化

この節では音声データをどのように符号化するか、またアナログ情報をデジタル情報へと変換する方法について説明します。

#

音は空気の密度の振動、波です。連続な時間で変化し続ける量を厳密に記録することはできないので、人の耳に区別できる範囲で記録することを考えます。

レコードへの記録
今はあまり見かけなくなりましたが、1980年頃までは「レコード」と呼ばれるメディアが広く使われていました。レコードは大きな円板です。そして音の波形の変化を物理的な溝としてレコードに記録することで、音を記録しました。音声を再生するときは、一定の速度で回転するレコードの上に針を落とし、針の位置変化を読み取ります。

標本化と量子化 #

波をディジタル表現で変換する、素直な方法は、離散的な代表点を記録することです。 下図は正弦波を、水平または鉛直な線分を使った折れ線グラフで近似した例です。4枚の図は、縦横のグリッドの細かさが異なり、折れ線グラフの細かさが異なります。 この折れ線グラフは、整数座標、つまり、ディジタルで表すことができます。

音の場合、横軸は時間軸で、一定時間毎にデータを記録することを 標本化(サンプリング) と呼びます。同様に 縦軸について振幅の刻み幅を設定して、離散値で表すことを 量子化 と呼びます。

具体例として、オーディオCD では、サンプリングレートが 44,100Hz、量子化ビット数 16 で記録されています。 前者は、1秒間に 4.41万回 記録する、後者は各記録を \(2^{16}=65536\) 段階に記録するという意味です。 それぞれの数値が大きいほど正確な表現になります。 また、等間隔で刻むよりデータに合わせて刻み幅を変えるような工夫も可能です。このような符号化を一般にPCM(パルス符号変調)方式と呼びます。

波と重なり #

自然界の音は、正弦波のような綺麗な形ではなく、複雑な形をしています。 そのような波も、さまざまな周期関数の重ね合わせの合成と理解することができます。

波を重ねる簡単な例は、sin関数の和です。 右図は大きな正弦波に、細かい正弦波を乗せたものです。

\(y = \sin (2\pi t) + 0.04 \sin (128 \pi t)\)
周期
周期的に同じ形を取る関数の、繰り返す単位を周期と呼びます。音なら時間で変化するので、0.1秒のように測ります。
周波数
周波数は単位時間に含まれる周期です。音の場合は単位時間を1秒として、周波数はHz (ヘルツ) で表現します。大きな値なら高い音、0に近い値なら低い音です。周波数の逆数が周期です。

Fourier 変換 #

合成とは逆に分解もできます。
Fourier 変換は、波形をサインカーブの加算に分解する数学的手続きです。 分解後の個数が有限とは限りませんが、周期の長い順に先頭付近だけ使っても、元の波形にそこそこ近いグラフが得られます。

右図は正弦波を 1, 3, 5, 25個 重ねて、矩形波を近似する様子です。個数が増えるほど正確になっている様子が分かります。

波形の周期 vs 標本化の間隔 #

波形を記録するのに必要な標本化の間隔は、記録したい波形がどの程度細かい周期関数を含むかで決まります。

もっとも単純なサインカーブを例に考えます。この関数の周期は 1 です。

\(y = \sin 2\pi t\)

角度の単位にはラジアン (rad) を使います。

\(2\pi \text{ラジアン} = 360 \text{度}\)

サンプリング間隔を 1/4, 1/8, 1/16, 1/32 と順次変えて標本化して、図にしました。

1/4 で標本化した絵だけを見ていても、元の波形を推測するのは難しいでしょう。一方 1/16 くらいの間隔で標本化したデータを見れば、かなり正確に元の波形を推測することができるはずです。1/32 まで細かくすれば、ほとんど元の波形が見えています。

  • どの程度の周波数までの情報を拾う (必要がある) かを決め
  • 拾うと決めた周波数の上限に対して、十分な標本化間隔を決める

という順番で標本化間隔を決めれば、元の波形がそれなりの精度で再現できます。

標本化定理 #

標本化定理は「波に含まれる周期関数の周波数の最大値があったら、その 2 倍の周波数以上で標本化すれば完全に再現できる」ことを主張します。 標本化定理を使う場合、標本化する周期から「何 Hz の波形までのデータを取れるか」を考えることも多いです。標本化する周期が \(T_0\) のとき、データの損失なしに標本化できる限界の周波数 \(1/T_0\) Nyquist 周波数と呼びます。

音質 #

音楽 CD などでは、通常 44.1kHz でサンプリングが行わますが、これは妥当な数字でしょうか? 人間に聞こえる音には上限があり、それは大体 20000Hz = 20kHz と言われています。そして標本化定理によれば、サンプリングレートを 40kHz にすれば 20kHz 以下の音を損失無しに記録できます。この観点で、40kHz 程度のサンプリングをすれば人には考えられます。

このサンプリングレートでも、PCM で符号化された音声のデータは非常に大きくなります。 そこで可逆や非可逆の圧縮方法が開発されてきました。flac, m4a, mp3, aac などはその一例です。データ圧縮の形式や圧縮されたデータを利用するのに必要なプログラムやデータをコーデックと言います。

一番上の 44100Hz_16bit.wav は、サンプリングレート 44100Hz, 16bit 量子化による録音で作られています。 残りのファイルは 44100Hz_16bit.wav を加工してサンプリングレートを引き下げたものです。

サンプリングレート 量子化ビット ファイルサイズ
44100Hz 16bit 4.5MB
32000Hz 16bit 3.3MB
22050Hz 16bit 2.3MB
16000Hz 16bit 1.6MB
11025Hz 16bit 1.1MB
08000Hz 16bit 844KB
(mp3) (mp3) 797KB

おそらく 44100Hz と 32000 Hz の間では、そこまで差を感じないのではないでしょうか?一方で 11025Hz や 8000Hz までサンプリングレートが下がると、音の劣化を認識できると思われます。 また最後のものは、320kbps で mp3 に圧縮したものです。大きさは減りましたが、音質の低下は抑えられています。

MIDI
MIDI 形式は、上で説明してきたのとは全く別の符号化形式です。非常に粗っぽく言えば、MIDI 形式では「楽譜のデータ」のみを符号化します。また MIDI ファイルを再生する際には、それぞれの音の音色を格納した「MIDI 音源」と呼ばれるデータをコンピュータの中に予め用意しておき、MIDI ファイルに入っている楽譜を MIDI 音源に従って演奏するという方法で音を鳴らします。この方法ではやりとりされるのが楽譜データだけですから、ファイルサイズ自体は非常に小さくなります。
画像の符号化 音の符号化 情報理論と符号化