概述
PCM 脈沖編碼調制是Pulse Code Modulation的縮寫。脈沖編碼調制是數(shù)字通信的編碼方式之一。主要過程是將話音、圖像等模擬信號每隔一定時間進行取樣,使其離散化,同時將抽樣值按分層單位四舍五入取整量化,同時將抽樣值按一組二進制碼來表示抽樣脈沖的幅值。
語音編碼原理
有一定電子基礎的都知道傳感器采集音頻信號是模擬量,而我們實際傳輸過程中使用的是數(shù)字量。而這就涉及到模擬轉數(shù)字的過程。而模擬信號數(shù)字化必須經過三個過程,即抽樣、量化和編碼,以實現(xiàn)話音數(shù)字化的脈沖編碼調制(PCM,Pulse Coding Modulation)技術。
抽樣(Sampling)
抽樣是把模擬信號以其信號帶寬2倍以上的頻率提取樣值,變?yōu)樵跁r間軸上離散的抽樣信號的過程。
采樣率 (sample):每秒從連續(xù)信號中提取并組成離散信號的采樣個數(shù),用赫茲(Hz)來表示.
舉例:
如音頻信號采樣率為8000hz。
可以理解上圖采樣對應圖中 那段電壓隨時間變化的曲線 為1秒 那下面那個1 2 3 …10那就因該有1-8000個點,即將1秒均分為8000份,依次取出來那8000個點時間 對應的電壓值。
量化(quantizing)
抽樣信號雖然是時間軸上離散的信號,但仍然是模擬信號,其樣值在一定的取值范圍內,可有無限多個值。顯然,對無限個樣值一一給出數(shù)字碼組來對應是不可能的。為了實現(xiàn)以數(shù)字碼表示樣值,必須采用“四舍五入”的方法把樣值分級“取整”,使一定取值范圍內的樣值由無限多個值變?yōu)橛邢迋€值。這一過程稱為量化。
量化后的抽樣信號與量化前的抽樣信號相比較,當然有所失真,且不再是模擬信號。這種量化失真在接收端還原模擬信號時表現(xiàn)為噪聲,并稱為量化噪聲。量化噪聲的大小取決于把樣值分級“取整”的方式,分的級數(shù)越多,即量化級差或間隔越小,量化噪聲也越小。
采樣位數(shù):指的是描述數(shù)字信號所使用的位數(shù)。
8位(8bit)代表2的8次方=256,16 位(16bit)則代表2的16次方=65536; 采樣位數(shù)越高,精度越高。
這里引用了采樣位數(shù)來描述模擬信號之間的最小間隔。
假設我們采樣位數(shù)是 8 ,而模擬信號的范圍是2,0,那么數(shù)字信號之間的間隔最小就是2/2^8= 2/256=1/128;
同理采樣位數(shù)是16,那么 數(shù)字信號之間的最小間隔就是2/256/256=1/(128*256)
舉例
如音頻傳感器采集到的電壓范圍為0-3.3V,采樣位數(shù)為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 。
編碼(Coding)
量化后的抽樣信號就轉化為按抽樣時序排列的一串十進制數(shù)字碼流,即十進制數(shù)字信號。簡單高效的數(shù)據(jù)系統(tǒng)是二進制碼系統(tǒng),因此,應將十進制數(shù)字代碼變換成二進制編碼,根據(jù)十進制數(shù)字代碼的總個數(shù),可以確定所需二進制編碼的位數(shù),即字長(采樣位數(shù))這種把量化的抽樣信號變換成給定字長的二進制碼流的 過程稱為編碼。
舉例
接著上面的1.65V 對應 量化等級為128 。對應的2進制為10000000 。即該采樣點編碼后結果為10000000 。當然這是沒有考慮正負值情況下的編碼方式,而且編碼方式種類非常多,需要具體問題具體分析。(PCM音頻格式編碼為A律13折線編碼)
PCM 音頻編碼
PCM信號未經過任何編碼和壓縮處理(無損壓縮)。與模擬信號比,它不易受傳送系統(tǒng)的雜波及失真的影響。動態(tài)范圍寬,可得到音質相當好的效果。編碼上采用A律13折線編碼。
A律13折線
A律是PCM非均勻量化中的一種對數(shù)壓擴形式。數(shù)字脈沖編碼調制(PCM)是目前模擬信號數(shù)字化的基本方法,PCM包括采樣、量化、編碼三個步驟,其中量化是對抽樣值的取值離散,根據(jù)量化間隔的不同選取分為均勻量化和非均勻量化,非均勻量化可以有效地改善信號的量化信噪比。語音信號的量化常采用ITU建議的兩種對數(shù)形式的非均勻量化壓縮特性:A律和μ律,A律編碼主要用于30/32路一次群系統(tǒng), A律PCM用于歐洲和中國。
具體可以看文章
聲道
聲道可以分為單聲道和立體聲(雙聲道)
PCM的每個樣本值包含在一個整數(shù)i中,i的長度為容納指定樣本長度所需的最小字節(jié)數(shù)。
采樣頻率
人對頻率的識別范圍是 20HZ - 20000HZ, 如果每秒鐘能對聲音做 20000 個采樣, 回放時就足可以滿足人耳的需求.
- 8000hz 為電話采樣。
- 22050 的采樣頻率是常用的。
- 44100已是CD音質, 超過48000的采樣對人耳已經沒有意義
對采樣率為44.1kHz的AAC(Advanced Audio Coding)音頻進行解碼時,一幀的解碼時間須控制在23.22毫秒內。通常是按1024個采樣點一幀。
為什么這里需要說下音頻幀呢?
音頻的幀的概念沒有視頻幀那么清晰,幾乎所有視頻編碼格式都可以簡單的認為一幀就是編碼后的一副圖像。但音頻幀跟編碼格式相關,它是各個編碼標準自己實現(xiàn)的。因為如果以PCM(未經編碼的音頻數(shù)據(jù))來說,它根本就不需要幀的概念,根據(jù)采樣率和采樣精度就可以播放了。比如采樣率為44.1kHZ,采樣精度為16位的音頻,你可以算出bitrate(比特率)是4410016kbps,每秒的音頻數(shù)據(jù)是固定的4410016/8 字節(jié)。
但是我們不希望每一次采樣都返回給我們進行處理,我們希望的是返回一段時間內的所有采樣數(shù)據(jù)。這里的音頻幀就是每次返回給我們多少個采樣數(shù)據(jù),一般情況是下返回2048個采樣數(shù)據(jù)。
那么單聲道 采用16位采樣位數(shù) 2048個采樣數(shù)據(jù)的大小是多少呢 2048*16/8 = 4096字節(jié)。
采樣位數(shù)
每個采樣數(shù)據(jù)記錄的是振幅, 采樣精度取決于儲存空間(采樣位數(shù))的大小:
- 1 字節(jié)(也就是8bit) 只能記錄 256 個數(shù), 也就是只能將振幅劃分成 256 個等級
- 2 字節(jié)(也就是16bit) 可以細到 65536 個數(shù), 這已是 CD 標準了;
- 4 字節(jié)(也就是32bit) 能把振幅細分到 4294967296 個等級, 實在是沒必要了
如果是雙聲道(stereo), 采樣就是雙份的, 文件也差不多要大一倍.
比特率
碼率是指經過編碼后的音頻數(shù)據(jù)每秒鐘需要用多少個比特來表示.
有損和無損
對于我們最常說的“無損音頻”來說,一般都是指傳統(tǒng)CD格式中的16bit/44.1kHz采樣率的文件格式,而知所以稱為無損壓縮,也是因為其包含了20Hz-22.05kHz這個完全覆蓋人耳可聞范圍的頻響頻率而得名。
這里我有個混淆的地方是 聲道和采樣頻率之間的關系?剛開始假設采樣頻率是44100,要是使用雙聲道的話,那么每個聲道的采樣率就是22100了。其實這是錯誤的,采樣頻率是在每個聲道上的采樣速率,不是在所有頻道的采樣速率。
因此,要是采樣速率是44100 ,那么雙聲道,采集的樣本個數(shù)應該是88200個。