1. 引言
數(shù)字多路語音記錄器在安全,、監(jiān)控方面有很多應用。一些傳統(tǒng)的設計方案基于工控機,,用數(shù)據(jù)采集卡實現(xiàn)語音的A/D轉換,,用軟件實現(xiàn)語音編解碼,這種方案成本高,、功耗大,。如果采用嵌入式的設計方案,可以實現(xiàn)同樣的功能,,并且具有低成本,,低功耗的特點。
普通的低成本嵌入式處理器性能不高,,不足以實現(xiàn)多路語音的實時編碼,、解碼,需要用專門的語音處理芯片完成這一工作,?;贒SP自主設計語音編碼器是一種方法,但工作量大,。AC48304廣泛應用于各種小型VOIP網(wǎng)關中,,價格低廉,是一種很好的替代方案,。同時AC48304還具有DTMF識別和靜音檢測等功能,,便于實現(xiàn)電話號碼識別和語音的自動記錄。
ARM是一種應用廣泛的嵌入式處理器,,Samsung,、Atmel等廠家生產(chǎn)的ARM處理器接口豐富,技術支持全面,。ARM處理器價格低,、性價比高,,向下取代了大量單片機的應用,向上滲透高端嵌入式處理器的市場,。在本多路語音記錄器中,,采用了Samsung的ARM9處理器S3C2410,操作系統(tǒng)則采用了嵌入式linux,。
2. 系統(tǒng)結構
語音記錄器包括語音處理模塊,、ARM系統(tǒng)模塊、硬盤記錄模塊,、網(wǎng)絡接口模塊幾個部分,。為使系統(tǒng)配置靈活,將系統(tǒng)設計為主控板和擴展板兩個部分,,在主控板上實現(xiàn)16路語音通道,,另設計一個16通道的語音擴展板,整個系統(tǒng)可以用4的倍數(shù)進行語音通道的擴展,,最多達到32個語音通道,。計算機控制部分集成S3C2410 處理器、64MB SDRAM及16MB 的FLASH,,構成一個嵌入式小系統(tǒng),。
語音CODEC采用AMD的LE58QL021,該器件是3.3V單電壓用戶線語音處理器,,在小型語音網(wǎng)關中是AC48304的常用搭配,,支持4通道語音AD/DA,支持E1 PCM Highway,,能與AC48304實現(xiàn)無縫連接,。LE58QL021的工作模式可軟件編程控制,ARM通過MPI(Microprocessor Interface)串行控制總線設置LE58QL021的各種工作參數(shù),。
基于DM9000網(wǎng)絡控制器,,系統(tǒng)實現(xiàn)10/100Mbps自適應以太網(wǎng)接口,Linux操作系統(tǒng)提供設備驅動支持,。IDE接口則是由一片CPLD實現(xiàn),,硬盤用于語音的本地記錄。主要部分電路原理見圖1,。
圖1 語音處理模塊的硬件電路原理圖
3. AC48304語音處理器
AC48304是AudioCodes公司基于DSP設計的一個四通道語音處理器,,支持多種標準、多種碼率的G系列語音編碼器,,如G.723.1,,G.711,G.726和G.729等,支持T.38傳真中繼和其他語音信號處理功能,。在系統(tǒng)中,,ARM通過CPU局部總線實現(xiàn)對AC48304的控制及數(shù)據(jù)交換。AC48304與LE58QL021之間通過E1 PCM Highway接口實現(xiàn)多通道數(shù)字語音接口,。E1接口由2.048Mhz時鐘驅動,,有0"31共32個8位時隙,工作時序如圖2所示,。
圖2 PCM Highway時序
AC48304是一種專用的語音處理DSP芯片,,需要運行相應的DSP程序。正常運行前,, AC48304有兩個程序需要下載:kernel(內核)程序和application(應用)程序,。kernel程序是個只有幾百字節(jié)的小程序,完成DSP的初始化工作,,為下載應用程序做準備,。application程序則完成AC48304的所有功能,在kernel程序程序下載完成后,,才可以下載application程序。AC48304有4個工作模式:內核下載模式,、程序下載模式,、初始化模式、運行模式,。其中運行模式有兩個狀態(tài):空閑狀態(tài)和激活狀態(tài),,用戶只能在空閑狀態(tài)改變芯片的工作參數(shù)。
4. 軟件設計
4.1Linux中的驅動程序設計
操作系統(tǒng)采用的是嵌入式Linux操作系統(tǒng),。Linux具有效率高,、內核小的優(yōu)點,且開放源代碼,,完全免費,。在Linux操作系統(tǒng)下,應用程序不能直接訪問硬件,,盡管Linux在ARM平臺上有較完整的板級支持包,,但在該系統(tǒng)的開發(fā)工作中仍然要完成部分設備的驅動程序設計,包括AC48304驅動程序,、LE58QL021驅動程序,、S-EEPROM驅動程序等。
設備驅動程序要為應用軟件提供設備打開,、關閉,、設備控制及數(shù)據(jù)讀/寫等接口, 即一些類似于open、close,、read和write的函數(shù),,在主程序中直接采用文件讀寫的方式實現(xiàn)數(shù)據(jù)的收發(fā)。LE58QL021與ARM處理器之間采用MPI串行控制總線,,MPI驅動接口結構定義如下:
static file_operations mpi_ctl_fops = {
ioctl:mpi_ctl_ioctl, //設備控制
open:mpi_open, //打開設備
close:mpi
_ close, //關閉設備
}
linux提供ioremap函數(shù)將I/O內存資源的物理地址映射到核心虛地址空間,,然后可像操作寄存器那樣進行數(shù)據(jù)讀寫。編寫驅動程序的時候,,必須提供兩個函數(shù),,一個是module_init(),insmod在加載此模塊的時候自動調用,,負責進行設備驅動程序的初始化工作,,一個函數(shù)是module_exit,在模塊被卸載時調用,,負責進行設備驅動程序的清除工作,。
4.2 AC48304的數(shù)據(jù)讀寫實現(xiàn)
每個AC48304可同時進行4個通道的語音編/解碼,片內有數(shù)據(jù)緩存區(qū),,編碼后的語音數(shù)據(jù)先存儲在各通道的緩存區(qū),,然后依次拷貝到輸出緩沖區(qū)。表1為本系統(tǒng)支持的幾種主要語音編碼格式的相關參數(shù),。其中G.711的A/u律數(shù)據(jù)量最大為64kbps,,每個通道每秒有8000字節(jié)的數(shù)據(jù),而AC48304的數(shù)據(jù)讀取區(qū)的有效量為80字節(jié),,即每秒鐘要進行100次的讀取操作,,對每個AC48304而言每秒鐘要進行400次讀取操作才能保證數(shù)據(jù)及時讀取。由于語音編碼包是以恒定的速率產(chǎn)生的,,因此每2.5毫秒必須對DSP進行一次讀取操作,。本平臺的Linux內核中,進
程調度算法的時間單位為10毫秒,,在進程中執(zhí)行數(shù)據(jù)的讀取操作很難保證數(shù)據(jù)及時讀取,,如果某個服務進程或者是本進程中的某個控制操作執(zhí)行時間過長,就會造成語音數(shù)據(jù)的丟失,。
表1:語音數(shù)據(jù)特性
Linux中程序運行的環(huán)境分為內核空間和用戶空間,,內核空間的程序優(yōu)先級高于用戶空間。為保證編碼數(shù)據(jù)被及時讀取,,需在內核級別的進程中定時讀取AC48304產(chǎn)生的數(shù)據(jù),。有兩種方式可將用戶程序加入到內核空間中運行:修改Linux內核源代碼,直接將用戶程序代碼編譯到內核中,;利用Linux的模塊機制,,動態(tài)的將用戶程序代碼添加到內核空間中運行。第一種方法實現(xiàn)難度比較大,而且容易出錯,。第二種方法實現(xiàn)難度小,,效果與第一種相同,本系統(tǒng)中采用的是第二種方法,。
將AC48304的讀取操作作為驅動程序進行設計,,使用insmod命令動態(tài)加載到內核中去,在定時中斷的服務函數(shù)中讀取AC48304的數(shù)據(jù),。S3C2410中有5個用戶可編程的時鐘中斷,,中斷優(yōu)先級別高,中斷的頻率可編程控制,,其中時鐘中斷Timer3已用于DMA控制,,Tmer4用于進程調度。本系統(tǒng)的程序設計中使用Timer2,,通過配置相關控制寄存器將Timer2的中斷頻率設為500HZ,,適當?shù)脑黾幼x取查詢操作頻率,保證數(shù)據(jù)及時讀取,。中斷服務函數(shù)是由內核來執(zhí)行的,,優(yōu)先級高于用戶程序,可保證讀取操作的實時性,。為AC48304的每個通道分配一個數(shù)據(jù)緩沖區(qū),,定時中斷函數(shù)中讀取的數(shù)據(jù)先保存在緩沖區(qū)中,用戶程序通過讀取該緩沖區(qū)獲得語音數(shù)據(jù),,這樣對外部用戶而言,語音數(shù)據(jù)沒有丟失,,語音延遲在毫秒級別,,完全可以滿足需求。
4.3 應用軟件設計
將應用程序及驅動程序文件加入文件系統(tǒng)中,,修改有關啟動的配置文件,,使得系統(tǒng)啟動完畢時自動加載目標程序,這樣每次設備啟動時將自動進入應用程序,。主程序流程如圖3所示,,主程序的功能主要是:
u 系統(tǒng)配置:系統(tǒng)的配置表存儲在一片S-EEPROM中,配置表可以通過串口終端或者網(wǎng)絡在線配置,。
u 初始化系統(tǒng):包括向DSP下載內核程序和應用程序,,啟動DSP及LE58QL021等。
u 語音數(shù)據(jù)讀寫:通過DSP的HPI總線讀取DSP數(shù)據(jù)實現(xiàn)語音采集,,通過HPI把數(shù)據(jù)寫入DSP實現(xiàn)語音回放,。
u 數(shù)據(jù)存儲:根據(jù)錄音計劃將需要錄音的語音數(shù)據(jù)保存到硬盤中。
u 命令處理:包括選擇語音通道命令、回放命令,、校時命令,、增益調節(jié)命令、配置表傳輸命令,、錄音數(shù)據(jù)上傳命令等,。
圖3.主程序流程圖
5. 結束語
本記錄器最多支持32路語音實時處理,在硬盤上實現(xiàn)長時間錄音,,并可通過10/100Mbps以太網(wǎng)實現(xiàn)數(shù)據(jù)上傳和管理,。經(jīng)測試本記錄器可以很好的完成語音數(shù)據(jù)的采集、壓縮,、存儲,、解壓縮和回放,內核級別的用戶進程運行正常,,保證了整個系統(tǒng)的實時性,。該語音記錄器具有低成本、低功耗,、結構精簡,、使用簡單的特點,具有很好的實用價值,。