未經本人同意 請務轉載 David QQ:435398366
0、前言
最近智能音響、AI藍牙耳機、語音助手、翻譯機器很火呀,為了跟上時代的步伐,我最近也開始語音相關的開發工作。
1、PCM
PCM(Pulse Code Modulation),脈沖編碼調制。
PCM是把聲音從模擬信號轉化為數字信號的技術,把一個時間連續取值連續的模擬信號變換成時間離散取值離散的數字信號,模擬信號轉化為數字信號需要三個步驟:采樣、量化、編碼。
1.1、采樣
采樣用一個固定的頻率對模擬信號進行提取樣值。
常用采樣率為8KHz,16kHz,22.05kHz,32kHz,44.1kHz,48kHz,192kHz。
人耳能夠感覺到的最高頻率為20kHz,要滿足人耳的聽覺要求,根據奈奎斯特采樣定律則,需要每秒進行40k次采樣,即40kHz。
8Khz的采樣率就可以達到人的對話程度,通常電話的采樣率為8kHz/16kHz。
常見的無線電廣播采樣率為22.05KHz,CD采樣率為44.1kHz,DVD采樣率為48kHz,Hi-Res音頻采樣率為192kHz
1.2、量化編碼
量化編碼就是把采樣得到的聲音信號幅度轉換成數字值。這個過程會產生失真,量化的精度越高失真越小。常見的量化位數為8bit,16bit,24bit。
PCM約定俗成為無損編碼,因為PCM代表了數字音頻中最佳的保真水准,並不意味着PCM就能夠確保信號絕對保真,PCM也只能做到最大程度的無限接近。
2、DPCM
DPCM(Differential Pulse Code Modulation),差分脈沖編碼調
PCM是不壓縮的,通常數據量比較大,存儲和通訊都必需付出比較大的代價,早期的通訊是不能傳輸那么大的數據量的,所以就要想辦法把數據壓縮一下,以減少帶寬和存儲的壓力。
假設我們以8kHz的采樣率,16bit量化編碼,則1秒的數據量為8000 * 16 = 128000 bit 。一般音頻信息都是比較連續的,不會突然很高或者突然很低,兩點之間差值不會太大,所以這個差值只需要很少的幾個位(比如4bit)即可表示。這樣,我們只需要知道前一個點的值,又知道它與下一個點的差值,就可以計算得到下一個點了。這個差值就是所謂的Differential ,將PCM數據轉成DPCM數據,數據里會小很多,如上面所說的用4bit的表示差值,則1秒的(8kHz采樣率16bit量化編碼)PCM數據轉成DPCM則只需要大約32000bit , 壓縮比大約4:1。
3、ADPCM
ADPCM(Adaptive Differential Pulse Code Modulation)、自適應差分脈沖編碼調
音頻信號雖然是比較連續性的,有些差值比較小,有些差值比較大,如果差值比較大有可能用4bit表示不了,如果增大表示差值的位數(例如8bit\16bit)是可以解決這個問題,但就導致數據量變大,沒起到壓縮的目的,而且這種差值比較大的只是少數,大部分還是差值比較小的。
為了解決這個問題,前輩們就想出了ADPCM,定義一個因子,用差值除以因子的值來表示兩點之差,如果兩點之間差值比較大,則因子也比較大。通過因子引入,可以使得DPCM編碼自動適應差值比較大的數據。
ADPCM算法並沒用固定標准,最經典的就是IMA ADPCM
4、G.726
G.726是ITU-T定義的音頻編碼算法。1990年 CCITT(ITU前身)在G.721和G.723標准的基礎上提出。G.726算法實質就是一個ADPCM。
5、參考
https://blog.csdn.net/evanwu_85/article/details/5722041
http://www.21ic.com/evm/audio/201709/737472.htm
https://blog.csdn.net/llljjlj/article/details/80282910
https://blog.csdn.net/xxxluozhen/article/details/5262852
https://blog.csdn.net/chinadragon76/article/details/22917003
https://blog.csdn.net/ghj1976/article/details/3222
https://blog.csdn.net/huang20083200056/article/details/78508479
https://blog.csdn.net/wzz4420381/article/details/48812729
未經本人同意 請務轉載 David QQ:435398366