摘 要:针对当前语音网络传输系统中存在的环境噪声、回波、设备工作不稳定等问题,提出了一种新型的嵌入式语音网络传输系统设计方案。该系统以ARM9嵌入式处理器S3C2410为核心,ARMLinux为实时操作系统,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.