Wireless・のおと
サイレックスの無線LAN 開発者が語る、無線技術についてや製品開発の秘話、技術者向け情報、新しく興味深い話題、サイレックスが提供するサービスや現状などの話題などを配信していきます。
対数とデシベルのはなし
我々無線屋は「デシベル(dB)」という単位を多用します。「RSSI -60dB」だとか「最大出力 14dB」「スプリアスマージン 5dB」「アンテナ利得 3dB」などと言ったりします。しかしデシベルっていったい何なんでしょうか。今回は対数とデシベルの話について、少し数学遊びを交えながら紹介します。
デシベルと対数
Wikipedia でデシベルの定義を引くと「ある物理量を基準となる量との比の常用対数によって表したもの」と出てきます。つまり dB という値は「比率」すなわち相対値を示したもので、絶対値ではないということがわかります。
対数というのは乗数の逆です。10 の 3 乗(10^3)は 1000 ですが、1000 を常用対数で表わすと log10(1000)=3 になります。すなわち L=logN(X) に対して N^L=X が成り立ち、N のことを「底」と呼んでいます。「常用対数」とは10 を底にとする対数で(※註)、わかりやすく言えば「ゼロが何個付くか」を示しています。log10(1000)=3 というのはゼロが3つ付いていることですね。マイナスの値だとこれが小数点になり、例えば log10(0.001)=-3 です。対数は整数になるとは限らず、例えば log10(20) は 1.30103... という実数になります。
(※註)工学屋は 10 を底とする常用対数を使いますが、数学屋さんが使うのは e=2.71828.. を底とする「自然対数」です。log() という表記で常用対数、ln() という表記で自然対数を使い分けることもあります。
10 を底とする常用対数比は「ベル(B)」という単位で呼ばれますが、ベルという単位では滅多に使われません。技術屋が多様するデシベル(dB)はベルの 1/10、つまり 10dB = 1B になります。理屈でいえばミリベル(mB)とかキロベル(kB)という単位だってあり得ますが、デシベル以外の対数表現はほぼ使われません。0dB は 10^0=1 倍、1dB は 10^0.1≒1.259 倍、3dB は 10^0.3≒1.995 倍、10 dB は 10^1=10 倍...という具合になります。
対数の良いところは、非常に大きな範囲の値を小さな数値で表現できることです。100 万倍は log10(100 万)=60dB (すなわち 10 の 6 乗)ですし、100 兆倍は log10(100 兆)=140dB (10 の 14 乗)です。ドラゴンボールの戦闘力やキン肉マンの友情パワーも dB で表現すれば、あんなに沢山のゼロを振り回す必要は無いんですね。
もう一つの良いところは掛け算・割り算を足し算・引き算で置き換えられることです。例えば 100 万×100 兆は log10(100 万×100兆) = log10(100 万)+log10(100 兆)なので 200dB(10 の 20 乗)という値がすぐ出てきます。伝送系における利得や損失は足し引きではなく掛け算なので、dB で表現すると計算が楽になるのです。
対数と単位表記
さて dB は「比率」です。なので「従来製品に対して +3dB の改善」というような場合には「あぁ相対的に2倍になったんだな(10^0.3=1.9952623)」とわかりますが、「出力 14dB」だとか「アンテナ利得 3dB」では何が基準なんだかわかりません。実はこれらの数値は「dBm」や「dBi」という単位であり、dBm であれば 1mW を基準とした電力比を、dBi であれば全方位無指向性アンテナを基準とした最大利得比を示しています。例えば 14dBm は 1mW x 10^1.4 すなわち約 25mW ということになります。dB, dBi, dBm は厳密には区別して扱われるべきものですが、しばしばズボラして単に「dB」と書かれます。
何でわざわざ発信電力やらアンテナ利得を dB(dBm, dBi) で表記するかというと、前述のように伝送系の計算が楽になるからです。発信出力 14dBm、受信感度 -60dBm、送受信アンテナの利得が 6dBi、アンテナケーブルの損失が -3dB だとすると電力差は 14 - (-60) + 6 - 3 = 77dB となりますが、これをリンクバジェット(Link Budget)と呼びます。空間伝達に伴う電波の減衰は以前に紹介したフリス公式から推定できるので、例えば 2.4GHz、伝達係数 3.0、距離 10m とすれば損失は約 70dB となり、マージン +7dB で接続できる計算になります。距離を 20m に伸ばすと損失は 79dB となるので約 2dB 不足することになり、送信出力を上げるか受信感度を上げるか、あるいはアンテナ利得を上げてケーブル損失を減らすなどの処置が必要になります。単位を dB に統一しておくと、こういう切った貼ったの計算を足し算・引き算でできる利点があるのです。
対数で遊んでみよう
X を底とする対数で数値 Y を表現する n=logX(Y) というのは、数値 Y を X 進数で表記したとき n 桁になる、ということを現わしています。この基本原則が判っているといろいろと応用が効きます。
log の性質から logX(Y^Z) = Z * logX(Y) となるので、これはつまり Y 数進 Z 桁の数値を X 進数で表現すると Z * logX(Y) 桁で表現できるということを意味しています。例えば 256 ビットで表現可能な最大値が幾つになるのか、いちいち 2^256 を計算しなくとも 256 * log10(2) = 256 * 0.30103 = 10 進数 78 桁ということがわかるわけです。逆にアニメ映画「サマーウォーズ」で「2400 桁の素数を使った高度な暗号システム云々...」という台詞が出てきますが、これが何ビットの鍵なのかも 2400 / 0.30103 = 7972.6273 なので「要するに 8192bit の RSA 鍵だな」ということが判ります。
もうひとつ対数の応用です。我々は数字を表す時に「進数」を用いて表記し、例えば「95」という数字は 10 進数で表記したもので、 2 進数なら「1011111」ですし、16 進数なら「5F」になります。進数は大きい方が桁数は小さくなりますが、1桁あたりに要する文字の種類は増えます。これはダイヤル式の文字盤表示を考えてみればわかりやすいでしょう。2 進式の文字盤表示は1桁あたり 2 種類の表示で事が足りますがそのかわり桁が多くなり、10 進式の文字盤表示は桁が少なくなるかわり1桁あたり 10 種類の文字を刻んだダイヤルが必要になります。
では、進数表記は大きい方が良いのしょうか、小さい方が良いのでしょうか?あるいは何処かに最適点があるのでしょうか?これも対数を使って求めることができます。
X 進数で表記された数値というのは「X 種類のシンボルが Z 桁並んだもの」なので、その情報量は X*Z になります。任意の数 Y を X 進数で表記したときの桁数は Z=logX(Y) ですから、Y を X 進数で表記したときの情報量は XlogX(Y) になります。進数 X に対して情報量が何処で最小になるかは、この数式を X で微分すればわかるわけです。
任意の底 X を持つ logX(Y) は自然対数を用いて log(Y)/log(X) に変換できるので、情報量は XlogX(Y) = Xlog(Y) / log(X) となります。ここで log(Y) は任意の数 Y に対して定まる定数ですから、変動成分(仮に情報量係数と呼びます)は X/log(X) となります。これを X で微分すると、商の微分法則から
f(x)/g(x) (f'(x)・g(x) - f(x)・g'(x))/{g(x)}^2
f(x) = X
g(x) = log(X)
f'(x) = 1
g'(x) = 1/X
として
(f'(x)・g(x) - f(x)・g'(x))/{g(x)}^2 = (log(X) - X*1/X) / (log(X)^2)
= (log(X) - 1) / log(X)^2
= log(X) - 1/log(X)^2
この微分関数 f'(x) がゼロとなる点が f(x) の最低点であり、それは log(X)=1 となる点、すなわち X=e (e=自然対数の底、ネイピア数 2.71828...)の場合となります。しかし現実問題として進数は整数ですから、2.7 に最も近い整数である 3 進数が最も情報効率のよい進数表記である、ということになります。
情報量係数 X/log(X) を実際にプロットすると図のようになります。
進数は 2 を下回ると情報量は急激に発散する一方、2 を超えると 2.7 で最低点に達したあとは微増してゆきます。進数 x に対する係数は
x=2.0 2.885
x=2.7 2.718
x=3.0 2.731
x=4.0 2.885
x=10.0 4.343
x=12.0 4.829
x=16.0 5.794
となりますので、3 進数が 2 進数より効率が良いと言ってもその差は僅かで 5.4% に過ぎません。一方で 2 進数に比して 10 進数は 1.5 倍、16 進数は 2 倍の情報量が必要なことがわかります。現在のコンピュータが基本的に情報を 2 進数で扱っているのは「ON/OFF だけで設計できるから回路が簡単になる」という以外に、こういう数学的な裏付けもあるんですね。
そういえば昔々、某大手電器メーカーが「4値論理の計算機を開発した」と、2値モノクロ画像と4値グレイスケール画像を新聞の見開き一杯に使って宣伝を打ったことを覚えています。当時高校生くらいだった私でさえ「ピクセル輝度深度と論理演算単位は別だろ」と思いましたが、上記の試算でも2値と4値では情報効率は同じで、回路が複雑化するだけ4値が不利になるだけに思えますね。あれは製品価値とはほぼ無関係な研究所の成果発表と株価対策だったんだろうなぁ。光コンピュータだとか第五世代コンピュータ(笑)だとかが「次世代」計算機だと言われ、大手日本企業の多くが潤沢な資金をそれら次世代技術の研究に投資できていた、古き良き?時代のお話です。
Wikipedia でデシベルの定義を引くと「ある物理量を基準となる量との比の常用対数によって表したもの」と出てきます。つまり dB という値は「比率」すなわち相対値を示したもので、絶対値ではないということがわかります。
対数というのは乗数の逆です。10 の 3 乗(10^3)は 1000 ですが、1000 を常用対数で表わすと log10(1000)=3 になります。すなわち L=logN(X) に対して N^L=X が成り立ち、N のことを「底」と呼んでいます。「常用対数」とは10 を底にとする対数で(※註)、わかりやすく言えば「ゼロが何個付くか」を示しています。log10(1000)=3 というのはゼロが3つ付いていることですね。マイナスの値だとこれが小数点になり、例えば log10(0.001)=-3 です。対数は整数になるとは限らず、例えば log10(20) は 1.30103... という実数になります。
(※註)工学屋は 10 を底とする常用対数を使いますが、数学屋さんが使うのは e=2.71828.. を底とする「自然対数」です。log() という表記で常用対数、ln() という表記で自然対数を使い分けることもあります。
10 を底とする常用対数比は「ベル(B)」という単位で呼ばれますが、ベルという単位では滅多に使われません。技術屋が多様するデシベル(dB)はベルの 1/10、つまり 10dB = 1B になります。理屈でいえばミリベル(mB)とかキロベル(kB)という単位だってあり得ますが、デシベル以外の対数表現はほぼ使われません。0dB は 10^0=1 倍、1dB は 10^0.1≒1.259 倍、3dB は 10^0.3≒1.995 倍、10 dB は 10^1=10 倍...という具合になります。
対数の良いところは、非常に大きな範囲の値を小さな数値で表現できることです。100 万倍は log10(100 万)=60dB (すなわち 10 の 6 乗)ですし、100 兆倍は log10(100 兆)=140dB (10 の 14 乗)です。ドラゴンボールの戦闘力やキン肉マンの友情パワーも dB で表現すれば、あんなに沢山のゼロを振り回す必要は無いんですね。
もう一つの良いところは掛け算・割り算を足し算・引き算で置き換えられることです。例えば 100 万×100 兆は log10(100 万×100兆) = log10(100 万)+log10(100 兆)なので 200dB(10 の 20 乗)という値がすぐ出てきます。伝送系における利得や損失は足し引きではなく掛け算なので、dB で表現すると計算が楽になるのです。
対数と単位表記
さて dB は「比率」です。なので「従来製品に対して +3dB の改善」というような場合には「あぁ相対的に2倍になったんだな(10^0.3=1.9952623)」とわかりますが、「出力 14dB」だとか「アンテナ利得 3dB」では何が基準なんだかわかりません。実はこれらの数値は「dBm」や「dBi」という単位であり、dBm であれば 1mW を基準とした電力比を、dBi であれば全方位無指向性アンテナを基準とした最大利得比を示しています。例えば 14dBm は 1mW x 10^1.4 すなわち約 25mW ということになります。dB, dBi, dBm は厳密には区別して扱われるべきものですが、しばしばズボラして単に「dB」と書かれます。
何でわざわざ発信電力やらアンテナ利得を dB(dBm, dBi) で表記するかというと、前述のように伝送系の計算が楽になるからです。発信出力 14dBm、受信感度 -60dBm、送受信アンテナの利得が 6dBi、アンテナケーブルの損失が -3dB だとすると電力差は 14 - (-60) + 6 - 3 = 77dB となりますが、これをリンクバジェット(Link Budget)と呼びます。空間伝達に伴う電波の減衰は以前に紹介したフリス公式から推定できるので、例えば 2.4GHz、伝達係数 3.0、距離 10m とすれば損失は約 70dB となり、マージン +7dB で接続できる計算になります。距離を 20m に伸ばすと損失は 79dB となるので約 2dB 不足することになり、送信出力を上げるか受信感度を上げるか、あるいはアンテナ利得を上げてケーブル損失を減らすなどの処置が必要になります。単位を dB に統一しておくと、こういう切った貼ったの計算を足し算・引き算でできる利点があるのです。
対数で遊んでみよう
X を底とする対数で数値 Y を表現する n=logX(Y) というのは、数値 Y を X 進数で表記したとき n 桁になる、ということを現わしています。この基本原則が判っているといろいろと応用が効きます。
log の性質から logX(Y^Z) = Z * logX(Y) となるので、これはつまり Y 数進 Z 桁の数値を X 進数で表現すると Z * logX(Y) 桁で表現できるということを意味しています。例えば 256 ビットで表現可能な最大値が幾つになるのか、いちいち 2^256 を計算しなくとも 256 * log10(2) = 256 * 0.30103 = 10 進数 78 桁ということがわかるわけです。逆にアニメ映画「サマーウォーズ」で「2400 桁の素数を使った高度な暗号システム云々...」という台詞が出てきますが、これが何ビットの鍵なのかも 2400 / 0.30103 = 7972.6273 なので「要するに 8192bit の RSA 鍵だな」ということが判ります。
もうひとつ対数の応用です。我々は数字を表す時に「進数」を用いて表記し、例えば「95」という数字は 10 進数で表記したもので、 2 進数なら「1011111」ですし、16 進数なら「5F」になります。進数は大きい方が桁数は小さくなりますが、1桁あたりに要する文字の種類は増えます。これはダイヤル式の文字盤表示を考えてみればわかりやすいでしょう。2 進式の文字盤表示は1桁あたり 2 種類の表示で事が足りますがそのかわり桁が多くなり、10 進式の文字盤表示は桁が少なくなるかわり1桁あたり 10 種類の文字を刻んだダイヤルが必要になります。
では、進数表記は大きい方が良いのしょうか、小さい方が良いのでしょうか?あるいは何処かに最適点があるのでしょうか?これも対数を使って求めることができます。
X 進数で表記された数値というのは「X 種類のシンボルが Z 桁並んだもの」なので、その情報量は X*Z になります。任意の数 Y を X 進数で表記したときの桁数は Z=logX(Y) ですから、Y を X 進数で表記したときの情報量は XlogX(Y) になります。進数 X に対して情報量が何処で最小になるかは、この数式を X で微分すればわかるわけです。
任意の底 X を持つ logX(Y) は自然対数を用いて log(Y)/log(X) に変換できるので、情報量は XlogX(Y) = Xlog(Y) / log(X) となります。ここで log(Y) は任意の数 Y に対して定まる定数ですから、変動成分(仮に情報量係数と呼びます)は X/log(X) となります。これを X で微分すると、商の微分法則から
f(x)/g(x) (f'(x)・g(x) - f(x)・g'(x))/{g(x)}^2
f(x) = X
g(x) = log(X)
f'(x) = 1
g'(x) = 1/X
として
(f'(x)・g(x) - f(x)・g'(x))/{g(x)}^2 = (log(X) - X*1/X) / (log(X)^2)
= (log(X) - 1) / log(X)^2
= log(X) - 1/log(X)^2
この微分関数 f'(x) がゼロとなる点が f(x) の最低点であり、それは log(X)=1 となる点、すなわち X=e (e=自然対数の底、ネイピア数 2.71828...)の場合となります。しかし現実問題として進数は整数ですから、2.7 に最も近い整数である 3 進数が最も情報効率のよい進数表記である、ということになります。
情報量係数 X/log(X) を実際にプロットすると図のようになります。
進数は 2 を下回ると情報量は急激に発散する一方、2 を超えると 2.7 で最低点に達したあとは微増してゆきます。進数 x に対する係数は
x=2.0 2.885
x=2.7 2.718
x=3.0 2.731
x=4.0 2.885
x=10.0 4.343
x=12.0 4.829
x=16.0 5.794
となりますので、3 進数が 2 進数より効率が良いと言ってもその差は僅かで 5.4% に過ぎません。一方で 2 進数に比して 10 進数は 1.5 倍、16 進数は 2 倍の情報量が必要なことがわかります。現在のコンピュータが基本的に情報を 2 進数で扱っているのは「ON/OFF だけで設計できるから回路が簡単になる」という以外に、こういう数学的な裏付けもあるんですね。
そういえば昔々、某大手電器メーカーが「4値論理の計算機を開発した」と、2値モノクロ画像と4値グレイスケール画像を新聞の見開き一杯に使って宣伝を打ったことを覚えています。当時高校生くらいだった私でさえ「ピクセル輝度深度と論理演算単位は別だろ」と思いましたが、上記の試算でも2値と4値では情報効率は同じで、回路が複雑化するだけ4値が不利になるだけに思えますね。あれは製品価値とはほぼ無関係な研究所の成果発表と株価対策だったんだろうなぁ。光コンピュータだとか第五世代コンピュータ(笑)だとかが「次世代」計算機だと言われ、大手日本企業の多くが潤沢な資金をそれら次世代技術の研究に投資できていた、古き良き?時代のお話です。