FFMpeg音頻混合,背景音(六):PCM文件格式詳解


一、概述

    PCM 脈沖編碼調制是Pulse Code Modulation的縮寫。脈沖編碼調制是數字通信的編碼方式之一。主要過程是將話音、圖像等模擬信號每隔一定時間進行取樣,使其離散化,同時將抽樣值按分層單位四舍五入取整量化,同時將抽樣值按一組二進制碼來表示抽樣脈沖的幅值。

二、語音編碼原理

    有一定電子基礎的都知道傳感器采集音頻信號是模擬量,而我們實際傳輸過程中使用的是數字量。而這就涉及到模擬轉數字的過程。而模擬信號數字化必須經過三個過程,即抽樣、量化和編碼,以實現話音數字化的脈沖編碼調制(PCM,Pulse Coding Modulation)技術。

 
模擬信號轉換成數字信號

1、抽樣(Sampling)

    抽樣是把模擬信號以其信號帶寬2倍以上的頻率提取樣值,變為在時間軸上離散的抽樣信號的過程。

    采樣率 (sample):每秒從連續信號中提取並組成離散信號的采樣個數,用赫茲(Hz)來表示.

舉例:
如音頻信號采樣率為8000hz。
可以理解上圖采樣對應圖中 那段電壓隨時間變化的曲線 為1秒 那下面那個1 2 3 …10那就因該有1-8000個點,即將1秒均分為8000份,依次取出來那8000個點時間 對應的電壓值。

2、量化(quantizing)

    抽樣信號雖然是時間軸上離散的信號,但仍然是模擬信號,其樣值在一定的取值范圍內,可有無限多個值。顯然,對無限個樣值一一給出數字碼組來對應是不可能的。為了實現以數字碼表示樣值,必須采用“四舍五入”的方法把樣值分級“取整”,使一定取值范圍內的樣值由無限多個值變為有限個值。這一過程稱為量化。

    量化后的抽樣信號與量化前的抽樣信號相比較,當然有所失真,且不再是模擬信號。這種量化失真在接收端還原模擬信號時表現為噪聲,並稱為量化噪聲。量化噪聲的大小取決於把樣值分級“取整”的方式,分的級數越多,即量化級差或間隔越小,量化噪聲也越小。

    采樣位數:指的是描述數字信號所使用的位數。
    8位(8bit)代表2的8次方=256,16 位(16bit)則代表2的16次方=65536; 采樣位數越高,精度越高。

這里引用了采樣位數來描述模擬信號之間的最小間隔。
假設我們采樣位數是 8 ,而模擬信號的范圍是2,0,那么數字信號之間的間隔最小就是2/2^8= 2/256=1/128;
同理采樣位數是16,那么 數字信號之間的最小間隔就是2/256/256=1/(128*256)

舉例
如音頻傳感器采集到的電壓范圍為0-3.3V,采樣位數為8bit(位)
即我們把3.3V/ 2^8 = 0.0128 即為量化精度。
我們把3.3v分成0.0128為步進的Y軸,如圖3中的1 2 …8就變成了0 0.0128 0.0256 …..3.3 V
比如某個采樣點的電壓值為1.652V(128 * 0.128 與 129 * 0.128之間) 我們對它四舍五入就為1.65V 對應 量化等級為128 。

3、編碼(Coding)

    量化后的抽樣信號就轉化為按抽樣時序排列的一串十進制數字碼流,即十進制數字信號。簡單高效的數據系統是二進制碼系統,因此,應將十進制數字代碼變換成二進制編碼,根據十進制數字代碼的總個數,可以確定所需二進制編碼的位數,即字長(采樣位數)這種把量化的抽樣信號變換成給定字長的二進制碼流的 過程稱為編碼。

舉例
接着上面的1.65V 對應 量化等級為128 。對應的2進制為10000000 。即該采樣點編碼后結果為10000000 。當然這是沒有考慮正負值情況下的編碼方式,而且編碼方式種類非常多,需要具體問題具體分析。(PCM音頻格式編碼為A律13折線編碼)

三、PCM 音頻編碼

    PCM信號未經過任何編碼和壓縮處理(無損壓縮)。與模擬信號比,它不易受傳送系統的雜波及失真的影響。動態范圍寬,可得到音質相當好的效果。編碼上采用A律13折線編碼。

