向澤永 高 勇
摘 要:通過(guò)分析連續(xù)可變斜率增量調(diào)制(CVSD)的語(yǔ)音編譯碼工作原理,對(duì)CVSD的軟件算法進(jìn)行了詳細(xì)地剖析。通過(guò)合理選取各參數(shù)的值,在FPGA中對(duì)CVSD算法進(jìn)行了仿真和實(shí)現(xiàn)。在此基礎(chǔ)上,提出了FPGA硬件平臺(tái)實(shí)現(xiàn)方案,在硬件平臺(tái)上對(duì)CVSD編譯碼算法進(jìn)行了驗(yàn)證,同時(shí)和專用CVSD編譯碼芯片CMX639實(shí)現(xiàn)了互相通信。測(cè)試結(jié)果表明算法可行,設(shè)計(jì)正確,達(dá)到了良好的效果。
關(guān)鍵詞:語(yǔ)音編譯碼;CVSD;FPGA;CMX639
中圖分類(lèi)號(hào):TN919文獻(xiàn)標(biāo)識(shí)碼:B
文章編號(hào):1004-373X(2009)03-151-03
Analysis of CVSD Algorithm and Its Realization in FPGA
XIANG Zeyong,GAO Yong
(College of Electronics and Information Engineering,Sichuan University,Chengdu,610065,China)
Abstract:Through analyzing the speech code-decode principle of the Continuously Variable Slope Delta modulation(CVSD),the CVSD algorithm is discussed in detail.Due to the preferable parameter of the algorithm,its simulation and implement are designed in FPGA.A practical solution based on hardware platform of FPGA is presented,on which the algorithm of CVSD is verified and the intercommunication is realizied between FPGA and CMX639.The results show that the algorithm in FPGA is attractive and the design is successful.
Keywords:speech code-decode;CVSD;FPGA;CMX639
0 引 言
在眾多的語(yǔ)音編譯碼調(diào)制中,連續(xù)可變斜率增量調(diào)制(CVSD)作為許多增量調(diào)制中的一種,只需編一位碼,在發(fā)送端與接收端之間不需要碼型同步,量階Δ的大小能自動(dòng)地跟蹤信號(hào)變化,因而具有強(qiáng)抗誤碼能力,在10-3時(shí)仍可保持高質(zhì)量的話音[1]。目前市場(chǎng)上有CVSD的專用芯片,但專用芯片的通用性、靈活性和可擴(kuò)展性受到了很大的限制,并且產(chǎn)品的開(kāi)發(fā)周期長(zhǎng),開(kāi)發(fā)成本也較高。專用CVSD芯片只能實(shí)現(xiàn)一路編譯碼,在需要多路CVSD編譯碼時(shí)則需要很多專用芯片,具有局限性;而單片F(xiàn)PGA容易實(shí)現(xiàn)多路CVSD編譯碼功能。此外如果專用芯片停產(chǎn)或者買(mǎi)不到,已有的通信設(shè)備維修將會(huì)因器件缺乏導(dǎo)致后續(xù)工作無(wú)法開(kāi)展。為了彌補(bǔ)專用CVSD芯片的不足,同時(shí)也方便在現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)[2]中增加一些其他相關(guān)的應(yīng)用功能,因此在FPGA中實(shí)現(xiàn)CVSD語(yǔ)音編譯碼調(diào)制功能的前景將是非常廣闊的。
這里將詳細(xì)介紹基于FPGA的CVSD語(yǔ)音編譯碼的設(shè)計(jì)思路、具體實(shí)現(xiàn)以及和專用芯片CMX639[3]之間的互相通信。
1 CVSD工作原理
CVSD是一種量階Δ隨著輸入語(yǔ)音信號(hào)平均斜率(斜率絕對(duì)值的平均值)大小而連續(xù)變化的增量調(diào)制方式[1]。它的工作原理如下:用多個(gè)連續(xù)可變斜率的折線[1]來(lái)逼近語(yǔ)音信號(hào),當(dāng)折線斜率為正時(shí),對(duì)應(yīng)的數(shù)字編碼為“1”;當(dāng)折線斜率為負(fù)時(shí),對(duì)應(yīng)的數(shù)字編碼為“0”。
當(dāng)CVSD工作于編碼方式時(shí),其系統(tǒng)框圖如圖1所示。語(yǔ)音信號(hào)xin(t)經(jīng)采樣得到數(shù)字信號(hào)x(n),數(shù)字信號(hào)x(n)與積分器輸出信號(hào)g(n)比較后輸出誤差信號(hào)d(n),誤差信號(hào)d(n)經(jīng)判決后輸出數(shù)字編碼c(n),同時(shí)該信號(hào)作為積分器輸出斜率的極性控制信號(hào)和積分器輸出斜率大小邏輯的輸入信號(hào)。在每個(gè)時(shí)鐘周期內(nèi),若語(yǔ)音信號(hào)大于積分器輸出信號(hào),則判決輸出為“1”,積分器輸出上升一個(gè)量階Δ;若語(yǔ)音信號(hào)小于積分器輸出信號(hào),則判決輸出為“0”,積分器輸出下降一個(gè)量階Δ。
當(dāng)CVSD工作于譯碼方式時(shí),其系統(tǒng)框圖如圖2所示。在每個(gè)時(shí)鐘周期內(nèi),數(shù)字編碼c(n)被送到連碼檢測(cè)器,然后送到平滑電路以控制積分器輸出斜率的大小。若數(shù)字編碼c(n)輸入為“1”,則積分器的輸出上升一個(gè)量階Δ,若數(shù)字輸入為“0”,則積分器的輸出下降一個(gè)量階Δ,這相當(dāng)于編碼過(guò)程的逆過(guò)程。積分器的輸出g(n)通過(guò)低通濾波器平滑濾波后將重現(xiàn)輸入語(yǔ)音信號(hào)xout(t)。
可見(jiàn)輸入信號(hào)的波形上升越快,輸出的連“1”碼就越多,同樣下降越快,輸出的連“0”碼越多,CVSD 編譯碼能夠很好地反映輸入信號(hào)的斜率大小,有效地避免了斜率過(guò)載失真和顆粒失真。為使積分器的輸出能夠更好地逼近輸入語(yǔ)音信號(hào),量階Δ隨著輸入信號(hào)斜率大小而變化,當(dāng)信號(hào)斜率絕對(duì)值很大,編碼出現(xiàn)3個(gè)或4個(gè)連“1”或連“0”碼時(shí),則量階Δ加一個(gè)增量Δ0;當(dāng)不出現(xiàn)上述碼型時(shí),量階Δ則相應(yīng)地減少。
2 CVSD的軟件算法
2.1 CVSD的編碼算法
圖3是CVSD編碼算法框圖[4],其量階Δ調(diào)整是基于前3位的連碼。x(n)是語(yǔ)音經(jīng)過(guò)采樣得到的數(shù)字信號(hào),數(shù)字信號(hào)x(n)與積分器地I1輸出的預(yù)測(cè)信號(hào)xp(n)經(jīng)過(guò)比較后輸出誤差信號(hào)d(n),誤差信號(hào)d(n)經(jīng)一階量化(d(n)≥0,c(n)=1;d(n)<0,c(n)=0)得到輸出的數(shù)字編碼c(n),該信號(hào)同時(shí)作為積分器I2的極性控制信號(hào)和控制積分器I2輸出斜率大小邏輯的輸入信號(hào)。當(dāng)輸出碼出現(xiàn)連續(xù)的“1”碼或者連續(xù)的“0”碼,則說(shuō)明信號(hào)波形的斜率較大,因此量階Δ需要適當(dāng)增加,當(dāng)輸出碼c(n)長(zhǎng)時(shí)間沒(méi)有出現(xiàn)連碼,則積分器I2向“0”值方向衰減,量階Δ減小。最小和最大階距是由ΔMIN和ΔMAX分別確定的。當(dāng)長(zhǎng)時(shí)間沒(méi)有出現(xiàn)連碼,CVSD編碼器退化為一個(gè)線性增量調(diào)制(LDM)編碼器。
2.2 CVSD的譯碼算法
圖4是CVSD譯碼算法框圖[4],其量階調(diào)整是基于前3位的連碼。譯碼過(guò)程就是編碼的逆過(guò)程,只是在積分器I1后面增加了一個(gè)低通濾波器,用于抑制帶外干擾。
3 CVSD算法在FPGA中的實(shí)現(xiàn)
3.1 硬件實(shí)現(xiàn)框圖
考慮到實(shí)際需求,采用了通用性較強(qiáng)的A/D,D/A元器件和FPGA器件。該硬件可以同時(shí)實(shí)現(xiàn)3路CVSD編譯碼算法,一路采用FPGA(XC3S1500)[5]實(shí)現(xiàn),兩路采用專用芯片實(shí)現(xiàn);同時(shí)編譯碼之間可以通過(guò)FPGA內(nèi)部邏輯控制互相通信。在FPGA內(nèi)設(shè)計(jì)實(shí)現(xiàn)了CVSD編譯碼算法,在該器件內(nèi)融合多種控制功能,可以在線編程、方便調(diào)試。
音頻信號(hào)在進(jìn)行A/D采樣之前,為了防止帶外信號(hào)進(jìn)入,首先進(jìn)行低通濾波;再通過(guò)高倍時(shí)鐘進(jìn)行采樣得到數(shù)字信號(hào)進(jìn)入FPGA進(jìn)行編譯碼處理。譯碼過(guò)后的信號(hào)通過(guò)D/A輸出模擬信號(hào),該信號(hào)再經(jīng)過(guò)低通濾波器后輸出,得到音頻信號(hào)。
3.2 CVSD算法實(shí)現(xiàn)框圖
在FPGA內(nèi)部算法實(shí)現(xiàn)上,采用了 “自頂向下”的設(shè)計(jì)方法,即根據(jù)要求的功能先設(shè)計(jì)出頂層的原理圖,該圖由若干個(gè)功能模塊組成。再把各個(gè)模塊細(xì)化為子模塊,各子模塊的功能采用電路圖實(shí)現(xiàn),也可用硬件描述語(yǔ)言實(shí)現(xiàn)。設(shè)計(jì)中頂層采用原理圖實(shí)現(xiàn),子模塊采用VHDL硬件描述語(yǔ)言實(shí)現(xiàn),利用ISE自帶的IP Core乘法器,經(jīng)過(guò)綜合和優(yōu)化等過(guò)程,最終將程序下載到芯片中,使用在線邏輯分析儀ChipScope Pro進(jìn)行邏輯和功能測(cè)試分析[6]。
3.3 CVSD算法的仿真
以正弦單音輸入信號(hào)為例,利用信號(hào)源產(chǎn)生信號(hào)幅度0.5 Vpp,頻率fin(t)=1 kHz的正弦信號(hào)作為測(cè)試信號(hào),在FPGA中利用高倍時(shí)鐘產(chǎn)生fs(t)=64 kHz的采樣時(shí)鐘。對(duì)輸入A/D的音頻信號(hào)采用專用低通濾波芯片進(jìn)行了濾波。D/A輸出的信號(hào)包含了許多不必要的高次諧波分量,因此也采用低通濾波器對(duì)其進(jìn)行了平滑濾波。
在設(shè)計(jì)上,不僅僅是采用FPGA實(shí)現(xiàn)和驗(yàn)證自己的CVSD編譯碼算法,還和專用芯片CMX639進(jìn)行互相通信進(jìn)行驗(yàn)證。CMX639是一款CVSD全雙工音頻調(diào)制芯片,集成了編碼和譯碼功能,實(shí)現(xiàn)了單芯片語(yǔ)音處理能力,外圍設(shè)備簡(jiǎn)單,用戶可以根據(jù)實(shí)際情況,自主選擇采樣速率。
圖8是通過(guò)ChipScope Pro采集的實(shí)時(shí)正弦信號(hào)。從圖中可以看出量階Δ的大小能夠很好地反映輸入信號(hào)斜率的大小,輸出端輸出信號(hào)能夠很好地重現(xiàn)輸入信號(hào),說(shuō)明CVSD編譯碼方式是有效的。
3.4 CVSD算法的實(shí)現(xiàn)
采用原理圖和VHDL語(yǔ)言相結(jié)合的方式在FPGA中實(shí)現(xiàn)了CVSD電路。具體實(shí)現(xiàn)步驟如下:
(1) 根據(jù)算法框圖設(shè)計(jì)頂層原理圖CVSD.SCH;
(2) 利用IP Core產(chǎn)生底層所需要的乘法器;
(3) 利用VHDL語(yǔ)言完成CVSD編譯碼模塊;
(4) I/O管腳定義,約束條件編寫(xiě);
(5) 設(shè)計(jì)綜合、編譯;
(6) bit文件生成、下載,通過(guò)ChipScope Pro進(jìn)行仿真測(cè)試;
(7) 根據(jù)仿真測(cè)試結(jié)果返回修改設(shè)計(jì),直到設(shè)計(jì)成功;
(8) mcs文件生成、加載,最終驗(yàn)證。
驗(yàn)證是FPGA設(shè)計(jì)中很重要的一環(huán),只有通過(guò)驗(yàn)證才能說(shuō)明設(shè)計(jì)的正確與否。采用XILINX公司的Spartan-3系列中的XC3S1500[5]來(lái)具體實(shí)現(xiàn)CVSD的編譯碼功能。通過(guò)自己設(shè)計(jì)的編譯碼算法和CMX639專用芯片的編譯碼模塊互相通信,輸入實(shí)際語(yǔ)音信號(hào)測(cè)試,能夠很好地從D/A輸出語(yǔ)音信號(hào),從CMX639譯碼輸出也能聽(tīng)到語(yǔ)音信號(hào),達(dá)到了滿意的效果。
4 結(jié) 語(yǔ)
本文提出的FPGA設(shè)計(jì)方法很好地實(shí)現(xiàn)了CVSD編譯碼功能,充分利用了FPGA的優(yōu)勢(shì),可以同時(shí)實(shí)現(xiàn)多路CVSD編譯碼功能,彌補(bǔ)了采用專用芯片實(shí)現(xiàn)CVSD編譯碼的不足,設(shè)計(jì)靈活、簡(jiǎn)單,成本低,具有很好的應(yīng)用前景。
參考文獻(xiàn)
[1]呂洪生,楊新德.實(shí)用衛(wèi)星通信工程[M].成都:電子科技大學(xué)出版社,1994.
[2]趙曙光,郭萬(wàn)有,楊頌華.可編程邏輯器件原理、開(kāi)發(fā)與應(yīng)用[M].西安:西安電子科技大學(xué)出版社,2001.
[3]CML Microcircuits.CMX639:Consumer/Commerical CVSD Digital Voice Codec[Z].2005.
[4]CML Microcircuits.Continuously Variable Slope Delta Modulation:A Tutorial[Z].1997.
[5]XILINX.Spartan-3 FPGA Family:Complete Data Sheet[Z].2004.
[6]EDA先鋒工作室.FPGA/CPLD設(shè)計(jì)工具:Xilinx ISE 5.x使用詳解[M].北京:人民郵電出版社,2003.
作者簡(jiǎn)介 向澤永 男,1976年出生,碩士研究生。研究方向?yàn)橥ㄐ爬碚撆c技術(shù)。
高 勇 男,1969年出生,博士,副教授,中國(guó)電子學(xué)會(huì)高級(jí)會(huì)員,中國(guó)通信學(xué)會(huì)高級(jí)會(huì)員,四川省電子學(xué)會(huì)電子戰(zhàn)專業(yè)委員會(huì)副主任委員,四川省聲學(xué)學(xué)會(huì)語(yǔ)音、音樂(lè)和信號(hào)處理專業(yè)委員會(huì)主任,四川省通信學(xué)會(huì)理事,已在國(guó)內(nèi)重要核心學(xué)術(shù)刊物、重要國(guó)際和國(guó)內(nèi)學(xué)術(shù)會(huì)議上發(fā)表學(xué)術(shù)論文16篇(第一作者)。申請(qǐng)中國(guó)發(fā)明專利4項(xiàng),已獲發(fā)明專利授權(quán)2項(xiàng)、實(shí)用新型授權(quán)2項(xiàng)。研究興趣為陣列信號(hào)處理、軟件無(wú)線電、通信抗干擾技術(shù)、實(shí)時(shí)信號(hào)處理、嵌入式系統(tǒng)開(kāi)發(fā)等。