首頁 > 軟體

分貝單位的本質(下半篇),dBm、dBFS、dBV的妙處你想象不到

2021-01-13 19:00:15

上半篇講到了聲音分貝的概念,

對於聲音的單位:dB SPL和dB SIL,有興趣瞭解並推算的朋友,可以點選以下連結(PC端效果更佳)
http://www.sengpielaudio.com/calculator-soundlevel.htm

下面我們進入正題。

功率和電壓的dB的區別

上半篇裡說過了,關於dB最初的單位是用來描述功率(單位瓦特)的。那麼當初功率的相對值為什麼要用dB描述呢?再一次列一下公式:
(L_{dB} = 10 times log_{10}frac{P1}{P0})

注意P1和P0的單位都是瓦。在上半篇說,dB可以形容聲音。那麼在電子工程中,dB既然可以形容功率了,那麼dB也應該可以形容電壓。當dB用來形容電壓時的功率是這樣的:

(L_{dB} = 10 times log_{10}(frac{U1}{U0})^{2})

注意U1和U0都是電壓,單位都是伏特。哎呀我擦,怎麼就莫名其妙就多了個平方呢?

這個時候初中物理老師又出來了,ta告訴了我們:
(P = frac{{U}^{2}}{R})

把這個公式代到上述的那個公式中:

(L_{dB} = 10 times log_{10}frac{P1}{P0})

可得:

(L_{dB} = 10 times log_{10}frac{frac{{U1}^{2}}{R}}{frac{{U2}^{2}}{R}} = 10 times log_{10}(frac{U1}{U0})^{2})

這還沒完,初高中數學老師出來了,ta說:
(L_{dB} = 10 times log_{10}(frac{U1}{U0})^{2} = 20 times log_{10}frac{U1}{U0})

所以當P1/P0是2的時候,也就是P1比P0的功率大一倍的時候,算得約等於是3dB,此時P1比P0大3dB。

而當U1/U0是2的時候,也就是U1比U0的電壓大一倍的時候,算得約等於是6dB,此時U1比U0大6dB。

哎呀我擦,dB你這小夥子你還有兩副嘴臉……

dB在電子工程中的好處都有啥

為啥貝爾大佬這麼喜歡用log10,這是有好處的,比如在電子中最常出現的功率放大器,如下:

上面的這張圖,從一開始的輸入電壓到最後的輸出電壓,放大的倍數是632倍。這裡使用了乘法,如果放大器太多了,那麼我們需要拿出計算器出來慢慢乘,有點不方便。

這個時候初高中數學老師又跳出來了!ta說了,log的運演演算法則是這樣的:
(20log_{10}({M1}times{M2}) = 20log_{10}{M1} + 20log_{10}{M2})

以上的M1和M2都是放大倍數,如果兩個放大倍數相乘的話,可以轉換成對數形式的相加。

等一下,這玩意怎麼有點熟悉?:
(20log_{10}{M1})

這玩意不就是電壓的dB表示形式嗎?:
(20log_{10}{M1} = 20 times log_{10}frac{U1}{U0})

那麼上圖中的放大器的表示形式可以變成:

可以看到通過dB這個單位,我們把難搞的乘法變成了簡單的加法。(想象不到吧表情)

可不可以使用絕對值?

上面說的那些都是相對值,如果我想用dB來表示一個絕對值的量,行不行?

當然可以,我們再把功率的dB公式拉出來一下:
(L_{dB} = 10 times log_{10}frac{P1}{P0})

我們發現只要P0設定成一個固定的值,然後把當前要計算的功率代入到P1,最終的得到的L就是一個絕對值啊。

包括dBm或者dBV,以及其他dB後面加個單位的的表示方法都是這個思路。除了dBFS稍微有點特殊,下文會講到。

dBm全稱為:decibel relative to one milliwatt,所以他的公式即為:

(L_{dBm} = 10 times log_{10}frac{P1}{1mW})

其中1mW即為1毫瓦,如果P1是1W(1瓦)的話,那麼代入可得到30dBm。

