聲音分貝的概念,dBSPL.dBm,dBu,dBV,dBFS


需要做個音頻的PPM表,看着一堆的音頻術語真是懵了,苦苦在網上扒了幾天的文檔,終於有了點收獲,下面關於聲音的分貝做個總結。

分貝 Decibel

分貝(dB)是一個對數單位(logarithmic unit), 它和很多常見的單位如“米”,“秒”或者“千克”等物理單位是不同的,它並不能直接用來描述一個物理量的大小或者多少,它表示的是兩個相同單位物理量的比值。分貝經常用來描述聲音,如超過50dB的噪聲就會影響人的睡眠和休息,但分貝不僅僅用來描述聲音,它還被用來描述電子學等其他領域的物理量,如描述信號強度的衰減 、信噪比等等。
前面提到分貝表示的是兩個物理量的比值,作為分母的那個量通常是一個標准的基准值(standard reference value),分貝描述的就是作為分子的物理量相對於這個基准值的大小,分貝的計算公式如下:

其中,valuerefvalueref是基准值。在使用分貝表示物理量基准值是非常重要的,基准值用分貝表示的話是0dB。

 

描述聲音的分貝

分貝可以描述很多的物理量,本文主要介紹分貝來描述聲音的信號的強弱。
用來描述聲音強度的物理量有很多:聲壓,功率,產生聲音信號的電壓等,使用不同的物理量來表示聲音的強度,其得到的分貝也是不同的。

dB(dBSPL)

聲音本質上來說是一種波,通過空氣傳播,傳到人耳朵里引發鼓膜的振動。所以,聲音的大小,實際就是對這種振動強度的反映。而由於空氣的振動會引起大氣壓強的變換,可以使用壓強變化的程度來描述聲音的大小,這就是“聲壓(SPL,Sound Pressure Levels)”概念,其單位是Pa。例如:1米外步槍射擊的聲音大約是7000Pa;10米外開過汽車大約是0.2Pa。
使用聲壓作為測量量的分貝就是dBSPL,通常用來表示聲音大小的dB多說指的就是dBSPL。聲壓和聲音大小的關系,可以使用如下公式表示

其中,I是聲音的強度;P是聲壓;ρρ是空氣阻力,通常在室溫下,空氣阻力大約是400。
分貝的計算還需要一個選擇一個特定的聲壓值作為“標准值”(0分貝),該值是固定的。有了這個基准值后代入上面的公式:

其中,P是聲壓測量值;PrefPref是標准值(0dBSPL)。這里選擇的聲壓標准值為2×105Pa,20μPa2×10−5Pa,20μPa,是人耳在1KHz這個頻率下能聽到的最小的聲音,大致相當於3米外一只蚊子在飛的聲音。將標准值代入上式:

dBm,dBu,dBV

前面根據聲音的振動,在傳播的過程引起大氣壓強的變化,使用聲壓作為測量量來計算聲音的分貝值。除了自然產生的聲音外,現在大多數的聲音都是使用電信號作為存儲和傳播的載體的,例如電視廣播,各種音頻文件等。dBm,dBu,dBV是使用和電信號相關的物理量作為被測物理量,計算其產生聲音的分貝值。
dBm是使用產生聲音信號的功率作為被測物理量,選擇1毫瓦(1mW)作為基准值,計算分貝值。計算公式:

在物理,功率P可以有電壓V和電阻R計算得到

由上面的公式可以得到dBu,使用電壓作為測量量,計算聲音的分貝值。在十九世紀三十年代,音頻設備的輸入電阻都是600歐姆,也就上面公式中的R = 600 歐姆。在dBm中,使用1mW作為基准值,那么在 R = 600 歐姆時就可以得到此時的電壓為0.775V
所以,dBu是以電壓作為測量量,計算聲音的分貝值,選擇的基准電壓為0.775V。計算公式:

