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