概述
PCM 脈衝編碼調製是Pulse Code Modulation的縮寫。脈衝編碼調製是數字通信的編碼方式之一。主要過程是將話音、圖像等模擬信號每隔一定時間進行取樣,使其離散化,同時將抽樣值按分層單位四捨五入取整量化,同時將抽樣值按一組二進制碼來表示抽樣脈衝的幅值。
語音編碼原理
有一定電子基礎的都知道傳感器採集音頻信號是模擬量,而我們實際傳輸過程中使用的是數字量。而這就涉及到模擬轉數字的過程。而模擬信號數字化必須經過三個過程,即抽樣、量化和編碼,以實現話音數字化的脈衝編碼調製(PCM,Pulse Coding Modulation)技術。
模擬信號轉換成數字信號
抽樣(Sampling)
抽樣是把模擬信號以其信號帶寬2倍以上的頻率提取樣值,變爲在時間軸上離散的抽樣信號的過程。
採樣率 (sample):每秒從連續信號中提取並組成離散信號的採樣個數,用赫茲(Hz)來表示.
舉例:
如音頻信號採樣率爲8000hz。
可以理解上圖採樣對應圖中 那段電壓隨時間變化的曲線 爲1秒 那下面那個1 2 3 …10那就因該有1-8000個點,即將1秒均分爲8000份,依次取出來那8000個點時間 對應的電壓值。
量化(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 。
編碼(Coding)
量化後的抽樣信號就轉化爲按抽樣時序排列的一串十進制數字碼流,即十進制數字信號。簡單高效的數據系統是二進制碼系統,因此,應將十進制數字代碼變換成二進制編碼,根據十進制數字代碼的總個數,可以確定所需二進制編碼的位數,即字長(採樣位數)這種把量化的抽樣信號變換成給定字長的二進制碼流的 過程稱爲編碼。
舉例
接着上面的1.65V 對應 量化等級爲128 。對應的2進製爲10000000 。即該採樣點編碼後結果爲10000000 。當然這是沒有考慮正負值情況下的編碼方式,而且編碼方式種類非常多,需要具體問題具體分析。(PCM音頻格式編碼爲A律13折線編碼)
PCM 音頻編碼
PCM信號未經過任何編碼和壓縮處理(無損壓縮)。與模擬信號比,它不易受傳送系統的雜波及失真的影響。動態範圍寬,可得到音質相當好的效果。編碼上採用A律13折線編碼。
A律13折線
A律是PCM非均勻量化中的一種對數壓擴形式。數字脈衝編碼調製(PCM)是目前模擬信號數字化的基本方法,PCM包括採樣、量化、編碼三個步驟,其中量化是對抽樣值的取值離散,根據量化間隔的不同選取分爲均勻量化和非均勻量化,非均勻量化可以有效地改善信號的量化信噪比。語音信號的量化常採用ITU建議的兩種對數形式的非均勻量化壓縮特性:A律和μ律,A律編碼主要用於30/32路一次羣系統, A律PCM用於歐洲和中國。
具體可以看文章
聲道
聲道可以分爲單聲道和立體聲(雙聲道)
PCM的每個樣本值包含在一個整數i中,i的長度爲容納指定樣本長度所需的最小字節數。
首先存儲低有效字節,表示樣本幅度的位放在i的高有效位上,剩下的位置爲0,這樣8位和16位的PCM波形樣本的數據格式如下所示。
採樣頻率
人對頻率的識別範圍是 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字節。
採樣位數
每個採樣數據記錄的是振幅, 採樣精度取決於儲存空間(採樣位數)的大小:
- 1 字節(也就是8bit) 只能記錄 256 個數, 也就是隻能將振幅劃分成 256 個等級
- 2 字節(也就是16bit) 可以細到 65536 個數, 這已是 CD 標準了;
- 4 字節(也就是32bit) 能把振幅細分到 4294967296 個等級, 實在是沒必要了
如果是雙聲道(stereo), 採樣就是雙份的, 文件也差不多要大一倍.
比特率
碼率是指經過編碼後的音頻數據每秒鐘需要用多少個比特來表示.
有損和無損
對於我們最常說的“無損音頻”來說,一般都是指傳統CD格式中的16bit/44.1kHz採樣率的文件格式,而知所以稱爲無損壓縮,也是因爲其包含了20Hz-22.05kHz這個完全覆蓋人耳可聞範圍的頻響頻率而得名。
這裏我有個混淆的地方是 聲道和採樣頻率之間的關係?剛開始假設採樣頻率是44100,要是使用雙聲道的話,那麼每個聲道的採樣率就是22100了。其實這是錯誤的,採樣頻率是在每個聲道上的採樣速率,不是在所有頻道的採樣速率。
因此,要是採樣速率是44100 ,那麼雙聲道,採集的樣本個數應該是88200個。
作者:充滿活力的早晨
鏈接:https://www.jianshu.com/p/cfb3d4dc3676
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
正常人聽覺的頻率範圍大約在20Hz~20kHz之間。
採樣頻率是指將模擬聲音波形進行數字化時,每秒鐘抽取聲波幅度樣本的次數。
根據奈奎斯特採樣理論,爲了保證聲音不失真,採樣頻率應該在40kHz左右。
常用的音頻採樣頻率有8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz等,
如果採用更高的採樣頻率,還可以達到DVD的音質。
對採樣率爲44.1kHz的AAC音頻進行解碼時,一幀的解碼時間須控制在23.22毫秒內。
通常是按1024個採樣點一幀
分析:
1. AAC
一個AAC原始幀包含某段時間內1024個採樣點相關數據。
用1024主要是因爲AAC是用的1024點的mdct。
音頻幀的播放時間 = 一個AAC幀對應的採樣樣本的個數 / 採樣頻率(單位爲s)。
採樣率(samplerate)爲 44100Hz,表示每秒 44100個採樣點,
所以,根據公式,
音頻幀的播放時長 = 一個AAC幀對應的採樣點個數 / 採樣頻率
則,當前一幀的播放時間 = 1024 * 1000000/44100= 22.32ms(單位爲ms)
PS:公式改成1024/44100=0.02321s=23.21ms更容易理解
48kHz採樣率,
則,當前一幀的播放時間 = 1024 * 1000000/48000= 21.32ms(單位爲ms)
22.05kHz採樣率,
則,當前一幀的播放時間 = 1024 * 1000000/22050= 46.43ms(單位爲ms)
2.MP3
mp3 每幀均爲1152個字節,
則:
每幀播放時長 = 1152 * 1000000 / sample_rate
例如:sample_rate = 44100HZ時,
計算出的時長爲26.122ms,
這就是經常聽到的mp3每幀播放時間固定爲26ms的由來。