基于FPGA的32Kbit/s CVSD語音編解碼器的實現(xiàn)
1 CVSD原理
增量調(diào)制(Delta Modulation,DM)用一位編碼表示相鄰樣值的相對大小,從而反映出抽樣時刻波形的變化趨勢,它分為線性增量調(diào)制(Linear Delta Modulation,LDM)和自適應(yīng)增量調(diào)制(Adaptive Delta Modulation,ADM)。LDM中采用固定的量化臺階△,在量化編碼的過程中會引起兩類失真,一類是斜率過載失真,它是由于量化臺階△過小,跟不上信號波形中斜率陡峭部分造成的,另一類是顆粒失真,它是由于量化臺階△過大,在信號波形斜率較小部分造成的。CVSD是一種自適應(yīng)增量ADM算法,動態(tài)調(diào)整量化臺階△的大小隨輸入信號變化,當(dāng)輸入信號幅度變化率增大時,量化臺階相應(yīng)增大,當(dāng)輸入信號幅度變化率減小時,量化臺階相應(yīng)減小。
2 CVSD編解碼算法
2.1 編碼算法
編碼算法流程如圖1所示,x(n)為輸入語音采樣信號,采樣頻率fs=32 kHz,xp(n)為一階預(yù)測值,d(n)為輸入采樣信號x(n)和一階預(yù)測值xp(n)的差值,β為量階衰減因子,△0為初始量階。模塊L實現(xiàn)電平轉(zhuǎn)換,輸入c(n)=1時輸出為+1,輸入c(n)=0時輸出為-1,因此模塊L的輸出值為2c(n)-1。
當(dāng)x(n)≥xp(n)時,d(n)≥0,編碼輸出c(n)=1,當(dāng)x(n)
2.2 譯碼算法
譯碼算法流程如圖2所示,它是編碼的逆過程,由于積分器輸出的xQD(n)是階梯波,有較高的諧波分量,這里通過一個數(shù)字低通濾波器平滑積分器的輸出。當(dāng)c(n)=1時,xQD(n)=xQD(n-1)+△(n);當(dāng)c(n)=0時,xQD(n)=xQD(n-1)-△(n)。其中量階△(n)的取值同編碼算法。
3 FPGA的設(shè)計和實現(xiàn)
3.1 參數(shù)設(shè)計
CVSD編譯碼算法中涉及到量階衰減因子β、初始量階△0和低通濾波器系數(shù)的設(shè)計。量階衰減因子滿足:β=1-T/τ,T表示語音信號的周期,語音信號頻率f=300~3 400 Hz,所以周期T=0.29~3.30 ms,τ為音節(jié)時間常數(shù),一般情況下τ=5~10ms?!?的選取很重要,如果△0選取過小,會導(dǎo)致初始的一段時間量化的數(shù)字信號與輸入信號之間存在較大的失真,需要經(jīng)過較長的時間才能跟蹤上輸入信號,為減少顆粒失真和過載失真,根據(jù)歐洲通信組織標(biāo)準(zhǔn),結(jié)合多次的MATLAB仿真測試,取β=0.855,△0=0.043,如圖3所示。
升余弦窗具有較好的旁瓣抑制和阻帶衰減,數(shù)字低通濾波器設(shè)計成14階升余弦窗有限脈沖響應(yīng)(Finite Impulse Response,F(xiàn)IR)濾波器,其參數(shù)采樣率fs=32 kHz由于語音信號頻譜集中在300~3 400 Hz,數(shù)字低通濾波器通帶截止頻率設(shè)計為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所示,由于信號經(jīng)過14階FIR低通濾波器,輸出信號與原采樣信號相比存在一定的延時,經(jīng)低通濾波后原信號得到了較好的恢復(fù)。
3.2 CVSD編解碼器
硬件設(shè)計時采用自頂向下的設(shè)計方法,將編解碼器分成各種功能模塊。CVSD編碼器負(fù)責(zé)處理采樣頻率32 kHz采樣的16 bit語音信號,由比較判決模塊、三連碼檢測模塊、量階調(diào)整模塊和預(yù)測值產(chǎn)生模塊組成,硬件結(jié)構(gòu)如圖5所示。比較判決模塊將預(yù)測值產(chǎn)生模塊產(chǎn)生的預(yù)測值與語音信號值進行比較,如果輸入語音信號值≥預(yù)測值,則編碼輸出“1”,否則編碼輸出“0”。編碼輸入三連碼檢測模塊進行三連電平的判決,通過量階調(diào)整模塊和預(yù)測值產(chǎn)生模塊產(chǎn)生動態(tài)的量階和預(yù)測值。其中預(yù)測值產(chǎn)生模塊需要注意防止數(shù)據(jù)溢出。
CVSD解碼器負(fù)責(zé)處理32 kHz的單比特符號,根據(jù)圖2,編碼過程中預(yù)測值的產(chǎn)生模塊就已經(jīng)實現(xiàn)了譯碼過程,后面數(shù)字低通FIR濾波器采用分布式算法(Distributed Arithmetic,DA)進行設(shè)計,極大地提高了乘累加運算的效能且節(jié)省了FPGA的硬件資源。解碼器還需要設(shè)計一個時鐘產(chǎn)生模塊,因為采用分布式算法的14階的低通濾波器的時鐘頻率是數(shù)據(jù)時鐘的16倍。
4 仿真測試
采用Quartus Ⅱ6.0進行開發(fā)仿真,verilog語言編程。為了便于軟件仿真,設(shè)計了DDS信號源,CVSD編碼器的輸入由正弦信號源DDS模塊提供。仿真結(jié)果如圖6所示。
最后在Altera DE2開發(fā)板上進行了硬件測試,芯片為Cyclone II EP2C35,編解碼器硬件資源消耗見表1。A/D輸入模擬的語音信號,采樣頻率32 kHz,采樣信號經(jīng)編碼器、解碼器、低通濾波再通過D/A轉(zhuǎn)換輸出解碼的語音信號,如圖7所示。測試結(jié)果表明輸出語音信號理想,說明設(shè)計是可行的。
5 結(jié)束語
CVSD是一種自適應(yīng)增量脈沖編碼調(diào)制,對誤碼有很強的魯棒性,擅長處理丟失和被損壞的語音采樣,編碼器是單比特編碼,和PCM相比不需要復(fù)雜的成幀設(shè)備,并且解碼器中集成了數(shù)字低通濾波器,使得編解碼設(shè)備簡單,綜合這些優(yōu)越性,CVSD特別適合應(yīng)用于無線語音通信系統(tǒng),具有很廣闊的應(yīng)用前景。