基于CM70C01的語音壓縮編碼
2004年6月A版
摘 要:CM70C01是處理多種語音壓縮格式的混合信號處理芯片,由于編碼和解碼部分的標準不統一,使得部分語音壓縮文件與CM70C01不兼容。本文在深入了解CM70C01解碼和語音合成的基礎上,就LPC-10提出符合CM70C01的語音壓縮編碼方法。
關鍵詞:能量;音調;反射系數;語音壓縮
引言
CM70C01是中科微電子公司生產的混合信號處理芯片,集成8位MCU和語音合成電路,具有編程方便,能處理LPC-10、CELP、PCM、MELP等多種語音壓縮格式的能力和較優的性價比,可以應用在各種語音處理場合。但由于LPC-10、CELP和MELP等語音格式在編碼和解碼部分有多種不同的標準,而且這些標準之間并不兼容,因此用戶自行編制的語音數據并不一定能被CM70C01識別或處理。在熟知語音壓縮基本算法而又缺少語音開發板和相應軟件的情況下,就可以用純軟件的方法來實現基于CM70C01的語音壓縮編碼。本文以LPC-10為例子,說明特征參數的提取、編碼的幀結構以及CM70C01的解碼和編碼的實現。
特征參數的提取
語音具有樣點間的短時相關性和相鄰基因周期間的長時相關性,可以用一個全極點模型來描述一小段語音的生成模型。在利用線性預測方法對語音進行上述兩種相關性的去相關處理后,能夠得到預測的余量信號。根據余量信號和全極點模型的預測系數,就可以合成語音。這就是線性預測編碼。
線性預測編碼(LPC-10)是將線性預測理論運用到語音編碼領域的一個典型例子。在預測編碼過程中,以幀為單位來分析和提取語音信號的相關特征參數,這些特征參數有包括:全極點模型的預測參數{ai}、能量增益(Energy)、音調(Pitch)、濁/清音標志(V/UV)。由特征參數來表述語音信號既可減小存儲空間,又可以低速率來進行傳輸。在接收端,根據幀的特征參數決定激勵源、基音塊和幀塊間的插值,最后通過格型濾波器來合成語音。
由于預測參數不適于直接量化,因為它的微小變化會造成極點位置很大的變化,所以一般采用在數學上與之完全等價的反射系數K1~K10代替預測參數進行量化編碼。反射系數的穩定條件是|Ki|<1,這在量化時是容易保證的??梢杂肅holeski UV分解法對LPC正則方程的系數矩陣求逆,得出反射系數。這種算法能夠比較準確的計算出共振峰的寬度,但由于篇幅關系,在這里不詳細敘述。
能量(語音波形的振幅)一般用如下公式計算:
式中Si為采樣取得的數字語音(一般還需經過預加重處理,加強音譜中的高頻共振峰),M為一幀的采樣點數。
音調即基音周期,用平均幅度差函數AMDF計算。數字語音經過一個四階Butterworth低通濾波器后再經過二階逆濾波,然后計算延遲時間為個樣點的AMDF,由AMDF的最小值確定周期。
t的取值可為20~156。假設數字語音的采樣頻率為8KHz,t為60時AMDF最小,則
濁/清音的標志是根據AMDF最大值與最小值之比和過零率,用動態規劃算法,在三幀范圍內進行平滑和錯誤糾正而得出的。該標志有穩定的清音、清音向濁音轉換、濁音向清音轉換和穩定的濁音這四種狀態。
編碼的幀結構
在LPC-10傳輸數據流中,以幀為單位對特征系數進行編碼。一般LPC-10數據按幀類型可劃分為濁音幀和清音幀,其比特分配如表1。
基因周期和濁/清音標志用7比特表示,能量用5比特表示。濁音幀有10個反射系數,而清音幀只有4個反射系數,但比濁音多用20比特作為誤差糾正。另外,每一幀數據當中還包含有1比特同步信號。
而在CM70C01默認的語音編碼格式中,除了濁音幀和清音幀,還細分出重復幀、靜音幀和停止幀。顧名思義,這三種類型的幀分別表示重復上一幀的反射系數、靜音和停止合成語音。它的比特分配表如表2。
能量用4比特表示:全0時為靜音幀,沒有音調和反射系數;全1時為停止幀,相當于結束標志,只會出現在語音數據末尾。重復標志(Repeat)為1時,該幀為重復幀,表示它的反射系數與上一幀的相同。音調用7比特表示,全0時表示該幀為清音幀。所有的幀都沒有誤差糾正和同步信號。
CM70C01的解碼和編碼
在對比幀結構的不同之后,再進一步了解特征參數在CM70C01解碼、合成語音過程中的作用。CM70C01取得一幀的數據后,按下列步驟進行處理
各參數根據自身的解碼表進行解碼,而根據解碼表可以近似的推算出編碼表。一般語音信號量化采用的是非均勻量化,采用最佳非均勻量化時,最佳分層電平應取兩個相鄰量化電平的中點。
xk為分層電平,即量化區間的上限值;yk為量化電平;L為量化電平數。落在區間jk={xk<x≤xk+1}的值x量化后用yk表示。量化電平與解碼表是一一對應的,如果解碼表碼子對應的解碼值就是量化電平,那么在已知量化電平的條件下,就可以推算出各個量化區間的分層電平,從而得出量化編碼表。
解碼后的參數都為十六進制數,并且要與下一幀的參數進行插補。音調的插補公式:
P=(Pcurrent-Pnew)Timer+Pnew
Pcurrent為上一幀的周期值,Pnew為當前幀的周期值,Timer為定時器的值。其他參數的插補方法同上。特征參數在插補后,能量和反射系數直接送到CM70C01選通聲道相應的參數寄存器,而音調在乘以二后送入音調寄存器。
在語音合成中,濁/清音標志決定了采用的激勵信號。如果是清音,則以隨機數(白噪聲)為激勵源;如果是濁音,則用一周期性沖激信號通過全通濾波器來產生激勵源。能量決定了合成語音的增益,也就是音量大小。反射系數直接確定了格型濾波器的參數。決定音調的除了音調寄存器(Pitch Register,PR)還有音調周期計數器(Pitch Period Counter,PPC)。
假設合成器的取樣頻率是8K,在音調寄存器PR用TASYN指令加載后,每次取樣音調周期計數器PPC減20h,當PPC小于0時,用音調寄存器PR中的值重新裝入PPC。當PPC中的值減到小于200h或加載值小于200h時,微處理器可以做到,并決定何時執行插補。當音調周期計數器PPC減到140h~000h之間時,激勵函數加到LPC濾波器的輸入端。如果解碼后音調的值為7C0h,PR的值則為F80h,實際周期和頻率
當音調為133.33Hz即t為60(十進制數,十六進制時為3Ch)時,對應的解碼值為,對應的量化碼子可查詢解碼表得到。
根據上述參數的作用可知,能量和反射系數在解碼后直接用于語音合成,所以可根據解碼表直接推算出量化編碼表;而基因周期經過一些簡單的計算也能由解碼表算出量化編碼表。經過提取特征參數,推算量化編碼表等一系列準備工作后,現在可以按照CM70C01幀的結構對特征參數進行量化編碼。其步驟如下:
對于本文的例子LPC-10來說,在編碼后有時還需要用戶根據經驗修改反射系數,那么只需在量化編碼過程中加入一個表格窗口,用于顯示和修改量化編碼數據,就能完全替代語音開發板及其軟件獨立進行語音壓縮編碼。對于CELP、MELP這些語音壓縮格式,不需要提供表格窗口來修改編碼數據。
結語
綜上所述,用純軟件的方法來實現基于CM70C01的LPC-10編碼是可行的。對于那些缺少相應語音開發板和相關軟件支持而又希望使用CM70C01的用戶來說,本文提供的方法能夠較好的解決語音壓縮編碼的問題。如果要使用CM70C01支持的其他幾種語音壓縮格式,如CELP、MELP等,由于其編碼的原理與LPC-10類似,根據本文所提供的解決方法,可以實現基于CM70C01的語音壓縮編碼。■
參考文獻:
1. 楊行峻、遲惠生等,‘語音信號數字處理’,第二版,電子工業出版社,1998
2. L.R.拉賓那、R.W.謝弗 ,‘語音數字信號處理’,科學出版社,1982
3. 彭崇梅、李全圣,‘對線性預測語音解壓縮方法的探討’,電子產品世界,2001年4B期
評論