1、A律13折線

    A律是PCM非均勻量化中的一種對數壓擴形式。數字脈沖編碼調制(PCM)是目前模擬信號數字化的基本方法,PCM包括采樣、量化、編碼三個步驟,其中量化是對抽樣值的取值離散,根據量化間隔的不同選取分為均勻量化和非均勻量化,非均勻量化可以有效地改善信號的量化信噪比。語音信號的量化常采用ITU建議的兩種對數形式的非均勻量化壓縮特性:A律和μ律,A律編碼主要用於30/32路一次群系統, A律PCM用於歐洲和中國。

2、聲道

    聲道可以分為單聲道和立體聲(雙聲道)
    PCM的每個樣本值包含在一個整數i中,i的長度為容納指定樣本長度所需的最小字節數。

    首先存儲低有效字節,表示樣本幅度的位放在i的高有效位上,剩下的位置為0,這樣8位和16位的PCM波形樣本的數據格式如下所示。
 
 

3、采樣頻率

    人對頻率的識別范圍是 20HZ - 20000HZ, 如果每秒鍾能對聲音做 20000 個采樣, 回放時就足可以滿足人耳的需求.

  • 8000hz 為電話采樣。
  • 22050 的采樣頻率是常用的。
  • 44100已是CD音質, 超過48000的采樣對人耳已經沒有意義

對采樣率為44.1kHz的AAC(Advanced Audio Coding)音頻進行解碼時,一幀的解碼時間須控制在23.22毫秒內。通常是按1024個采樣點一幀。

為什么這里需要說下音頻幀呢?
音頻的幀的概念沒有視頻幀那么清晰,幾乎所有視頻編碼格式都可以簡單的認為一幀就是編碼后的一副圖像。但音頻幀跟編碼格式相關,它是各個編碼標准自己實現的。因為如果以PCM(未經編碼的音頻數據)來說,它根本就不需要幀的概念,根據采樣率和采樣精度就可以播放了。比如采樣率為44.1kHZ,采樣精度為16位的音頻,你可以算出bitrate(比特率)是4410016kbps,每秒的音頻數據是固定的4410016/8 字節。
但是我們不希望每一次采樣都返回給我們進行處理,我們希望的是返回一段時間內的所有采樣數據。這里的音頻幀就是每次返回給我們多少個采樣數據,一般情況是下返回2048個采樣數據。
那么單聲道 采用16位采樣位數 2048個采樣數據的大小是多少呢 2048*16/8 = 4096字節。

4、采樣位數

    每個采樣數據記錄的是振幅, 采樣精度取決於儲存空間(采樣位數)的大小:

  • 1 字節(也就是8bit) 只能記錄 256 個數, 也就是只能將振幅划分成 256 個等級
  • 2 字節(也就是16bit) 可以細到 65536 個數, 這已是 CD 標准了;
  • 4 字節(也就是32bit) 能把振幅細分到 4294967296 個等級, 實在是沒必要了

    如果是雙聲道(stereo), 采樣就是雙份的, 文件也差不多要大一倍.

5、比特率

    碼率是指經過編碼后的音頻數據每秒鍾需要用多少個比特來表示.

6、有損和無損

    對於我們最常說的“無損音頻”來說,一般都是指傳統CD格式中的16bit/44.1kHz采樣率的文件格式,而知所以稱為無損壓縮,也是因為其包含了20Hz-22.05kHz這個完全覆蓋人耳可聞范圍的頻響頻率而得名。

這里我有個混淆的地方是 聲道和采樣頻率之間的關系?剛開始假設采樣頻率是44100,要是使用雙聲道的話,那么每個聲道的采樣率就是22100了。其實這是錯誤的,采樣頻率是在每個聲道上的采樣速率,不是在所有頻道的采樣速率。
因此,要是采樣速率是44100 ,那么雙聲道,采集的樣本個數應該是88200個。

四、A律13折

歸納:

(1)y軸等分成8分,而x軸按1/2比逐次縮小化取值,總共連成8個轉折點,由於第一第二個轉折點的斜率相等,因此只需考慮7個點。

(2)由於有正負之分,所以在負端也會有7個點。也就是正負端應有14個點。

(3)由於正方的一二段和負端的一二段斜率一樣,因而正負端的兩個點可只考慮一個點的斜率,因而只需考慮13點。這就是13點折線的來歷。

 


免責聲明!

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



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