那麼同理,dBV全稱為:decibel relative to one volt,所以他的公式即為:

(L_{dBV} = 20 times log_{10}frac{U1}{1V})

如果U1為2伏特的話,那麼代入可得到6dBV。

dB的好處還有啥

首先我們先上兩張圖觀察一下:

那麼請耐心聽我嘮叨一下。這兩張圖描述的是同一個東西,只是使用了不同的單位。

其中縱座標的單位是一樣的,都是剛才說的dBV,比如0dBV就是1V,比如-6dBV就是0.5V。縱座標代表了幅度,越往上幅度越大,沒毛病。

橫座標就不一樣了:
在前面這張圖中0Hz到1MHz是線性遞增的,因為這個區間範圍太大了,所以無法看到0Hz到100Hz之間的具體資訊,而只看到一條几乎貼近縱座標的、陡峭上升的綠色斜線。

後面的這張圖的橫座標」有點奇怪「,橫座標分別為1Hz、10Hz、100Hz、1kHz、10kHz、100kHz、1MHz,這是以10倍數遞增的關係,這樣的優點很明顯,我們可以看到各頻率範圍的訊號幅度。可以看到10Hz~100kHz的範圍內的訊號的幅度比較大,其他頻率範圍的幅度比較低。

這種10倍數遞增的橫座標為什麼能這麼標,它的本質是什麼?它的本質就是dB呀~

為了說明問題,那麼在這裡我們發明一個新的單位dBHz:

(L_{dBHz} = 10 times log_{10}frac{F1}{1Hz})

F1是頻率,它的單位是Hz。那麼分別把奇怪的橫座標:1Hz、10Hz、100Hz、1kHz、10kHz、100kHz、1MHz代入到上面這個公式可以得到:

0dBHz、10dBHz、20dBHz、30dBHz、40dBHz、50dBHz、60dBHz。可以看到這個橫座標在dBHz的角度看是「線性」增長的,妙啊,沒毛病!

dBFS又妙在哪裡

dBFS的全稱是Decibels relative to full scale。dBFS和dBm之間有固定的轉化關係:

(X_{dBFS} = Y_{dBm} - MAXOUTPUT_{dBm})

但是不同裝置的MAXOUTPUT即最大輸出功率不一樣,比如如果一個器件的最大輸出功率是20dBm(也即100mW),那麼:

(X_{dBFS} = Y_{dBm} -20)

所以在這個器件中,當我們想把dBm設定成最大的20dBm的時候,需要把dBFS設定成0。當想把dBm設定成5dBm的時候,需要把dBFS設定成-15。

所以dBFS的最大值就是0。為啥需要dBFS這個設定這麼奇怪的單位?這是因為在數位域中我們需要設定訊號的幅度。

小夥子,本老同志又要上公式了,你不能閃!

在16bit的訊號中,幅度(AMP)和dBFS之間的關係如下:

(L_{dBFS} = 10 times log_{10}(frac{AMP}{INT16MAX})^{2})

也即:

(L_{dBFS} = 20 times log_{10}frac{AMP}{INT16MAX})

正因為這條公式的定義,才會有dBFS最大值為0的設定。因為AMP幅度最大是INT16MAX,計算出公式得到dBFS為0。

注:INT16MAX為16位元有符號數的最大值,即為32767

一般在程式碼中會根據設定的dBFS的值然後計算得出當前的AMP幅度。

至於公式中為什麼會有這個平方:
((frac{AMP}{INT16MAX})^{{color{Red} 2}})

我是這麼理解的,因為dBFS表示的依然是和dBm類似的功率的值,也即是最終以瓦特為單位。而器件中的電阻是固定的,幅度基本和電壓一個單位,所以根據:
(P = frac{{U}^{2}}{R})
計算,最終幅度的確需要加一個平方。

因為本人水平有限,難免會有些紕漏或者沒講清楚的地方。可以加我公眾號binfun或者留言討論,謝謝!

感謝閱讀!

巨人的肩膀:

https://www.youtube.com/watch?v=mLMfUi2yVu8


IT145.com E-mail:sddin#qq.com