摘 要: 針對當(dāng)前語音網(wǎng)絡(luò)傳輸系統(tǒng)中存在的環(huán)境噪聲、回波,、設(shè)備工作不穩(wěn)定等問題,提出了一種新型的嵌入式語音網(wǎng)絡(luò)傳輸系統(tǒng)設(shè)計方案,。該系統(tǒng)以ARM9嵌入式處理器S3C2410為核心,,ARM Linux為實時操作系統(tǒng),CS8900為網(wǎng)絡(luò)傳輸芯片,,UDA1341為音頻編解碼芯片,使用了一種新型的芯片FM1182進(jìn)行語音處理,,能夠很好地實現(xiàn)噪聲抑制和回波抵消。給出了相關(guān)硬件的電路設(shè)計方案,,同時介紹了軟件實現(xiàn)流程,,并詳細(xì)介紹了語音緩沖區(qū)的算法。
關(guān)鍵詞: 嵌入式系統(tǒng),; UDA1341,; FM1182; 語音傳輸,; 多線程
近年來,,嵌入式音頻系統(tǒng)廣泛應(yīng)用于手機(jī)、PDA,、MP3,、對講系統(tǒng)等消費(fèi)電子產(chǎn)品。如今對嵌入式音頻系統(tǒng)的要求不僅僅只是完成通話功能,,對語音傳輸?shù)那逦?、實時性、抗干擾性以及系統(tǒng)的穩(wěn)定性、安全性也提出了嚴(yán)格的要求[1],。
本設(shè)計應(yīng)用Samsung公司的S3C2410微處理器,,Philips公司的UDA1341音頻編解碼芯片以及Fortemedia公司的FM1182語音處理器,結(jié)合SDRAM,、Flash存儲電路,、CS8900網(wǎng)絡(luò)傳輸芯片等其他外圍電路構(gòu)成了一個嵌入式網(wǎng)絡(luò)語音傳輸系統(tǒng)。該系統(tǒng)語音數(shù)據(jù)的采集,、編解碼,、網(wǎng)絡(luò)數(shù)據(jù)包傳輸、播放等過程均為Linux下的多線程操作,,實現(xiàn)了網(wǎng)絡(luò)實時傳輸功能,。該系統(tǒng)還添加了一個加速度傳感器的報警電路,防止系統(tǒng)設(shè)備被移動,。該系統(tǒng)設(shè)計特別適用于公共場所的語音求助,,如銀行的ATM柜員機(jī)、火車站等,。
1 系統(tǒng)總體設(shè)計和工作流程
本語音網(wǎng)絡(luò)傳輸系統(tǒng)包括ARM9處理器S3C2410控制模塊,,網(wǎng)絡(luò)傳輸模塊(包括網(wǎng)絡(luò)傳輸芯片CS8900、網(wǎng)卡變壓器和網(wǎng)絡(luò)接口等),,音頻編解碼模塊UDA1341,,語音處理模塊FM1182,存儲器設(shè)備和其他外圍設(shè)備(包括數(shù)據(jù)緩沖電路,、報警電路,、RS232串口電路、JTAG接口等),,其結(jié)構(gòu)框圖如圖1所示,。
ARM9處理器為整個系統(tǒng)的核心,控制著其他模塊的工作運(yùn)行,。系統(tǒng)通過網(wǎng)口與因特網(wǎng)連接,,連入遠(yuǎn)端中心,通過網(wǎng)絡(luò)進(jìn)行語音數(shù)據(jù)包的傳送和接收,。語音處理模塊FM1182負(fù)責(zé)麥克風(fēng)錄入聲音和音箱設(shè)備播放語音,,并且通過線輸入線輸出與語音編解碼芯片UDA1341相連,進(jìn)行語音數(shù)據(jù)模擬傳輸,。語音編解碼芯片通過IIS總線與ARM9處理相連,,語音格式采用線性PCM編碼。
整個系統(tǒng)的運(yùn)行流程如下:FM1182的麥克風(fēng)錄音后,,語音數(shù)據(jù)通過線輸出送入UDA1341,,線性PCM編碼后通過IIS總線送入ARM9處理器,,然后生成網(wǎng)絡(luò)數(shù)據(jù)包,經(jīng)過因特網(wǎng)向遠(yuǎn)端傳送,;從因特網(wǎng)接收到數(shù)據(jù)包后,,經(jīng)過IIS總線送入UDA1341進(jìn)行解碼,然后通過線輸入將語音數(shù)據(jù)送入FM1182,,最后通過音箱進(jìn)行放音,。
2 系統(tǒng)硬件設(shè)計
系統(tǒng)硬件主要分為控制模塊、音頻編解碼模塊,、存儲模塊,、網(wǎng)絡(luò)傳輸模塊和語音處理模塊5個模塊。
2.1 控制模塊
采用Samsung公司的S3C2410微處理器,。S3C2410處理器是Samsung公司基于ARM公司的ARM920T處理器核,,采用0.18 μm制造工藝的32 bit微控制器。該處理器擁有:獨立的16 KB指令Cache和16 KB數(shù)據(jù)Cache,,MMU,,支持TFT的LCD控制器,NAND閃存控制器,,3路UART,,4路DMA,4路帶PWM的Timer,,I/O口,,RTC,8路10 bit ADC,,Touch Screen接口,IIC-BUS 接口,,IIS-BUS 接口,,2個USB主機(jī),1個USB設(shè)備,,SD主機(jī)和MMC接口,,2路SPI。S3C2410處理器最高可運(yùn)行在203 MHz[2],。此外,,為了調(diào)試系統(tǒng),還增加RS232串口電路和JTAG調(diào)試接口,。
2.2 音頻編解碼模塊
采用Philips公司的UDA1341音頻編解碼芯片,。UDA1341提供2組音頻信號輸入線、1組音頻信號輸出線,、1組IIS總線接口信號線和1組L3總線,。UDA1341通過IIS-BUS接口與S3C2410傳輸音頻數(shù)據(jù),控制數(shù)據(jù)通過L3接口傳輸。L3總線接口包括微處理器串行數(shù)據(jù)線L3DATA,、微處理器接口模式選擇線L3MODE和微處理器接口串行時鐘線L3CLOCK,。當(dāng)UDA1341工作在微處理器輸入模式時,微處理器通過L3總線對UDA1341中的音頻處理參數(shù)和系統(tǒng)控制參數(shù)進(jìn)行配置,。S3C2410中沒有L3總線專用接口,,電路中使用I/O口連接L3總線。IIS總線接口信號線包括位時鐘輸入BCK,、字選擇輸入WS,、數(shù)據(jù)輸入DATAI、數(shù)據(jù)輸出DATA0和音頻系統(tǒng)時鐘SYSCLK信號線,。IIS總線接口對FIFO存取提供DMA傳輸模式代替中斷模式,,它可以同時發(fā)送數(shù)據(jù)和接收數(shù)據(jù),也可以只發(fā)或只收[3-4],。
2.3 存儲模塊
存儲模塊分為Nand Flash和SDRAM兩部分,,包括一片64 M×8 bit的Flash(K9F1208)和兩片4 M×16 bit×4 Banks的SDRAM(K4S561632C)。S3C2410芯片本身提供了SDRAM接口,只須對存儲器控制器相關(guān)的寄存器進(jìn)行適當(dāng)?shù)呐渲?。系統(tǒng)上電或復(fù)位后從Flash中運(yùn)行Boot loader, 由Boot loader初始化硬件并將μCLinux 拷貝到SDRAM中運(yùn)行,。
2.4 網(wǎng)絡(luò)傳輸模塊
網(wǎng)絡(luò)傳輸模塊包括以太網(wǎng)接口芯片CS8900A、網(wǎng)絡(luò)指示燈,、網(wǎng)絡(luò)變壓器和RJ45接口等,,用于實現(xiàn)本系統(tǒng)設(shè)計與局域網(wǎng)之間的數(shù)據(jù)交換。硬件電路使用的芯片除了處理器S3C2410和以太網(wǎng)芯片CS8900A,,還有網(wǎng)卡變壓器,。CS8900A通過數(shù)據(jù)總線和地址總線S3C2410處理器相連接。為了保證數(shù)據(jù)傳輸?shù)姆€(wěn)定性,,在S3C2410和CS8900A之間增加了數(shù)據(jù)緩沖芯片SN74LVTH162245,。
2.5 語音處理模塊
FM1182語音處理器是富迪科技公司最新推出的低功耗,高性能的芯片。FM1182提升AEC性能-60 dB (聲學(xué)回聲消除), 增強(qiáng)噪聲抑制能力,。通過內(nèi)建支持SAM(迷你陣列麥克風(fēng))技術(shù), 采用兩個幾乎靠在一起的麥克風(fēng)可以達(dá)到拾音束形成的效果[5],。
本設(shè)計中,F(xiàn)M1182通過其UART口連接到S3C2410,,微處理器通過串口對FM1182進(jìn)行功能配置,。FM1182通過線路輸出LINEOUT和線路輸入LINEIN分別與UDA1341的VIN1和VOUT相連,由于傳輸?shù)臑槟M語音信號,因而電路設(shè)計中LINEOUT和LINEIN與UDA1341連接的線應(yīng)盡量短,以免受到電磁干擾,。FM1182的麥克風(fēng)陣列電路使用一個全向麥克風(fēng),,一個定向麥克風(fēng),形成麥克風(fēng)拾音束,。FM1182的SPEAK接口通過功放連接一個音箱進(jìn)行語音播放,。FM1182,、UDA1341和S3C2410的連接圖如圖2所示。
3 系統(tǒng)軟件設(shè)計
本系統(tǒng)采用的是開放源代碼的Linux操作系統(tǒng),,允許任何人獲取并修改Linux的源碼,。在配置Linux的應(yīng)用程序時,可以選擇加載然后根據(jù)用戶的需要設(shè)計這些軟件的配置文件從而實現(xiàn)系統(tǒng)的各項功能,。嵌入式Linux操作系統(tǒng)主要由三個基本部分組成:引導(dǎo)程序,、Linux內(nèi)核(由內(nèi)存管理、進(jìn)程管理和中斷處理等構(gòu)成)和文件系統(tǒng),。系統(tǒng)軟件設(shè)計部分主要包括操作系統(tǒng)的裁剪和編譯,、驅(qū)動程序的編寫和主程序的設(shè)計。
3.1 軟件體系結(jié)構(gòu)
系統(tǒng)的軟件設(shè)計架構(gòu)從下而上分為硬件驅(qū)動層,、操作系統(tǒng)層,、網(wǎng)絡(luò)協(xié)議層和應(yīng)用程序?qū)印S布?qū)動層主要包括CS8900和UDA1341的驅(qū)動程序設(shè)計,;操作系統(tǒng)層移植了ARM Linux的操作系統(tǒng)內(nèi)核,;網(wǎng)絡(luò)協(xié)議層移植了TCP/IP的網(wǎng)絡(luò)通信協(xié)議;應(yīng)用程序?qū)釉谇度胧絃inux操作系統(tǒng)上運(yùn)行應(yīng)用程序,。
Linux下網(wǎng)絡(luò)數(shù)據(jù)傳輸主要利用套接字socket接口進(jìn)行,。套接字socket是一種常用的進(jìn)程間通信機(jī)制,通過它不僅能實現(xiàn)本地機(jī)器上的進(jìn)程間通信,,而且通過網(wǎng)絡(luò)能夠在不同的機(jī)器上的進(jìn)程間進(jìn)行通信,。常用的套接字socket類型主要有兩種:對應(yīng)TCP服務(wù)的流式套接字socket和對應(yīng)UDP服務(wù)的數(shù)據(jù)報式套接字socket[6]。傳統(tǒng)的語音傳輸一般采用UDP通信協(xié)議,,即不保證網(wǎng)絡(luò)數(shù)據(jù)包是否在網(wǎng)絡(luò)中丟失,。針對此語音網(wǎng)絡(luò)傳輸系統(tǒng)的應(yīng)用背景,即主要應(yīng)用于銀行的ATM柜員機(jī)的對講系統(tǒng),,要保證語音信號在傳輸過程中不丟失,,所以對經(jīng)過編碼后的語音信號采用TCP/IP協(xié)議進(jìn)行傳輸。本系統(tǒng)的基于TCP協(xié)議的通信流程圖如圖3所示,。
3.2 系統(tǒng)主程序的設(shè)計
系統(tǒng)的主程序分別運(yùn)行在PC機(jī)和ARM嵌入式系統(tǒng)上,主程序建立通信過程如下:
PC端首先要向ARM端發(fā)起TCP連接,,PC端接收到來自ARM的TCP連接請求后,,驗證ARM端發(fā)送過來的密碼。密碼驗證通過后,,建立TCP連接,,然后PC機(jī)與ARM嵌入式系統(tǒng)進(jìn)行雙向語音傳輸。同時,,當(dāng)ARM有中斷請求信號時,,TCP連接中斷,。PC端主程序的流程圖如圖4(a)所示。
ARM端語音網(wǎng)絡(luò)傳輸系統(tǒng)設(shè)備上電后,,首先對硬件設(shè)備進(jìn)行初始化操作,,然后ARM向PC端發(fā)起TCP連接。TCP連接過程中,,首先打開MAC配置文件,,然后設(shè)置ARM的IP、子網(wǎng)掩碼,、服務(wù)器的IP,、監(jiān)聽端口,以及密碼驗證,、設(shè)置ARM端的用戶名,。以上配置成功后再向服務(wù)器發(fā)出連接請求。當(dāng)ARM端與PC端建立了網(wǎng)絡(luò)連接之后,,PC端開始和ARM端進(jìn)行網(wǎng)絡(luò)語音傳輸 ,。ARM端主程序的流程圖如圖4(b)所示。
3.3 語音緩沖區(qū)的算法設(shè)計
由于在網(wǎng)絡(luò)協(xié)議層中采用TCP協(xié)議進(jìn)行語音網(wǎng)絡(luò)數(shù)據(jù)包的傳送,,網(wǎng)絡(luò)環(huán)境容易產(chǎn)生變化,,因而,相比較UDP協(xié)議,,使用TCP協(xié)議在網(wǎng)絡(luò)傳輸中會產(chǎn)生一些時延,。由于網(wǎng)絡(luò)時延不可避免,如果要取得良好的通話效果,,必須保證語音在播放時不會產(chǎn)生斷斷續(xù)續(xù)的情形,。基于以上情況,,可以在語音信號播放前,,設(shè)置一個緩沖區(qū)來解決這個問題。但在引入緩沖區(qū)的同時,,也導(dǎo)致了語音傳輸時間的滯后,。緩沖區(qū)太小,無法克服網(wǎng)絡(luò)時延的影響,。緩沖區(qū)太大,,會嚴(yán)重影響語音傳輸?shù)膶崟r性。
NGB(下一代廣播電視網(wǎng))的語音通信最大時間延遲不應(yīng)超過150 ms,,超過這個極限后,,人耳聽到的聲音將會覺得無法接受[7]。因而緩沖區(qū)中數(shù)據(jù)包的總傳輸時間不應(yīng)超過150 ms,。ARM端與PC端(監(jiān)控中心)通信時,,采取TCP協(xié)議,。所有數(shù)據(jù)以包的形式傳輸。每個包的第一個字節(jié)是命令字,,后面緊跟著若干字節(jié)(通過命令字能夠確定出后面有多少字節(jié)),,最短的包只包含命令字,即只有一個字節(jié),;最長的語音數(shù)據(jù)包,,有769 B。由于采取TCP協(xié)議,,包中的每一個字節(jié)都能夠確保按序接收,。
在實現(xiàn)語音數(shù)據(jù)傳輸時,使用最長的語音數(shù)據(jù)包,,即768 B,,加上第一個字節(jié)的命令字,共769 B,。語音編碼方式采取線性PCM編碼,,每一個PCM碼共32 B。由于聲卡的讀取和播放的采樣率均為8 kHz,,由此可得每收發(fā)一個數(shù)據(jù)包需要時間為:
(768×8/32)/8 000=24 ms
可以在緩沖區(qū)中存放5個TCP語音數(shù)據(jù)包,,這樣總的時間延時為:
24×5=120 ms<150 ms
故滿足標(biāo)準(zhǔn)。
語音緩沖區(qū)的填充數(shù)據(jù)和播放數(shù)據(jù)的流程圖如圖5所示,,其算法的設(shè)計如下:
(1)在程序啟動后,,先將緩沖區(qū)中裝滿數(shù)據(jù)后,設(shè)置好播放標(biāo)志位,、填充指針和播放指針,,然后從數(shù)據(jù)包0開始依次循環(huán)通過聲卡播放接收到的聲音數(shù)據(jù),同時,,填充指針依次循環(huán)后移,向語音緩沖區(qū)填充語音數(shù)據(jù)包,。
(2)聲卡開始播放語音后,只要緩沖區(qū)中數(shù)據(jù)不為空,,就正常播放數(shù)據(jù),。
(3)如果在播放過程中緩沖區(qū)中沒有數(shù)據(jù),則將播放標(biāo)志位置零,,并停止播放,,然后重新開始。
本文提出了一種基于UDA1341和FM1182的嵌入式語音網(wǎng)絡(luò)傳輸系統(tǒng)的設(shè)計方法,該方案以ARM9的S3C2410為核心處理器,, 利用UDA1341和FM1182構(gòu)成了語音系統(tǒng),通過CS8900網(wǎng)絡(luò)芯片進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)傳輸,,基于嵌入式Linux操作系統(tǒng),,實現(xiàn)了遠(yuǎn)程語音網(wǎng)絡(luò)數(shù)據(jù)傳輸,。實驗表明,該系統(tǒng)可以很好地實現(xiàn)語音數(shù)據(jù)傳輸功能,,并可以對環(huán)境中的噪聲進(jìn)行有效地抑制,,也可以很好地實現(xiàn)回波抵消,該設(shè)計工作穩(wěn)定,,非常適合ATM柜員機(jī)等公共場所旁,,用于信息求助對講系統(tǒng)。
參考文獻(xiàn)
[1] 智強(qiáng),李鵬,董明,等. 基于硬件加速模塊的嵌入式語音識別系統(tǒng)解決方案[J].電子技術(shù)應(yīng)用,2008,,34(8):
[2] Samsung Electronics. S3C2410A-200 MHz & 266 MHz 32-Bit RISC Microprocessor. USER’S MANUAL,Revision 1.0,2004.
[3] 李巖,王建衛(wèi),紀(jì)穎,等.基于ARM嵌入式μCLinux系統(tǒng)原理及應(yīng)用[M].北京:清華大學(xué)出版社,2009.
[4] Philips Semiconductor. UDA1341TS Economy audio CODEC for Minidisc (MD) home stereo and portable applications, 1998.12.
[5] MEDIA F. FM1182E Low-Power Voice Processor. Preliminary Data Sheet V2.0, 2008.9.
[6] 楊水清,張劍,施云飛,等.ARM嵌入式Linux系統(tǒng)開發(fā)技術(shù)詳解[M].北京:電子工業(yè)出版社,2008.11.
[7] 余少波. NGB的語音通信的最大延遲應(yīng)該小于150 ms[EB/OL].2010-8-9. http://tech.c114.net/166/a531316.html.