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