対数とデシベル
対数と、音量の比を表すときに使われるデシベルについて説明します。
<注意>
このページでは、数式を表示するためにMathJaxを使用しています。ブラウザの設定でスクリプト実行をブロックしている場合、ページ内の数式が正しく表示されません。
指数と対数
ある数\(\ a\ \)を\(\ n\ \)回掛けたものを\(\ a^n\ \)と書き、\(\ a\ \)の\(\ n\ \)乗と言うのでした。対数は、この逆の操作です。
定義 (対数)
\(\ a>0,\ a\neq1,\ x>0\ \)のとき、\(\ a^y=x\ \)を満たす\(\ y\ \)を、\(\ a\ \)を底とする\(\ x\ \)の対数と言い、\(\ y=\log_a x\ \)と書く。
つまり、\(\ \log_a x\ \)は「\(\ a\ \)を何乗したら\(\ x\ \)になるか」を表します。たとえば\(\ 2^8=256\ \)なので\(\ \log_2 256=8\ \)、\(\ 10^3=1000\ \)なので\(\ \log_{10}1000=3\ \)です。

\(\ y=2^x\ \)と\(\ y=\log_2 x\ \)のグラフは、直線\(\ y=x\ \)に関して対称です。
指数関数と対数関数は、互いに逆の関係にあります。
対数には、次の性質があります。
定理 (対数の性質)
- \(\ \log_a xy = \log_a x + \log_a y\ \)
- \(\ \log_a \dfrac{x}{y} = \log_a x - \log_a y\ \)
- \(\ \log_a x^n = n\log_a x\ \)
- \(\ \log_a x = \dfrac{\log_b x}{\log_b a}\ \)(底の変換)
いちばん大事なのは1つ目の性質で、対数をとると、掛け算が足し算に変わります。何倍、何倍、…と倍率を何度も掛け合わせる計算は、対数をとれば足し算で済むようになります。
2を底とする対数とビット数
改造でよく出てくるのは、2を底とする対数です。\(\ n\ \)ビットで表せる値は\(\ 2^n\ \)通りなので、\(\ N\ \)通りの値を表すのに必要なビット数は、\(\ \log_2 N\ \)以上の最小の整数です。
\[ \text{必要なビット数} = \lceil \log_2 N \rceil \]たとえば、100通りの値を表すには\(\ \log_2 100 \fallingdotseq 6.64\ \)なので7ビット、256通りならちょうど8ビットが必要です。
デシベル
音量のように、とても小さい値からとても大きい値までを扱う量は、比の対数で表すと便利です。人間の耳も、音の大きさの比をおおむね対数的に感じるとされています。
定義 (デシベル)
\[ L = 20\log_{10}\frac{A}{A_0}\ \mathrm{[dB]} \]
2つの振幅\(\ A,\ A_0\ \)の比を、次の値で表したものをデシベル(dB)と言う。
ここでいう振幅は、音の波形の値(サンプルの値や音量の倍率)のことです。音の強さ(パワー、エネルギー)は振幅の2乗に比例するので、パワーの比で表すときは\(\ 10\log_{10}\ \)を使います。どちらで計算しても、同じ音の比なら同じdBの値になります。
dBは比を表す単位なので、何と比べているかが大事です。この資料では、特に断りがなければ「元の音量と比べて」の意味で使います。
覚えておくと便利な値
| 振幅の比 | dB | 備考 |
|---|---|---|
| 2倍 | 約 +6dB | \(\ 20\log_{10}2 \fallingdotseq 6.02\ \) |
| 1倍 | 0dB | 変化なし |
| 1/2倍 | 約 -6dB | |
| 1/4倍 | 約 -12dB | |
| 10倍 | +20dB | |
| 1/10倍 | -20dB | |
| 1/1000倍 | -60dB | 残響が「消えた」とみなす目安 |
対数の性質から、倍率の掛け算はdBの足し算になります。たとえば、1/2倍(-6dB)を2回かけると1/4倍(-12dB)です。音量が半分になるたびに6dBずつ下がる、と覚えておくと、ほとんどの計算は暗算でできます。

左は振幅の比を普通の目盛で、右は対数目盛でとったものです。
対数目盛では、比が2倍になるごとにdBが約6ずつ増える直線になります。
例
DSPの音量を$7Fから$40にすると、\(\ 20\log_{10}(64/127) \fallingdotseq -5.95\ \)で、約6dB小さくなる。
音量$09は、\(\ 20\log_{10}(9/128) \fallingdotseq -23\ \)で、1倍と比べて約23dB小さい。
8ビット・16ビットで表せる範囲
\(\ n\ \)ビットの値で表せる最大値と最小の単位(1)の比は約\(\ 2^n\ \)なので、表せる音量の幅(ダイナミックレンジ)は約\(\ 6n\ \)dBです。
| ビット数 | ダイナミックレンジ |
|---|---|
| 4ビット(BRRの1サンプル) | 約 24dB |
| 8ビット | 約 48dB |
| 16ビット(DSPの出力) | 約 96dB |
BRRは1サンプルを4ビットで持ちますが、ブロックごとに粒度(シフト量)を変えることで、全体として16ビット近い範囲を表しています。
繰り返しによる減衰
ある処理を1回通すたびに音量が\(\ r\ \)倍になるとき、\(\ n\ \)回通した後の音量は\(\ r^n\ \)倍です。dBで表すと、1回あたりの変化\(\ 20\log_{10}r\ \)の\(\ n\ \)倍になります。
例 (エコーの残響時間)
エコーが1回繰り返すたびに2.5dBずつ小さくなるとき、-60dBまで下がるのは\(\ 60/2.5=24\ \)回目である。
ディレイが96ミリ秒なら、\(\ 24\times96 \fallingdotseq 2300\ \)ミリ秒、すなわち約2.3秒で残響が消える。
エコーの繰り返しや、毎回一定の割合で小さくなるエンベロープのように、同じ倍率が何度もかかる処理は、dBで考えると見通しがよくなります。
指数関数的な減衰と直線的な減衰
音量の下がり方には、大きく2通りあります。
- 直線的な減衰: 一定時間ごとに、一定の量ずつ小さくなる。dBで見ると、終わりに近づくほど急に下がる。
- 指数関数的な減衰: 一定時間ごとに、一定の割合(倍率)ずつ小さくなる。dBで見ると、一定の速さで下がる。

直線的な減衰(振幅が0まで下がる)と、指数関数的な減衰(振幅が1/1000、すなわち−60dBまで下がる)を、振幅とdBで比べたものです。
自然界の音(弦や鐘の響き、部屋の残響など)の多くは、指数関数的に減衰します。DSPのエンベロープのディケイやサステインは指数関数的に、リリースは直線的に音量を下げます。