摘 要: 介紹了一種采用DSP內核芯片設計開發的手持式語音設備。該語音設備無需開發系統支持,語音播放時間長達200分鐘,而壓縮比達到46:1,僅使用一片32兆位的閃速存儲器就可保存全部數據。
關鍵詞: DSP內核 語音壓縮
隨著儀器儀表人機界面越來越趨于人性化,語音識別的需求不斷增長,語音處理技術發展迅速,各種處理算法層出不窮,為大容量的語音應用提供了愈加靈活的技術手段。然而,語音數據的壓縮比越高,數據回放算法所要求的計算能力也越強。目前,大多數高壓縮比的語音壓縮數據生成必須采用專用的語音開發工具和開發版權,這給國內的小規模用戶造成了一定的困難。在8K的采樣速率下,同樣是使用4兆位的flash芯片來存儲數據,不同的語音算法所能提供的回放時間有很大差異。例如,采用ADPCM(自適應增量脈沖編碼)算法只可提供128秒的回放時間,而采用TI的LPC(線性預測編碼)算法卻可得到50分鐘的回放時間。在某一工程項目中,我們需要開發一種回放時間長達200分鐘的低成本手持語音設備,由于使用了DSP內核芯片,在較短的時間內完成了開發工作,達到了預先提出的性能指標。
1 語音算法與芯片特點
在本項目中,我們選擇了DSP集團的語音壓縮最新算法Triple Rate Coder,其壓縮比達到了46:1,且音質良好,MOS指標達到了3.98。
該算法的基本思想是:首先將語音分為若干小段,由于語音信號的譜變化是一個緩變量,因此在每一小段內信號是平穩變化的。然后用一個數字濾波器和一個激勵函數來表示這一段時域波形的離散采樣序列。在實際算法中是采用了一個十階的線性預測濾波器,計算時還將每一幀分為4個子幀,每一子幀的濾波器系數矢量由上一幀和本幀數據計算得到,而最后一子幀的濾波器系數矢量則由矢量分解預測法得到;激勵函數采用的是偽隨機多脈沖激勵函數,由最大似然算法得到。對每一幀計算得到濾波器系數矢量和函數生成元后,將這些系數再壓縮打包就得到了最后的語音壓縮數據。當對語音壓縮數據進行解壓時,首先將打包的數據展開,然后建立起線性預測濾波器,將重新生成的偽隨機多脈沖激勵函數輸入濾波器,這樣在濾波器的輸出端就可得到被恢復的語音信號序列了。
該算法的實時運算需要22MIPS以上的運算速度,為此DSP集團將DSP內核和算法代碼集成在D6571系列芯片內,以滿足除PC用戶以外的更廣泛應用。D6571原理框圖如圖1所示,其本身可直接外掛并管理4兆位的flash,8K采樣速率時在2.8KB的數據率下可提供25分鐘的回放時間。該芯片具備工業標準的編解碼器接口,可直接與串行PCM接口的音頻編解碼芯片相連,如美國國家半導體的TP3054或韓國三星半導體的KS8620。D6571可外接兩片音頻編解碼芯片,上電后可用設置命令對外接音頻編解碼芯片的工作模式進行設置。例如:設置外接芯片的時鐘是外同步還是自同步;設置外接芯片處于輸出方式還是輸入方式等。
根據實際開發經驗,我們認為D6571芯片與其它公司所提供的某些DSP內核芯片相比,其最大的優點是幾乎不需要任何開發工具或軟件就可使用。因為該芯片的數據是雙向的,既可由上位機將壓縮后的語音數據通過它解壓轉變成語音,也可輸入語音通過它進行實時壓縮后傳送給上位機。這就大大方便了長回放時間語音開發用戶的使用。更何況目前許多語音壓縮芯片對語音數據的管理是不公開的,例如:某些數字錄音電話的語音壓縮芯片。
2 系統構成
與語音處理有關的系統構成如圖2所示。
語音數據存放在一片32兆位的flash中,采用三星的K29W3200,這是一種8位并行接口的閃存,并行接口有利于提高代碼效率和滿足實時性要求。
在語音數據的壓縮和回放過程中,D6571和flash之間的數據吞吐均通過上位機進行。上位機采用89C52。系統還有64×64的點陣液晶模塊ACM6464等外圍設備。所有的設備均使用一條公共的8位數據總線,即CPU的P0口;P2口的六根口線用于鍵盤管理;P3口的兩根口線作為兩條串口線;這樣用于外設管理的口線還剩余16根可用。系統實際使用了其中的14根線:與flash管理有關的使用6根,與D6571有關的使用4根,還有4根用于液晶顯示管理。
音頻編解碼接口芯片采用一片TP3054,TP3054工作所需的同步脈沖、采樣時鐘、數據信號等只需要與D6571的四根控制線相連即可得到。
3 系統開發
本系統的語音開發分為上載、數據合成及下載三個過程。上載是指獲得語音壓縮數據;數據合成是指將全系統的數據按一定的結構組織成一個文件;下載是指儀器裝配出廠時將文件燒錄到flash中。這三個過程均通過PC機進行。由于系統板上MCU的串行信號直接輸出的是TTL電平,因此,本系統的語音開發唯一需要另外制作的硬件就是使用一片MAX232來完成與PC機之間的電平轉換。
D6571具有16位寬度的總線,但也允許以分時方式使用8位總線,這時上位機須用HL信號表示送上總線的是高8位還是低8位;而當D6571主動將數據送上總線時,會發出ACK信號通知上位機讀取數據。HRD和HWR則是讀和寫的控制線。由于Triple Rate Coder算法是按30毫秒分幀采樣,然后再進行分析壓縮的,因此無論是讀取壓縮數據還是回送壓縮數據,均必須在一幀之內完成,否則D6571會自行進入休眠狀態。向D6571輸送語音數據的過程如下:首先送出解壓控制命令,然后接收一個回送狀態字,狀態字中包含了當前幀所需要的字節數,上位機就連續送出規定數目的數據,待一幀處理完畢后,D6571會繼續送出狀態字。如此循環就可連續回放出語音了。而利用D6571進行語音壓縮的數據處理過程正好相反,狀態字中包含的是當前幀壓縮所得到的字節數,上位機就應連續接收規定數目的數據。
上載時,首先要得到的是各個語音段的壓縮數據。作為準備工作,先用PC機的錄音機工具將我們所需的語音錄制成WAV文件。然后對MCU和PC機分別編寫共同配合工作的兩段程序來完成以下功能:PC機通過聲卡播放聲音給D6571;89C52控制D6571進行語音壓縮并讀回壓縮數據,然后通過串口線回送給PC機,PC機則將每段的壓縮數據存盤。
由于每段語音播放時均要有一定的中文點陣字符顯示,數據合成的任務就是要將每段數據加上索引和字符點陣數據后再合成為一個完整的近32兆位的二進制文件。文件形成時為了使數據定位和讀出編程方便,數據塊以flash的頁為單位,一頁為528字節。
下載工作則較簡單,在設備出廠前直接使用系統89C52的串口將數據合成形成的文件下載到閃存中即可。
D6571的壓縮率極高,使用和開發也比較方便。因此盡管本系統的語音容量長達200分鐘,但系統整體設計十分簡潔、經濟,幾乎不需調試。主要開發工作是MCU和PC機的一些程序開發使用C51和VB編程,開發速度也比較快。
由于D6571的控制命令很豐富,系統用戶界面的軟件是很容易編寫的。例如,由于該芯片具有30階的音量控制命令,我們未添任何硬件就為設備增加了數字音量控制功能。D6571的控制命令還包含自動增益控制、變速回放、數字濾波器等更加高級的命令,因此,它幾乎可應用于任何語音場合。
參考文獻
1 楊行峻,遲惠生.語音信號數字處理.北京:電子工業出版社,1995
2 吳樂南.數據壓縮的原理與應用.北京:電子工業出版社,1995
3 何振亞.數字信號處理的理論與應用.北京:人民郵電出版社,1983
4 D6571 data sheet.DSP Group,INC.
5 TP3054 TP3057 data sheet.National Semiconductor Cor-poration