CVSD算法分析及其在FPGA中的實現(xiàn)
0 引 言
在眾多的語音編譯碼調(diào)制中,連續(xù)可變斜率增量調(diào)制(CVSD)作為許多增量調(diào)制中的一種,只需編一位碼,在發(fā)送端與接收端之間不需要碼型同步,量階△的大小能自動地跟蹤信號變化,因而具有強抗誤碼能力,在10-3時仍可保持高質(zhì)量的話音。目前市場上有CVSD的專用芯片,但專用芯片的通用性、靈活性和可擴展性受到了很大的限制,并且產(chǎn)品的開發(fā)周期長,開發(fā)成本也較高。專用CVSD芯片只能實現(xiàn)一路編譯碼,在需要多路CVSD編譯碼時則需要很多專用芯片,具有局限性;而單片FPGA容易實現(xiàn)多路CVSD編譯碼功能。此外如果專用芯片停產(chǎn)或者買不到,已有的通信設(shè)備維修將會因器件缺乏導(dǎo)致后續(xù)工作無法開展。為了彌補專用CVSD芯片的不足,同時也方便在現(xiàn)場可編程門陣列(FPGA)中增加一些其他相關(guān)的應(yīng)用功能,因此在FPGA中實現(xiàn)CVSD語音編譯碼調(diào)制功能的前景將是非常廣闊的。
這里將詳細介紹基于FPGA的CVSD語音編譯碼的設(shè)計思路、具體實現(xiàn)以及和專用芯片CMX639之間的互相通信。
l CVSD工作原埋
CVSD是一種量階△隨著輸入語音信號平均斜率(斜率絕對值的平均值)大小而連續(xù)變化的增量調(diào)制方式。它的工作原理如下:用多個連續(xù)可變斜率的折線來逼近語音信號,當折線斜率為正時,對應(yīng)的數(shù)字編碼為“1”;當折線斜率為負時,對應(yīng)的數(shù)字編碼為“0”。
當CVSD工作于編碼方式時,其系統(tǒng)框圖如圖1所示。語音信號xin(t)經(jīng)采樣得到數(shù)字信號x(n),數(shù)字信號x(n)與積分器輸出信號g(n)比較后輸出誤差信號d(n),誤差信號d(n)經(jīng)判決后輸出數(shù)字編碼c(n),同時該信號作為積分器輸出斜率的極性控制信號和積分器輸出斜率大小邏輯的輸入信號。在每個時鐘周期內(nèi),若語音信號大于積分器輸出信號,則判決輸出為“1”,積分器輸出上升一個量階△;若語音信號小于積分器輸出信號,則判決輸出為“0”,積分器輸出下降一個量階△。當CVSD工作于譯碼方式時,其系統(tǒng)框圖如圖2所示。在每個時鐘周期內(nèi),數(shù)字編碼c(n)被送到連碼檢測器,然后送到平滑電路以控制積分器輸出斜率的大小。若數(shù)字編碼c(n)輸入為“1”,則積分器的輸出上升一個量階△,若數(shù)字輸入為“O”,則積分器的輸出下降一個量階△,這相當于編碼過程的逆過程。積分器的輸出g(n)通過低通濾波器平滑濾波后將重現(xiàn)輸入語音信號xout(t)??梢娸斎胄盘柕牟ㄐ紊仙娇欤敵龅倪B“1”碼就越多,同樣下降越快,輸出的連“O”碼越多,CVSD編譯碼能夠很好地反映輸入信號的斜率大小,有效地避免了斜率過載失真和顆粒失真。為使積分器的輸出能夠更好地逼近輸入語音信號,量階△隨著輸入信號斜率大小而變化,當信號斜率絕對值很大,編碼出現(xiàn)3個或4個連“l(fā)”或連“O”碼時,則量階△加一個增量△0;當不出現(xiàn)上述碼型時,量階△則相應(yīng)地減少。
2 CVSD的軟件算法
2.1 CVSD的編碼算法
圖3是CVSD編碼算法框圖,其量階△調(diào)整是基于前3位的連碼。x(n)是語音經(jīng)過采樣得到的數(shù)字信號,數(shù)字信號x(n)與積分器地I1輸出的預(yù)測信號xp(n)經(jīng)過比較后輸出誤差信號d(n),誤差信號d(n)經(jīng)一階量化(d(n)≥0,c(n)=1;d(n)0,c(n)=O)得到輸出的數(shù)字編碼c(n),該信號同時作為積分器I2的極性控制信號和控制積分器I2輸出斜率大小邏輯的輸入信號。當輸出碼出現(xiàn)連續(xù)的“1”碼或者連續(xù)的“0”碼,則說明信號波形的斜率較大,因此量階△需要適當增加,當輸出碼c(n)長時間沒有出現(xiàn)連碼,則積分器I2向“O”值方向衰減,量階△減小。最小和最大階距是由△MIN和△MAX分別確定的。當長時間沒有出現(xiàn)連碼,CVSD編碼器退化為一個線性增量調(diào)制(LDM)編碼器。
2.2 CVSD的譯碼算法
評論