標本化と量子化

標本化と量子化
この節ではアナログ信号に対して標本化と量子化を行なってデジタル信号に変換する方法について学びます。
1
標本化 (サンプリング)
「標本化」とはアナログ時間領域信号 f (t) を デジタル時間領域信号 f [i] に変換する処理のことで「サンプリング」と
も言います。「標本化」も「サンプリング」も良く使われる単語なのでどちらか好きな方を使って良いです。今回の講義
でも両方使います。
サンプリングはもう普通の日本語になっていますので今更説明しなくても良いと思いますが、要するに時刻 t におけ
る f (t) の値を順次取得していくことを意味します。サンプリングを行う間隔は前のテキスト (アナログ信号とデジタル
信号) で適当に選んで良いと書きましたが、あまり適当に選ぶと後にデジタル信号に対して行う処理が複雑になるので、
普通は等間隔でサンプリングを行います。
さて実際に標本化 (サンプリング) の方法を説明する前に、いくつか事前に覚えておいて欲しい用語と公式を挙げてお
きます。
基本的な用語と公式
サンプリング周波数 fs ・
・
・ f (t) に対して一秒間に何回サンプリングするかを表す正の整数値、単位は Hz(ヘルツ)
サンプリング角周波数 ws ・
・
・ ws = 2π · fs と角周波数に変換した値、単位は rad/秒
サンプリング間隔 τ (タウと呼ぶ) ・
・
・ f (t) に対して何秒おきにサンプリングするかを表す正の整数値、単位は 秒、
τ = 1/fs の関係
例えば fs = 10 Hz だとすると f (t) の値を一秒間に 10 回サンプリングして取り出す事を意味しますので、その間隔は
τ = 1/10 = 0.1 秒ということになります。
さてこれを踏まえて標本化 (サンプリング) の方法をステップに分けて説明していきます。
ステップ 1: f (t) を入手する
そもそも f (t) が無いと始まらないので、まず f (t) を手に入れます。f (t) は任意のアナログ時間領域信号です。
ステップ 2: fs を決める
次にサンプリング周波数 fs を決めます。この値はユーザがシステム要件やデジタル信号の品質から決める必要があり、
大きくしても小さくしてもそれぞれメリット・デメリットがあります (詳しくは演習参照)。fs を決めたら τ は公式から
自動的に決まります。
ステップ 3: i の範囲を決めて τ 秒おきにサンプリングを行う。
デジタル時間領域信号 f [i] の独立変数は整数 i でしたので、まず i の範囲を決める必要があります。普通は i = 0, 1, 2, · · ·
の様に i = 0 からサンプリングを開始します。i の最大値は f (t) を何秒間サンプリングするかによって決めます。一秒
間に fs 回サンプリングしますので、 Ts 秒間サンプリングするとしたら i の最大値は fs · Ts になります (fs · Ts が整
数値でない時はそれに近い整数値を i の最大値にする)。
i の範囲を決めたら、後は f [i] = f (τ · i) と τ 秒おきに f (t) の値を f [i] に代入していくだけです。
例えば図 1 は f (t) = sin(2π · t) を fs = 5、τ = 0.2 で Ts = 1 秒間サンプリングしている状況です。0.2 秒おきに f [i]
の値が取り出されている事に注目して下さい。i の範囲は 0 から fs · Ts = 5 になります。
その結果図 2 の様なデジタル信号が出来上がります。
1
f(t)
1.5
f[1] = f(0.2・1)
1
f[2] = f(0.2・2)
0.5
f[5] = f(0.2・5)
0
0
0.2
0.4
0.6
f[0] = f(0)
-0.5
0.8
1
t
f[3] = f(0.2・3)
-1
f[4] = f(0.2・4)
-1.5
τ = 0.2
τ = 0.2
τ = 0.2
τ = 0.2
τ = 0.2
図 1: f (t) = sin(2π · t) のサンプリング
f[i]
1.5
1
0.5
0
0
1
2
3
4
-0.5
-1
-1.5
図 2: サンプリング結果のデジタル信号 f [i]
2
5
i
2
量子化
今回の講義で扱うデジタル時間領域信号 f [i] の値は前のテキスト (アナログ信号とデジタル信号) で実数値としました
が、コンピュータは実数値を扱う事が出来ませんので、実際には各 f [i] の値も離散化する必要があります。 f [i] の値、
つまり電圧や温度の様な物理量を離散化することを「量子化」と言います。
どれだけの間隔で離散化を行うかを決めるパラメータを「量子化幅」といい、今回の講義では ∆ で表すことにします。
この ∆ は自由に選ぶことが出来ます。ユーザが ∆ の値を決めたら、あとは f [i] のグラフに縦 ∆ の間隔で補助線を
引いて、各 f [i] の値を四捨五入して一番近い補助線の値に変更するだけです。と言ってもピンと来ないと思いますので、
図 3 から図 5 を見て下さい。図 3 は元のデジタル信号 f [i] です。図 4 は 縦 ∆ = 0.5 の間隔で補助線を引いて各 f [i] を
補助線の上に移動中の図です。図 5 が最終的に得られた量子化済みの f [i] です。
なお図 4 から分かるように、量子化後の各 f [i] の値が元の値から変わる場合があります。元の値と量子化後の値の差
を「量子化誤差」と言います。
f[i]
1
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
i
0
0
1
2
3
4
5
4
5
図 3: 元のデジタル信号 f [i]
f[i]
1
0.9
量子化誤差
0.8
⊿ = 0.5
0.7
0.6
0.5
0.4
0.3
⊿ = 0.5
0.2
0.1
i
0
0
1
2
3
図 4: ∆ = 0.5 で補助線を引く
3
f[i]
1
0.9
0.8
⊿ = 0.5
0.7
0.6
0.5
0.4
0.3
⊿ = 0.5
0.2
0.1
i
0
0
1
2
3
4
5
図 5: 量子化後の f [i]
量子化ビット数
3
前節で ∆ は自由に決めて良いと書きましたが、実際には ∆ に小数が含まれるとコンピュータで処理する際に面倒な
ので ∆ = 1 とすることが多いです。∆ = 1 とすれば量子化後の f [i] の値は整数値になるので処理が楽になります。
さてここで「量子化ビット数」 q という数字を導入します。単位はビットです。この量子化ビット数 q は ∆ = 1 で
f [i] を 2q 段階で量子化するということを意味します。例えば q = 2 なら f [i] を 22 = 4 段階で量子化します。
量子化後の f [i] の最小値は自由に決めて良いですが、一般的には 0 を最小値として選ぶ事が多いです。そうすると量
子化後の f [i] の値は 0 から 2q − 1 までの整数値となります。例えば q = 2 で最小値を 0 としたら、量子化後の f [i] の
値は 0、1、2、3 のいずれかになります。
また 2 の補数表現を使って −2(q−1) を最小値にする場合も多いです。そうすると量子化後の f [i] の範囲は −2(q−1) か
ら 2(q−1) − 1 までの整数値となります。表 1 に 2 の補数表現を使った際の代表的な q と量子化後の f [i] の範囲を示し
ます。
q ビット
1
表 1: 2 の補数表現を使った際の代表的な量子化ビット数 q と 量子化後の f [i] の範囲
段階数
f [i] の最小値
f [i] の最大値
21 = 2
−20 = −1
20 − 1 = 0
2
2 =4
−2 = −2
21 − 1 = 1
3
23 = 8
−22 = −4
22 − 1 = 3
4
24 = 16
−23 = −8
23 − 1 = 7
8
28 = 256
−27 = −128
27 − 1 = 127
16
216 = 65536
−215 = −32768
215 − 1 = 32767
24
224 = 16777216
−223 = − 8388608
223 − 1 = 8388607
2
1
4
さて量子化ビット数 q と f [i] の最小値を決めて ∆ = 1 で量子化すると元の信号の値域によってはあまり良くない結
果になる場合があります。例えば図 3 の信号 (値域は 0 から 1) を q = 2、最小値 0 で量子化した信号を図 6 に示します。
見て分かる通り信号の形が結構変わりますし、量子化後の f [i] として 2 と 3 が使われてないのでもったいないです。
f[i]
3
⊿=1
2
⊿=1
1
⊿=1
i
0
0
1
2
3
4
5
図 6: 図 3 を q = 2 で量子化した信号
そこで普通は元の信号を縦方向に α 倍してなるべく多くの f [i] の値を使うようにします。この α はユーザが自由に
決めて良い数字で、マイクのボリューム等をイメージすると分かりやすいでしょう。例えば図 3 の信号を縦方向に α = 3
倍してから q = 2、最小値 0 で量子化した信号が図 7 です。図 6 と比べると量子化後の f [i] として 2 と 3 を使うように
なったので信号の形が大分保存されていることが分かります。
f[i]
3
⊿=1
2
⊿=1
1
⊿=1
i
0
0
1
2
3
4
5
図 7: 図 3 を縦方向に α = 3 倍してから q = 2 で量子化した信号
なお繰り返しますが今回の講義では f [i] の値を実数とする、つまり f [i] を量子化しないと決めたので、この講義では
これ以上量子化について深く立ち入らないことにします。ただし量子化もなかなか奥が深い技術ですので、もし興味が
あれば自分で色々調べてみて下さい。
5
演習 1 (個人):CD の音声の fs と量子化ビット数を調べてノートにまとめよ。
演習 2 (個人):ハイレゾ音源の音声の fs と量子化ビット数を調べてノートにまとめよ。
演習 3 (個人):3G 対応携帯電話の音声 (AMR-NB) の fs と量子化ビット数を調べてノートにまとめよ。
演習 4 (個人):VoLTE 対応携帯電話の音声 (AMR-WB) の fs と量子化ビット数を調べてノートにまとめよ。
演習 5 (チーム):サンプリング周波数 fs を大きくした時のメリットとデメリットをチーム内で話し合ってノートにま
とめよ。
演習 6 (チーム):サンプリング周波数 fs を小さくした時のメリットとデメリットをチーム内で話し合ってノートにま
とめよ。
演習 7 (チーム):量子化ビット数を大きくした時のメリットとデメリットをチーム内で話し合ってノートにまとめよ。
なお用語「量子化誤差」を含むこと。
演習 8 (チーム):量子化ビット数を小さくした時のメリットとデメリットをチーム内で話し合ってノートにまとめよ。
なお用語「量子化誤差」を含むこと。
演習 9 (個人):f (t) = t2 を fs = 2 で Ts = 2 秒間サンプリングして得られた f [i] のグラフをノートに描きなさい。量
子化はしなくて良い。
演習 10 (個人):この f [i] を α = 1.5、q = 3、最小値 0 で量子化した信号のグラフをノートに描きなさい。
6