基于FPGA的32 Kbit/s CVSD語(yǔ)音編解碼器的實(shí)現(xiàn)
64 Kbit/s的A律或μ律的對(duì)數(shù)壓擴(kuò)PCM編碼在大容量的光纖通信系統(tǒng)和數(shù)字微波系統(tǒng)中已得到廣泛應(yīng)用,但由于占用較大的傳輸帶寬和具有復(fù)雜的成幀結(jié)構(gòu),PCM編碼不適合無(wú)線語(yǔ)音系統(tǒng)的應(yīng)用。連續(xù)可變斜率增量(Continuously Variable Slope Delta,CVSD)調(diào)制以其較低的應(yīng)用難度、成本和編碼速率,較好的語(yǔ)音質(zhì)量廣泛應(yīng)用于戰(zhàn)術(shù)通信網(wǎng)、衛(wèi)星通信、藍(lán)牙等無(wú)線語(yǔ)音傳輸領(lǐng)域。近年來(lái)FPGA不斷發(fā)展演化,并在構(gòu)架方面針對(duì)DSP應(yīng)用有了顯著增強(qiáng)。這些增強(qiáng)使得FPGA能夠支持各領(lǐng)域的眾多復(fù)雜DSP應(yīng)用,如電信(基站信號(hào)處理、雷達(dá)信號(hào)處理等)、多媒體處理(視頻處理、音頻信號(hào)處理等)及其他應(yīng)用領(lǐng)域,筆者結(jié)合FPCA的靈活性、強(qiáng)大的數(shù)字信號(hào)處理能力、較短的開(kāi)發(fā)周期,提出了基于FPGA的32 Kbit/s CVSD語(yǔ)音編解碼器。
1 CVSD原理
增量調(diào)制(Delta Modulation,DM)用一位編碼表示相鄰樣值的相對(duì)大小,從而反映出抽樣時(shí)刻波形的變化趨勢(shì),它分為線性增量調(diào)制(Linear Delta Modulation,LDM)和自適應(yīng)增量調(diào)制(Adaptive Delta Modulation,ADM)。LDM中采用固定的量化臺(tái)階△,在量化編碼的過(guò)程中會(huì)引起兩類失真,一類是斜率過(guò)載失真,它是由于量化臺(tái)階△過(guò)小,跟不上信號(hào)波形中斜率陡峭部分造成的,另一類是顆粒失真,它是由于量化臺(tái)階△過(guò)大,在信號(hào)波形斜率較小部分造成的。CVSD是一種自適應(yīng)增量ADM算法,動(dòng)態(tài)調(diào)整量化臺(tái)階△的大小隨輸入信號(hào)變化,當(dāng)輸入信號(hào)幅度變化率增大時(shí),量化臺(tái)階相應(yīng)增大,當(dāng)輸入信號(hào)幅度變化率減小時(shí),量化臺(tái)階相應(yīng)減小。
2 CVSD編解碼算法
2.1 編碼算法
編碼算法流程如圖1所示,x(n)為輸入語(yǔ)音采樣信號(hào),采樣頻率fs=32 kHz,xp(n)為一階預(yù)測(cè)值,d(n)為輸入采樣信號(hào)x(n)和一階預(yù)測(cè)值xp(n)的差值,β為量階衰減因子,△0為初始量階。模塊L實(shí)現(xiàn)電平轉(zhuǎn)換,輸入c(n)=1時(shí)輸出為+1,輸入c(n)=0時(shí)輸出為-1,因此模塊L的輸出值為2c(n)-1。
當(dāng)x(n)≥xp(n)時(shí),d(n)≥0,編碼輸出c(n)=1,當(dāng)x(n)
2.2 譯碼算法 譯碼算法流程如圖2所示,它是編碼的逆過(guò)程,由于積分器輸出的xQD(n)是階梯波,有較高的諧波分量,這里通過(guò)一個(gè)數(shù)字低通濾波器平滑積分器的輸出。當(dāng)c(n)=1時(shí),xQD(n)=xQD(n-1)+△(n);當(dāng)c(n)=0時(shí),xQD(n)=xQD(n-1)-△(n)。其中量階△(n)的取值同編碼算法。
3 FPGA的設(shè)計(jì)和實(shí)現(xiàn) 3.1 參數(shù)設(shè)計(jì) CVSD編譯碼算法中涉及到量階衰減因子β、初始量階△0和低通濾波器系數(shù)的設(shè)計(jì)。量階衰減因子滿足:β=1-T/τ,T表示語(yǔ)音信號(hào)的周期,語(yǔ)音信號(hào)頻率f=300~3 400 Hz,所以周期T=0.29~3.30 ms,τ為音節(jié)時(shí)間常數(shù),一般情況下τ=5~10ms?!?的選取很重要,如果△0選取過(guò)小,會(huì)導(dǎo)致初始的一段時(shí)間量化的數(shù)字信號(hào)與輸入信號(hào)之間存在較大的失真,需要經(jīng)過(guò)較長(zhǎng)的時(shí)間才能跟蹤上輸入信號(hào),為減少顆粒失真和過(guò)載失真,根據(jù)歐洲通信組織標(biāo)準(zhǔn),結(jié)合多次的MATLAB仿真測(cè)試,取β=0.855,△0=0.043,如圖3所示。
升余弦窗具有較好的旁瓣抑制和阻帶衰減,數(shù)字低通濾波器設(shè)計(jì)成14階升余弦窗有限脈沖響應(yīng)(Finite Impulse Response,F(xiàn)IR)濾波器,其參數(shù)采樣率fs=32 kHz由于語(yǔ)音信號(hào)頻譜集中在300~3 400 Hz,數(shù)字低通濾波器通帶截止頻率設(shè)計(jì)為fc=4 kHz/32 kHz=0.125,F(xiàn)IR濾波器系數(shù)向量B=[0.0029 0.0086 0.02600.058 0 0.1000 0.1400 0.1645 0.1645 0.1400 0.1000 0.058 0 0.0260 0.008 6 0.002 9]。如圖4所示,由于信號(hào)經(jīng)過(guò)14階FIR低通濾波器,輸出信號(hào)與原采樣信號(hào)相比存在一定的延時(shí),經(jīng)低通濾波后原信號(hào)得到了較好的恢復(fù)。
3.2 CVSD編解碼器 硬件設(shè)計(jì)時(shí)采用自頂向下的設(shè)計(jì)方法,將編解碼器分成各種功能模塊。CVSD編碼器負(fù)責(zé)處理采樣頻率32 kHz采樣的16 bit語(yǔ)音信號(hào),由比較判決模塊、三連碼檢測(cè)模塊、量階調(diào)整模塊和預(yù)測(cè)值產(chǎn)生模塊組成,硬件結(jié)構(gòu)如圖5所示。比較判決模塊將預(yù)測(cè)值產(chǎn)生模塊產(chǎn)生的預(yù)測(cè)值與語(yǔ)音信號(hào)值進(jìn)行比較,如果輸入語(yǔ)音信號(hào)值≥預(yù)測(cè)值,則編碼輸出“1”,否則編碼輸出“0”。編碼輸入三連碼檢測(cè)模塊進(jìn)行三連電平的判決,通過(guò)量階調(diào)整模塊和預(yù)測(cè)值產(chǎn)生模塊產(chǎn)生動(dòng)態(tài)的量階和預(yù)測(cè)值。其中預(yù)測(cè)值產(chǎn)生模塊需要注意防止數(shù)據(jù)溢出。
CVSD解碼器負(fù)責(zé)處理32 kHz的單比特符號(hào),根據(jù)圖2,編碼過(guò)程中預(yù)測(cè)值的產(chǎn)生模塊就已經(jīng)實(shí)現(xiàn)了譯碼過(guò)程,后面數(shù)字低通FIR濾波器采用分布式算法(Distributed Arithmetic,DA)進(jìn)行設(shè)計(jì),極大地提高了乘累加運(yùn)算的效能且節(jié)省了FPGA的硬件資源。解碼器還需要設(shè)計(jì)一個(gè)時(shí)鐘產(chǎn)生模塊,因?yàn)椴捎梅植际剿惴ǖ?4階的低通濾波器的時(shí)鐘頻率是數(shù)據(jù)時(shí)鐘的16倍。 4 仿真測(cè)試 采用Quartus Ⅱ6.0進(jìn)行開(kāi)發(fā)仿真,verilog語(yǔ)言編程。為了便于軟件仿真,設(shè)計(jì)了DDS信號(hào)源,CVSD編碼器的輸入由正弦信號(hào)源DDS模塊提供。仿真結(jié)果如圖6所示。
最后在Altera DE2開(kāi)發(fā)板上進(jìn)行了硬件測(cè)試,芯片為Cyclone II EP2C35,編解碼器硬件資源消耗見(jiàn)表1。A/D輸入模擬的語(yǔ)音信號(hào),采樣頻率32 kHz,采樣信號(hào)經(jīng)編碼器、解碼器、低通濾波再通過(guò)D/A轉(zhuǎn)換輸出解碼的語(yǔ)音信號(hào),如圖7所示。測(cè)試結(jié)果表明輸出語(yǔ)音信號(hào)理想,說(shuō)明設(shè)計(jì)是可行的。
5 結(jié)束語(yǔ) CVSD是一種自適應(yīng)增量脈沖編碼調(diào)制,對(duì)誤碼有很強(qiáng)的魯棒性,擅長(zhǎng)處理丟失和被損壞的語(yǔ)音采樣,編碼器是單比特編碼,和PCM相比不需要復(fù)雜的成幀設(shè)備,并且解碼器中集成了數(shù)字低通濾波器,使得編解碼設(shè)備簡(jiǎn)單,綜合這些優(yōu)越性,CVSD特別適合應(yīng)用于無(wú)線語(yǔ)音通信系統(tǒng),具有很廣闊的應(yīng)用前景。
評(píng)論