在眾多的語音編譯碼調制中,連續可變斜率增量調制(CVSD)作為許多增量調制中的一種,只需編一位碼,在發送端與接收端之間不需要碼型同步,量階△的大小能自動地跟蹤信號變化,因而具有強抗誤碼能力,在10-3時仍可保持高質量的話音。目前市場上有CVSD的專用芯片,但專用芯片的通用性、靈活性和可擴展性受到了很大的限制,并且產品的開發周期長,開發成本也較高。專用CVSD芯片只能實現一路編譯碼,在需要多路CVSD編譯碼時則需要很多專用芯片,具有局限性;而單片FPGA容易實現多路CVSD編譯碼功能。此外如果專用芯片停產或者買不到,已有的通信設備維修將會因器件缺乏導致后續工作無法開展。為了彌補專用CVSD芯片的不足,同時也方便在現場可編程門陣列(FPGA)中增加一些其他相關的應用功能,因此在FPGA中實現CVSD語音編譯碼調制功能的前景將是非常廣闊的。 這里將詳細介紹基于FPGA的CVSD語音編譯碼的設計思路、具體實現以及和專用芯片CMX639之間的互相通信。 1 CVSD工作原埋 CVSD是一種量階△隨著輸入語音信號平均斜率(斜率絕對值的平均值)大小而連續變化的增量調制方式。它的工作原理如下:用多個連續可變斜率的折線來逼近語音信號,當折線斜率為正時,對應的數字編碼為“1”;當折線斜率為負時,對應的數字編碼為“0”。 當CVSD工作于編碼方式時,其系統框圖如圖1所示。語音信號xin(t)經采樣得到數字信號x(n),數字信號x(n)與積分器輸出信號g(n)比較后輸出誤差信號d(n),誤差信號d(n)經判決后輸出數字編碼c(n),同時該信號作為積分器輸出斜率的極性控制信號和積分器輸出斜率大小邏輯的輸入信號。在每個時鐘周期內,若語音信號大于積分器輸出信號,則判決輸出為“1”,積分器輸出上升一個量階△;若語音信號小于積分器輸出信號,則判決輸出為“0”,積分器輸出下降一個量階△。當CVSD工作于譯碼方式時,其系統框圖如圖2所示。在每個時鐘周期內,數字編碼c(n)被送到連碼檢測器,然后送到平滑電路以控制積分器輸出斜率的大小。若數字編碼c(n)輸入為“1”,則積分器的輸出上升一個量階△,若數字輸入為“O”,則積分器的輸出下降一個量階△,這相當于編碼過程的逆過程。積分器的輸出g(n)通過低通濾波器平滑濾波后將重現輸入語音信號xout(t)。可見輸入信號的波形上升越快,輸出的連“1”碼就越多,同樣下降越快,輸出的連“O”碼越多,CVSD編譯碼能夠很好地反映輸入信號的斜率大小,有效地避免了斜率過載失真和顆粒失真。為使積分器的輸出能夠更好地逼近輸入語音信號,量階△隨著輸入信號斜率大小而變化,當信號斜率絕對值很大,編碼出現3個或4個連“l”或連“O”碼時,則量階△加一個增量△0;當不出現上述碼型時,量階△則相應地減少。 2 CVSD的軟件算法 2.1 CVSD的編碼算法 圖3是CVSD編碼算法框圖,其量階△調整是基于前3位的連碼。x(n)是語音經過采樣得到的數字信號,數字信號x(n)與積分器地I1輸出的預測信號xp(n)經過比較后輸出誤差信號d(n),誤差信號d(n)經一階量化(d(n)≥0,c(n)=1;d(n)<0,c(n)=O)得到輸出的數字編碼c(n),該信號同時作為積分器I2的極性控制信號和控制積分器I2輸出斜率大小邏輯的輸入信號。當輸出碼出現連續的“1”碼或者連續的“0”碼,則說明信號波形的斜率較大,因此量階△需要適當增加,當輸出碼c(n)長時間沒有出現連碼,則積分器I2向“O”值方向衰減,量階△減小。最小和最大階距是由△MIN和△MAX分別確定的。當長時間沒有出現連碼,CVSD編碼器退化為一個線性增量調制(LDM)編碼器。 2.2 CVSD的譯碼算法 圖4是CVSD譯碼算法框圖,其量階調整是基于前3位的連碼。譯碼過程就是編碼的逆過程,只是在積分器I1后面增加了一個低通濾波器,用于抑制帶外干擾。 3 CVSD算法在FPGA中的實現 3.1 硬件實現框圖 考慮到實際需求,采用了通用性較強的A/D,D/A元器件和FPGA器件。該硬件可以同時實現3路CVSD編譯碼算法,一路采用FPGA(XC3S1500)實現,兩路采用專用芯片實現;同時編譯碼之間可以通過FPGA內部邏輯控制互相通信。在FPGA內設計實現了CVSD編譯碼算法,在該器件內融合多種控制功能,可以在線編程、方便調試。 音頻信號在進行A/D采樣之前,為了防止帶外信號進入,首先進行低通濾波;再通過高倍時鐘進行采樣得到數字信號進入FPGA進行編譯碼處理。譯碼過后的信號通過D/A輸出模擬信號,該信號再經過低通濾波器后輸出,得到音頻信號。 3.2 CVSD算法實現框圖 在FPGA內部算法實現上,采用了“自頂向下”的設計方法,即根據要求的功能先設計出頂層的原理圖,該圖由若干個功能模塊組成。再把各個模塊細化為子模塊,各子模塊的功能采用電路圖實現,也可用硬件描述語言實現。設計中頂層采用原理圖實現,子模塊采用VHDL硬件描述語言實現,利用ISE自帶的IP Core乘法器,經過綜合和優化等過程,最終將程序下載到芯片中,使用在線邏輯分析儀ChipScope Pro進行邏輯和功能測試分析。 3.3 CVSD算法的仿真 以正弦單音輸入信號為例,利用信號源產生信號幅度O.5 Vpp,頻率fin(t)=1 kHz的正弦信號作為測試信號,在FPGA中利用高倍時鐘產生fs(t)=64 kHz的采樣時鐘。對輸入A/D的音頻信號采用專用低通濾波芯片進行了濾波。D/A輸出的信號包含了許多不必要的高次諧波分量,因此也采用低通濾波器對其進行了平滑濾波。 在設計上,不僅僅是采用FPGA實現和驗證自己的CVSD編譯碼算法,還和專用芯片CMX639進行互相通信進行驗證。CMX639是一款CVSD全雙工音頻調制芯片,集成了編碼和譯碼功能,實現了單芯片語音處理能力,外圍設備簡單,用戶可以根據實際情況,自主選擇采樣速率。 圖8是通過ChipScope Pro采集的實時正弦信號。從圖中可以看出量階△的大小能夠很好地反映輸入信號斜率的大小,輸出端輸出信號能夠很好地重現輸入信號,說明CVSD編譯碼方式是有效的。 3.4 CVSD算法的實現 采用原理圖和VHDL語言相結合的方式在FPGA中實現了CVSD電路。具體實現步驟如下: (1)根據算法框圖設計頂層原理圖CVSD.SCH; (2)利用IP Core產生底層所需要的乘法器; (3)利用VHDL語言完成CVSD編譯碼模塊; (4)I/O管腳定義,約束條件編寫; (5)設計綜合、編譯; (6)bit文件生成、下載,通過ChipScope Pro進行仿真測試; (7)根據仿真測試結果返回修改設計,直到設計成功; (8)mcs文件生成、加載,最終驗證。 驗證是FPGA設計中很重要的一環,只有通過驗證才能說明設計的正確與否。采用XILINX公司的Spartan一3系列中的XC3S1500來具體實現CVSD的編譯碼功能。通過自己設計的編譯碼算法和CMX639專用芯片的編譯碼模塊互相通信,輸入實際語音信號測試,能夠很好地從D/A輸出語音信號,從CMX639譯碼輸出也能聽到語音信號,達到了滿意的效果。 4 結 語 本文提出的FPGA設計方法很好地實現了CVSD編譯碼功能,充分利用了FPGA的優勢,可以同時實現多路CVSD編譯碼功能,彌補了采用專用芯片實現CVSD編譯碼的不足,設計靈活、簡單,成本低,具有很好的應用前景。 |