許志強,陳 明
(中國電子科技集團公司第三十研究所,四川 成都 610041)
在軍用無線、衛(wèi)星、水聲通信等特殊領域,信道質量比較惡劣,信道特性復雜多變且受干擾比較嚴重,連續(xù)可變斜率增量調制(Continuous Variable Slope Delta Modulation,CVSD)編碼因其良好的抗信道誤碼魯棒性,以及容易實現(xiàn),被廣泛應用[1-2]。為了提升在復雜多變環(huán)境下通話時的語音質量,CVSD編解碼前都需壓擴提高信噪比[3-5]。目前CVSD編碼常用的壓擴方法都是使用專用芯片的硬件實現(xiàn)方案。
目前用于CVSD編碼壓擴的硬件實現(xiàn)方案雖然具有較好的性能,但使用專用芯片會提高設備功耗和成本,且目前該類芯片(如SA575)都是由國外廠商生產(chǎn),國內(nèi)無此類芯片,在當前國際形勢下,存在斷供、停產(chǎn)風險。
當前專用芯片實現(xiàn)CVSD編碼壓擴方法的壓擴曲線如圖1所示。
針對目前使用硬件芯片時存在的問題,本文提出一種用于CVSD編碼的數(shù)字壓擴算法,可零成本的替換當前硬件實現(xiàn)CVSD編碼壓擴所使用的專用芯片,并解決當前使用專用芯片存在的風險。本算法通過設計適合的循環(huán)隊列、查表法計算采樣點平方、滑動窗口算法計算采樣點平方和、二分法反向查找采樣點均方根值、根據(jù)壓擴曲線設計壓擴傳遞函數(shù)計算壓擴值等方法,將數(shù)字壓擴方法的運算復雜度降到最低,利用處理器很少的處理能力即可實現(xiàn),有利于簡化硬件設計,降低設備功耗和成本。
與使用專用芯片的硬件實現(xiàn)方法相比較,軟件實現(xiàn)壓擴方法靈活性大,語音質量優(yōu)于專用芯片實現(xiàn)方案,在具有多種語音編碼算法的設備中使用不同編碼算法時語音數(shù)據(jù)的前期處理完全一致,不需要根據(jù)不同語音編碼算法切換工作模式。
本文提出的用于CVSD編碼的數(shù)字壓擴算法技術方案由循環(huán)隊列設計;查表法計算采樣點平方;滑動窗口算法計算采樣點平方;二分法反向查表,快速查找采樣點均方根值;根據(jù)壓擴曲線設計壓擴傳遞函數(shù)計算壓擴值5個步驟實現(xiàn)。在開始進行壓縮或擴展前,先對循環(huán)隊列進行初始化。正常語音通信過程中,語音數(shù)據(jù)發(fā)送方向處理流程為:麥克風采集經(jīng)語音芯片模數(shù)(Analog to Digital,A/D)轉換后的語音數(shù)據(jù)插入循環(huán)隊列隊尾;采用查表法計算隊尾指針指向的采樣數(shù)據(jù)平方值;根據(jù)滑動窗口算法計算當前窗口內(nèi)數(shù)據(jù)平方和;計算滑動窗口內(nèi)數(shù)據(jù)均方值;根據(jù)壓縮傳遞函數(shù)計算壓縮后的值;最后將壓縮后的語音數(shù)據(jù)送給CVSD編碼器編碼。接收方向處理流程與發(fā)送方向基本一致,本技術方案組成及處理流程如圖2所示。
由于硬件芯片實現(xiàn)CVSD編碼壓擴方法的啟動、釋放時間為22 ms,使用32 Kb/s CVSD編碼時22 ms對應采樣點為704,為設計的軟件實現(xiàn)方法與專用芯片實現(xiàn)的完全兼容,故設計循環(huán)隊列的隊列深度為704。循環(huán)隊列定義如下所示,其中循環(huán)隊列數(shù)組用于存放采樣值。
#define MAX_QUEUE_SIZE 704
typedef struct queue
{
unsigned short Queue_array[MAX_QUEUE_SIZE];//循環(huán)隊列
int front ;//頭指針
int rear ;//尾指針
float square_aac;//循環(huán)隊列平方累加和
long square_front;//興指舒對應采樣點平方long square_rear;//尾指針對應采樣點平方
}SqQueue;
對該循環(huán)隊列的使用過程如圖3所示,初始化時將循環(huán)隊列各參數(shù)初始化為0,并在使用前將尾指針移動到MAX_QUEUE_SIZE-2位置;在采樣點入隊后計算更新循環(huán)隊列中采樣點數(shù)據(jù)平方累加和及尾指針指向采樣點平方;計算完一次用于CVSD編碼的壓縮或擴展值后,進行出隊操作將頭指針指向下一個采樣點。
由于經(jīng)模數(shù)轉換及采樣后的語音信號采樣值范圍確定,而計算采樣點平方運算占用處理器資源較多,因此將計算采樣點平方乘法運算轉換為查表法實現(xiàn),可以顯著降低運算復雜度。
滑動窗口算法計算窗口內(nèi)采樣點平方和過程如圖4所示。初始態(tài)窗口內(nèi)采樣點平方值均為0,故窗口內(nèi)采樣點平方和為0;當一個有效采樣點進入窗口前,通過步驟二查表法計算該采樣點平方為A,此時窗口向右滑動,則此時窗口內(nèi)采樣點平方和為A;當窗口再次向右滑動時,則此時窗口內(nèi)采樣點平方和為A-0+B。
窗口運行到某時刻假設窗口內(nèi)采樣點平方和為x1,當窗口向右滑動,則此時窗口內(nèi)采樣點平方和為x1-D+X;當窗口再次向右滑動時,則此時窗口內(nèi)采樣點平方和為(x1-D+X)-E+Y,以此類推。
該方法計算滑動窗口平方和時每次僅需一次減法和一次加法,降低了處理器的運算復雜度。

