対数とデシベル

対数と、音量の比を表すときに使われるデシベルについて説明します。

<注意>
このページでは、数式を表示するために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\ \)に関して対称です。
指数関数と対数関数は、互いに逆の関係にあります。

対数には、次の性質があります。

定理 (対数の性質)

  1. \(\ \log_a xy = \log_a x + \log_a y\ \)
  2. \(\ \log_a \dfrac{x}{y} = \log_a x - \log_a y\ \)
  3. \(\ \log_a x^n = n\log_a x\ \)
  4. \(\ \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ビットが必要です。

デシベル

音量のように、とても小さい値からとても大きい値までを扱う量は、比の対数で表すと便利です。人間の耳も、音の大きさの比をおおむね対数的に感じるとされています。

定義 (デシベル)
2つの振幅\(\ A,\ A_0\ \)の比を、次の値で表したものをデシベル(dB)と言う。

\[ L = 20\log_{10}\frac{A}{A_0}\ \mathrm{[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のエンベロープのディケイやサステインは指数関数的に、リリースは直線的に音量を下げます。

参照

音程と周波数
差分方程式
Z変換
多項式近似