dBV又是咋回事呢。在上上個實際音頻設備的輸入阻抗都是600歐姆,是固定不變的。但是到了現代,就有了更高阻抗的設備,例如1000歐姆,這樣再選擇0.775作為電壓的基准值,顯然是不合理的。所以,就有了一個新基准值1V。本質上dBu和dBV是沒有區別的,都是選擇電壓作為被測單位,只是選擇的基准值不同罷了。
dBV仍然是以電壓作為被測量,計算聲音的分貝值,選擇1V作為基准值。計算公式:

 

dBFS

前面的幾個被測量都是模擬量,在數字時代更多的音頻分貝表示是dBFS。dBFS的全稱為Decibels Full Scale,全分貝刻度,是數值音頻分貝值的表示方法。和前面幾個不一樣的時,dBFS的基准並不是最小的或者是中間的某一個值,是最大的那個值!也就是說0dBFS是數字設備能達到的最大值,除了最大值外都是負值。
以數字音頻的sample為16位無符號為例,16位的無符號的最大值為65536,因此dBFS的計算公式:

這樣,最小的也就是說16位無符號音頻的動態范圍為0 ~ -96dBFS。

 

dBFS 和 dBu之間的轉換

dBu是度量模擬信號的,而dBFS是度量數字信號的,並且dBFS不會用於度量模擬信號,所以沒有在dBu和dBFS之間沒有統一的轉換公式,依賴於具體的數字設備。在dBu和dBFS轉換時,需要規定一個峰值電壓,該電壓下產生的音頻信號經過AD轉換后得到的sample為0dBFS。例如,+18dBu對應於0dBFS,在該條件下 求 xdBu對應於ydBFS,那么就有 y=x18y=x−18

總結

本文主要介紹和聲音相關的分貝概念,分貝不同於其他的物理單位,表示的是相同物理量的比值,其具體的值依賴於選擇的被測量。

  • dBSPL,通常所說的dB,使用聲壓作為被測量,選擇20μPa20μPa作為基准值。
  • dBm,使用功率作為被測量,選擇1mW作為基准值。
  • dBu,使用電壓作為被測量,選擇0.775V作為基准值。
  • dBV,和dBu一樣,使用電壓作為被測量,選擇1V作為基准值。
  • dBFS,和上面的量都不相同,上面的量都是測量模擬值的,dBFS是測量數字音頻的,其選擇的基准值為sample的最大值為0dBFS,其他的值都為負值。

dBFS和模擬量之間的轉換,例如dBu,需要規定一個基礎的對應關系。例如+18dBu 對應於0dBFS,則ydBFS = x - 18

pcm音量計算

以下程序用在16Khz的單聲道或者8Khz的雙聲道的pcm數據的音量計算. 
來源自搜索的各種資料加實際測試
參考源暫未統計出.

注意要求的對數函數是log10,不是log.

int pcm_db_count(const unsigned char* ptr, size_t size) { int ndb = 0; short int value; int i; long v = 0; for(i=0; i<size; i+=2) { memcpy((char*)&value, ptr+i, 1); memcpy((char*)&value+1, ptr+i+1, 1); v += abs(value); } v = v/(size/2); if(v != 0) { ndb = (int)(20.0*log10((double)v / 65535.0 )); } else { ndb = -96; } return ndb; }

僅供參考:

db值   =   20 * log10 (A / B)

A: 可以為音頻數據某幀中的最大值

    eg: 2聲道,16位

        假設1幀buf數據 -> |ChA ChB|ChA ChB|ChA ChB|ChA ChB|ChA ChB|ChA ChB|......|ChA ChB|

        ChA = 2Byte(16位), ChB = 2Byte(16位)。

        ChA : A =  |max(ChA)| , ChB: A = |max(ChB)|

   注:16位以上正負大小相對應。

B: 音頻數據位數(8, 16, 32, 64) 

    eg: 16 -> B = 2^15 = 32768

     
8位以上,數據是有符號的,

eg: 1. 16位的數據 -> 0x0563 ,對應十進制 -> 1379, 它的DB = 20 * log10(1379 / 32768) = -27.5

      2. 16位的數據 -> 0xFE19, 對應十進制 -> -487, 它的DB = 20 * log10(487 / 32768) = -36

      3. 8位以下就是無符號數,以0x80(128)為靜音(16位數據靜音時為0)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM