在眾多的語(yǔ)音編譯碼調(diào)制中,連續(xù)可變斜率增量調(diào)制(CVSD)作為許多增量調(diào)制中的一種,只需編一位碼,在發(fā)送端與接收端之間不需要碼型同步,量階△的大小能自動(dòng)地跟蹤信號(hào)變化,因而具有強(qiáng)抗誤碼能力,在10-3時(shí)仍可保持高質(zhì)量的話音。目前市場(chǎng)上有CVSD的專用芯片,但專用芯片的通用性、靈活性和可擴(kuò)展性受到了很大的限制,并且產(chǎn)品的開(kāi)發(fā)周期長(zhǎng),開(kāi)發(fā)成本也較高。專用CVSD芯片只能實(shí)現(xiàn)一路編譯碼,在需要多路CVSD編譯碼時(shí)則需要很多專用芯片,具有局限性;而單片FPGA容易實(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)中增加一些其他相關(guān)的應(yīng)用功能,因此在FPGA中實(shí)現(xiàn)CVSD語(yǔ)音編譯碼調(diào)制功能的前景將是非常廣闊的。 這里將詳細(xì)介紹基于FPGA的CVSD語(yǔ)音編譯碼的設(shè)計(jì)思路、具體實(shí)現(xiàn)以及和專用芯片CMX639之間的互相通信。 1 CVSD工作原埋 CVSD是一種量階△隨著輸入語(yǔ)音信號(hào)平均斜率(斜率絕對(duì)值的平均值)大小而連續(xù)變化的增量調(diào)制方式。它的工作原理如下:用多個(gè)連續(xù)可變斜率的折線來(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ù)字輸入為“O”,則積分器的輸出下降一個(gè)量階△,這相當(dāng)于編碼過(guò)程的逆過(guò)程。積分器的輸出g(n)通過(guò)低通濾波器平滑濾波后將重現(xiàn)輸入語(yǔ)音信號(hào)xout(t)。可見(jiàn)輸入信號(hào)的波形上升越快,輸出的連“1”碼就越多,同樣下降越快,輸出的連“O”碼越多,CVSD編譯碼能夠很好地反映輸入信號(hào)的斜率大小,有效地避免了斜率過(guò)載失真和顆粒失真。為使積分器的輸出能夠更好地逼近輸入語(yǔ)音信號(hào),量階△隨著輸入信號(hào)斜率大小而變化,當(dāng)信號(hào)斜率絕對(duì)值很大,編碼出現(xiàn)3個(gè)或4個(gè)連“l(fā)”或連“O”碼時(shí),則量階△加一個(gè)增量△0;當(dāng)不出現(xiàn)上述碼型時(shí),量階△則相應(yīng)地減少。 2 CVSD的軟件算法 2.1 CVSD的編碼算法 圖3是CVSD編碼算法框圖,其量階△調(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)=O)得到輸出的數(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向“O”值方向衰減,量階△減小。最小和最大階距是由△MIN和△MAX分別確定的。當(dāng)長(zhǎng)時(shí)間沒(méi)有出現(xiàn)連碼,CVSD編碼器退化為一個(gè)線性增量調(diào)制(LDM)編碼器。 2.2 CVSD的譯碼算法 圖4是CVSD譯碼算法框圖,其量階調(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)實(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è)試分析。 3.3 CVSD算法的仿真 以正弦單音輸入信號(hào)為例,利用信號(hào)源產(chǎn)生信號(hào)幅度O.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來(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)用前景。 |