基于ARM的嵌入式語音存儲系統(tǒng)設計
摘要:為了有效地節(jié)省語音數據的傳輸帶寬和存儲系統(tǒng)的磁盤空間,需要在保證語音質量的前提下盡可能降低其編碼比特率。本設計采用經過優(yōu)化的G.729語音壓縮編譯碼算法,以ARM處理器為載體,開發(fā)的嵌入式語音存儲系統(tǒng)可實現語音信號的海量存儲,而且處理速度快、可靠性好、擴展方便。通過嚴格的測試和評估,該系統(tǒng)能夠實現對大量語音數據的壓縮和記錄,各項指標基本達到了預期的水平。
關鍵詞:ARM;語音壓縮;G.729;語音存儲
1 系統(tǒng)控制核心
嵌入式操作系統(tǒng)軟硬件結構框圖如圖1所示,由硬件層、驅動層、系統(tǒng)層和應用層組成。硬件層包括嵌入式處理器最小系統(tǒng)、存儲器(SD RAM、Flash、ROM等)、通用設備接口和I/O接口(A/D、D/A、I/O等),其中Linux實時操作系統(tǒng)和應用程序都可以固化在ROM中。硬件層的核心是嵌入式處理器,在一片嵌入式處理器基礎上添加電源電路、時鐘電路和存儲器電路,就構成了一個嵌入式處理器最小系統(tǒng)。中間的驅動層將上層軟件和底層硬件分離開,為其連接提供接口。系統(tǒng)層主要負責軟件硬資源的分配、內存管理、任務調度、文件處理等,是軟件層的核心。應用層為用戶提供編程接口,實現各種應用功能。
1.1 系統(tǒng)軟件核心
Linux操作系統(tǒng)的內核主要由進程調度、內存管理、虛擬文件系統(tǒng)、網絡接口、進程間通信五個子系統(tǒng)組成,各個子系統(tǒng)之間都存在著不可分割的依賴關系。內核為設備驅動提供支持,實現設備控制與應用;設備驅動為上層提供標準接口,完成硬件細節(jié)的封裝。可以根據設計需要對內核模塊進行適當的裁減,制作出理想、實用的操作系統(tǒng)。
1.2 系統(tǒng)硬件核心
Samsung公司的S3C2440A處理器是一款以手持設備為主而設汁的芯片。這款處理器支持NOR Flash和NAND Flash啟動方式,內部集成LCD、I2C總線、AC97、Camera等控制器。提供豐富的接口資源,方便與外設連接,易于擴展。
2 G.729算法概述
2.1 G.729編碼原理
G.729編碼標準采用CS-ACELP語音壓縮編碼技術,其核心原理是線性預測和二級量化。每個10 ms的語音幀包含80個采樣點,在每個這樣的語音中都要進行線性預測(LP)分析,計算出LP濾波器系數,再轉換為線性譜對參數(Line Spectrum Pari,LSP),并使用有兩個階段
的預測矢量量化器(Vector Quantization,VQ)進行18比特量化。然后編碼器以原始語音和合成語音的誤差感覺加權最小為準則采用A-B-S(Analysis-By-Synthesis,分析合成)方法搜索激勵信號,激勵參數(固定碼書參數和自適應碼書參數)每個子幀(5 ms幀長,40個采樣點)確定一次,感覺加權濾波器的系數由未量化的LP系數產生。
2.2 G.729解碼原理
解碼是編碼的逆過程,其原理為:首先從獲得的碼流中提取出參數的索引,這些參數包括LP濾波器系數、自適應碼書矢量以及固定碼書矢量和增益,它們分別解碼后,可獲得一個LSP系數、兩個音節(jié)延遲、兩組自適應碼書和固定碼書增益等對應于10 ms語音幀的編碼器參數。
然后將LSP系數進行內插操作,轉換為每個5 ms子幀的LP濾波器系數,再對每個子幀進行如下操作:
①經各自增益縮放的自適應矢量和固定碼本矢量相加,得到重建的激勵信號;
②將激勵信號通過LPC合成濾波器,得到重建語音;
③重建的語音信號經過各種濾波器的后續(xù)處理,實現信號的放大和改善。
2.3 G.729算法優(yōu)化
在G.729編碼算法中,采用量化碼本結構。其基本原則如下:首先計算出K維碼本里的各個碼字矢量的平均值并存儲起來;然后求出輸入信號矢量平均值和各個碼字矢量平均值的均方誤差值;最后用遍歷法找到這些均方誤差中的最小值Dmin,與之相對應的碼字即為最佳逼近碼字。采用這種搜索方法加快了編碼速度,減少了搜索時間,并沒有改變矢量量化的精度。
3 系統(tǒng)硬件結構
系統(tǒng)硬件結構框圖如圖2所示。S3C2440A作為整個系統(tǒng)的主控芯片,DC電源、復位電路、時鐘電路作用于系統(tǒng)的每個部分;存儲模塊包括SDRAM、Flash以及外接的CF或SD卡等;調試模塊包括JTAG接口、RS232接口以及網絡接口三個部分;音頻模塊的主要工作由編解碼器UDA1 341完成,擴展接口由USB接口、IDE接口構成,交互模塊由TFT LCD和觸摸屏構成。其中,音頻模塊和IDE擴展接口是研究的重點。
[!--empirenews.page--]
3.1 系統(tǒng)外圍電路
系統(tǒng)設計的外圍電路都是ARM最小系統(tǒng)所必需的。電源電路為系統(tǒng)提供能量,是系統(tǒng)工作的基礎。設計電源電路時要考慮的因素很多,主要包括輸入及輸出的電壓范圍、輸出紋波大小、電池兼容和電磁干擾等,系統(tǒng)采用DC-DC轉換芯片LM1117將5 V的電壓轉換成1.3 V、2.5 V、3.3 V后供系統(tǒng)使用。采用復位芯片MAX811產生的復位信號,既能保證上電復位的時間,又能保留手動復位的特點。時鐘電路為系統(tǒng)提供工作時鐘,主時鐘采用12 MHz晶振作為時鐘源,RTC時鐘采用32.768 kHz晶振作為時鐘源。通過JTAG接口,可以訪問芯片內部的所有部件,是實現系統(tǒng)開發(fā)、調試的高效手段。為了減小系統(tǒng)體積,采用10針簡化的JTAG接口,其接口電路如圖3所示。
SDRAM存儲器選擇Samsung公司的K4S561632E-UC75,其存儲容量為32 MB,具有存取速度快、成本低廉的特點,主要用來存放執(zhí)行代碼和變量,是系統(tǒng)啟動之后主要進行存取操作的存儲器。Flash存儲器選擇Samsung公司的K9F1208U0CNAND Flash存儲器,其存儲容量為64 MB,可以擦寫一百多萬次,具有很長的使用壽命,把啟動程序、內核代碼等固化到Flash閃存中能加速系統(tǒng)的啟動、提高系統(tǒng)的穩(wěn)定性和可靠性。
3.2 音頻采集與處理模塊
該模塊采用Philips公司生產的音頻芯片UDA1341TS,它支持I2S數據總線格式,且具有低功耗、低電壓及DSP語音功能等特征。I2S(Inte grate Interfaceof sound)是Philips公司提出的串行數字音頻總線協(xié)議,音頻數據與控制信號、時鐘信號分開傳輸,避免了由時鐘帶來的抖動問題,因此系統(tǒng)中可省略消除抖動的器件。
音頻芯片與主控芯片的連接如圖4所示。I2S音頻接口包括5根信號線,其中音頻模塊的同步時鐘CDCLK由S3C2440A提供,該時鐘控制音頻的A/D、D/A采樣速率。串行時鐘SCLK,也叫位時鐘(BCLK),即每一個SCLK脈沖對應一位數字音頻數據。幀時鐘LRCK用于左有聲道的切換,LRCK為1表示正在傳輸的是左聲道的數據,為0則表示正在傳輸的是右聲道的數據。DATAI是串行數據輸入信號線,DATAO是串行數據輸出信號線,所傳輸的音頻數據用二進制補碼表示。L3總線接口包括3根信號線:L3MODE/GPB2是微處理器接口模式信號線;L3CLOCK/GPB4是微處理器接口時鐘信號線;L3DATA/GPB3是微處理器接口數據線。L3總線接口主要用于傳輸控制信號,相當于混音器控制接口,可以調節(jié)輸入/輸出音頻信號的音量、低音提升、控制去加重等。
[!--empirenews.page--]
3.3 IDE硬盤控制模塊
IDE接口是硬盤和光驅普遍使用的外部接口,接口采用16位數據總線并行傳送,體積小、速度快,兼容性強。IDE接口主要有可編程輸入輸出(Programming Input Output,PIO)和直接內存訪問(Direct Mcmory Access,DMA)兩種傳輸模式。PIO模式占用大量的系統(tǒng)資源,數據傳輸速率較低;DMA模式需要額外的驅動程序或設置,系統(tǒng)資源占用少、執(zhí)行效率較高。本設計選擇DMA模式。
S3C2440A與硬盤接口如圖5所示。其接口信號分為片選信號、數據信號和控制信號3個部分。硬盤上寄存器分為兩組,分別由/CS0和/ CS1選中其中的一組,A0~A2引腳用于組內寄存器尋址,包括數據寄存器、錯誤寄存器、扇區(qū)計數器、扇區(qū)號寄存器、低柱面號寄存器、高柱面寄存器、狀態(tài)寄存器和命令寄存器。數據線D0~D15用于數據的雙向傳輸。/DIOR、/DIOW是讀寫控制信號;/Reset是硬盤復位信號;DMARQ(DMA請求信號)和/DMACK(DMA應答信號)是專用于DMA模式的信號。
4 系統(tǒng)軟件實現
4.1 語音數據的采集
語音采集部分主要是完成UDA1341TS驅動程序的編寫,其初始化相關代碼如下:
端口初始化包括L3總線接口和I2S接口的設置,首先將與L3接口相連的通用I/O口GPB2、GPB3、GPB4設置為輸出模式,然后設置與I2S控制器輸出信號相關的GPIO引腳,將GPE0~GPE4這5個引腳設置為I2S接口的信號模式。UDA1341TS芯片初始化部分包括L3接口時序和協(xié)議的模擬,完成采樣速率、數據格式等參數的設置。系統(tǒng)采樣速率為8 kHz,使用時鐘為384 fs,數據輸入格式設置為MSB-Justifled模式。接下來通過“audio_init_dma()”申請DMA通道,輸出音頻緩沖區(qū)的DMA通道設為通道2,輸入音頻緩沖區(qū)的DMA通道設為通道1。若初始化失敗會返網相應的錯誤標志,初始化成功后方可進行后續(xù)操作。
4,2 IDE接口函數
硬盤驅動程序實現分為設備初始化、打開設備、設備I/O操作和釋放設備等幾部分。要完成硬盤數據交換的工作,就需要對寄存器進行頻繁的讀寫操作,為了方便在程序中的調用,把這些和硬件操作密切相關的操作都寫成了接口函數,其函數說明略——編者注。
4.3 系統(tǒng)主程序流程
主進程開始后首先初始化采樣參數,包括采樣速率、采樣點數、數據存儲格式及采樣通道,若初始化不成功會返回相應的錯誤標志,并作出相應的出錯處理,成功后可繼續(xù)下一步操作。然后通過鍵值判斷數據的存儲區(qū)是選擇Flash還是選擇硬盤,并初始化相應的存儲區(qū),這是保證系統(tǒng)在沒有外擴硬盤的情況下也能正常運行,只不過是數據存儲量較小而已;若選擇操作硬盤,但硬盤未連接,仍然會返回相應的錯誤標志,并進入出錯處理函數繼續(xù)執(zhí)行。接下來根據鍵值判斷是否進行壓縮處理,若進行壓縮處理,則相應的編解碼標志置位;根據該標志確定是否啟動編解碼進程,即系統(tǒng)能存儲未壓縮的數據,也能存儲壓縮后的數據,可以根據需要進行適當的選擇。啟動A/D轉換進程并進行語音數據的存儲,相當于錄音的過程;數據存儲完成后,即錄音結束后,啟動D/A轉換進程進行語音播放。錄音和播放可以同時進行,為了測試方便,這里把這兩個過程分離開來。
總的來說,系統(tǒng)主進程創(chuàng)建了A/D、D/A轉換進程和編解碼進程,結合Linux的共享機制和進程間通信等手段,實現了語音信號的采集、壓縮、存儲、回放等環(huán)節(jié)。
系統(tǒng)主程序流程圖略——編者注。
[!--empirenews.page--]
5 系統(tǒng)測試與結果分析
系統(tǒng)測試內容主要包括語音質量、語音存儲時長、語音壓縮效率三個方面。語音質量是指經傳輸、處理后音頻信號的保真度,是衡量語音編碼算法優(yōu)劣的關鍵指標。其評價方法分為主觀評定和客觀評定兩類。系統(tǒng)采用的主觀評定方法是平均意見得分(Mean Opinion Score,MOS),即以主觀打分來度量,其評價標準分為5個等級,MOS評價標準如表2所列??陀^評定選擇信噪比為評價指標,信噪比(Signal Noise Ratio,SNR)定義為信號與量化噪聲的方差的比值,計算公式為:
其中分別為信號方差和噪聲方差。通過測試系統(tǒng)的主觀評價指標MOS可以達到3.8分,接近于電話語音質量,與原始語音的區(qū)別不明顯;系統(tǒng)的客觀評價指標SNR為58 dB,噪聲的影響在可以接受的范圍內。語音時長的統(tǒng)計,依賴于擴展IDE硬盤的容量,測試選擇3G容量的硬盤;記錄未經壓縮的語音數據為750個小時,而記錄壓縮后的語音數據可達7500多個小時;可見語音壓縮的效率可以達到10多倍,已達到理想的效果。