根據(jù)圖1壓擴曲線,設計的壓縮與擴展傳遞函數(shù)如下所示:
用于CVSD編碼的數(shù)字壓擴算法在數(shù)字語音通信終端中的應用場景如圖6所示。數(shù)字語音通信設備1(以下簡稱“設備1”)和數(shù)字語音通信設備2(以下簡稱“設備2”)使用CVSD編碼進行雙向通話。設備1、設備 2中均嵌入本文提出的數(shù)字壓擴算法。設備1的發(fā)送端語音經(jīng)過麥克風采集進入語音芯片處理,語音芯片將模擬語音信號轉換為線性脈沖編碼調制(Pulse Code Modulation,PCM)數(shù)據(jù),送入數(shù)字壓塊算法模塊進行數(shù)字壓縮,壓擴完畢后進行CVSD編碼后發(fā)送到線路;設備2的接收端接收到經(jīng)壓縮及CVSD編碼后的數(shù)據(jù)后進行CVSD解碼,解碼完畢后將數(shù)據(jù)送入數(shù)字壓塊算法模塊進行數(shù)字擴展,還原為線性PCM數(shù)據(jù)送入語音芯片處理后通過揚聲器播放。
經(jīng)實際測試,嵌入本算法后CVSD編碼可以在信道質量比較惡劣的環(huán)境中明顯提高通話清晰度,提升用戶體驗,同時嵌入本算法的設備比硬件實現(xiàn)方案設備互通時語音質量高。
本文提出的用于CVSD編碼的數(shù)字壓擴算法,使用軟件方法替代了原來由專用芯片實現(xiàn)用于CVSD編碼的硬件壓擴方法,利用設備自身處理器很少的處理能力即可軟件實現(xiàn),有利于簡化硬件設計,降低設備功耗和成本。
同時,使用本算法的設備間進行CVSD編碼通信時,語音質量比硬件專用芯片實現(xiàn)用于CVSD編碼的壓擴設備語音質量高,通信品質更好。