基于Mini2440的低带宽语音通信系统
2011-09-04章坚武
沈 磊,章坚武
(杭州电子科技大学通信工程学院,浙江杭州310018)
0 引言
语音压缩技术是现代通信中最基本、最重要的技术之一,随着信道带宽资源越来越宝贵,对语音压缩质量的要求也随之提高,但如何保持高品质的语音质量与实现低速率传输是必须解决的问题[1]。AMBE-2000是美国DVSI公司对MBE(多带激励)算法作改进后,得到拥有专利的语音压缩算法即AMBE算法,并集成到DSP芯片中而制成的语音压缩专用芯片[2、3]。该芯片具有强的性能,合成语音质量优于相同码率的其它压缩算法。本文利用处理器为三星的S3C2440的Mini2440开发板,完成了AMBE-2000的接口电路设计,内核驱动的编写等,实现了通过有线局域网进行点对点的低速率实时通信,达到了设计的目的。
1 系统设计实现
1.1 系统结构图及设计基本原理
基于MINI2440平台的系统总体的框图如图1所示。其通信的终端主要就由声码器电路、主控制电路和网络收发模块3部分组成。声码器电路中语音编码译码器采用了AMBE-2000,A/D(D/A)转换采用了AD公司的AD73311,AMBE-2000与A/D芯片之间是个标准16位的串行SPI接口,进行PCM数据交换,主控制器采用了三星S3C2440A处理器,网络收发模块采用了Mini2440开发板上自带的DM9000网卡芯片,它可以自适应10M/100M网路,连接头用RJ45,使用普通的网线即可将开发板与路由器相连。用户接口电路主要由NSC制造的LM音响功放LM286实现。
图1 系统总体框图
1.2 硬件设计实现
硬件开发平台Mini2440的主控制芯片为samsung S3C2440A,主频400MHz,最高可达到533MHz,128M Nand Flash和2M Nor Flash,掉电非易失,带有TFT真彩液晶屏和触摸屏,Mini2440开发板上ARM9处理器中运行的内核为Linux2.6.29。在本系统中,处理器S3C2440A作为主控制器主要完成总体控制、读写语音编译码器和网络数据传输。
本设计的主要实现芯片AMBE-2000压缩率可在2.0k~9.6kb/s范围内由软件进行调节,应用十分灵活;有语音激活检测,插入舒适噪声功能;能检测和产生双音多频信号;前向纠错功能。
主芯片AMBE-2000与外部的接口按功能有:与主控制器相连的接口即接收发出压缩语音信号的信道接口,它包括CHAN_TX_DATA、CHAN_TX_CLK、CHAN_TX_STRB分别是编码后的数据输出口、及对应得时钟信号输入口、同步信号输入口。CHAN_RX_DATA、CHAN_RX_CLK、CHAN_RX_STRB分别是待解码的数据输入口、对应的时钟信号输入口、同步信号输入口还有一个EPR一帧就绪标识输出口;与A/D-D/A相连的接口即接收发送数字语音信号的接口,它包括了CODE_TX_DATA、CODE_TX_CLK、CODE_TX_STRB分别是由主芯片解码后得到的PCM数据输出到D/A芯片的输出口、及对应的时钟信号输出口和帧同步信号输出口,CODE_RX_DATA、CODE_RX_CLK、CODE_RX_STRB则接收A/D的信号口。AMBE-2000与主机和A/D-D/A的接口图如图2所示。
图2 AMBE-2000与主机和A/D-D/A的接口图
图2 中AMBE-2000与主机的接口7条信号线中时钟线短接,再分别连接6个I/O口。处理器S3C2440用了GPF口,配置为通用的I/O口与AMBE-2000通信,数据口采样频率为8KHz数据流。一些模式控制管脚用拨码开关进行硬件控制,可实现的软件或硬件来设置芯片状态。
AD-DA芯片的好坏对于实现优良语音质量的系统起主导作用,此次选择了AD公司的AD73311使用+3.3V和+5V双电源供电,具有高的信噪比,且内部有一个16位的A/D-D/A转换通道,保证了高语音质量,采样频率最高可达64kHz且编程可变。AD73311与声码器的接口是SPI串行口,接口关系图如图2中。需将AMBE-2000的CODEC_SEL0、CODEC_SEL1管脚由硬件至10b。此时一上电,声码芯片送控制字到寄存器,用来进行参数的设置、模数-数模的控制、设备电源的控制等。AMBE-2000与AD73311芯片的主时钟为16.384MHz,有一个外部的有源晶振提供。有源电压为5V。
2 软件实现
本设计在软件实现方面有两部分:一是底层字符设备驱动的编写与实现;二是在应用层上调用底层API函数与AMBE-2000进行通信,再将数据包经过简单的封装通过网卡芯片在局域网上进行传输。
2.1 嵌入式驱动程序的设计
在嵌入式系统上,很多设备被抽象为设备文件供应用程序调用。就像普通文件一样也可对设备文件进行打开、关闭、读写等系统调用操作。这种访问接口的统一使很多应用程序可以同时支持对普通文件和设备文件的操作。这种通过设备文件访问的设备分为两类:字符设备和块设备。字符设备的特点是支持基本的读写操作,一般没有读写位置的概念,数据的输入输出在时间上是顺序的。块设备与字符设备最大的不同是数据的读写以块为单位,且有储存位置的概念。显然针对AMBE-2000的设备驱动,由于其读写的实时性以及数据量少就采用了字符设备的形式编写。
首先具体讲下主机接收AMBE-2000数据的接口时序关系。AMBE-2000与主机的接口选择了主动有格式的模式,数据选通信号由声码器提供。应注意的一点是只有有时钟信号的前提下在数据线上才会有数据。所以在有时钟信号的输入下,AMBE-2000每20ms编码器准备好一个数据包,解码器收到一个数据包,改数据包由24个16bit字组成,其中前12个字为组成头是一些ID状态、控制信息,后12个字为数据语音信息。控制器读数据包的过程,主机每20ms接收一个数据包,AMBE-2000的EPR引脚有一个下降跳变标志有一个数据包要输出。驱动中读数据的时序编写API函数过程具体如下:(1)等待略小于20ms的时间;(2)检测AMBE-2000的CHAN_TX_STRB使能引脚,当该引脚为高电平CHAN_TX_DATA引脚上的数据;(3)判断数据包第一个字是否为0x13ec如果不是则表示该数据帧不是有用的数据丢弃,再继续执行(2);(4)如果是0x13ec则继续读取剩下的23个字。读数据的时序图如图3所示:
图3 主机读取数据的时序图
主机向AMBE-2000发送数据跟接收数据过程基本一致,区别在于写使能信号线CHAN_RX_STRB上的脉冲信号由主机提供。相对于读数据时序,主机写时序的时候就比较灵活且比较简单。在确保每隔20ms的前提下,可以灵活的选择时隙发送数据来达到协调的读写数据,从而降低了cpu的资源消耗,提高了系统的效率。读写数据分别在API函数size_t read(int fd,char*buf,size_t count),size_t write(int fd,const char*buf,size_t count)中实现。在内核中调用vmalloc函数,在内核空间分配了一个5k大小的区域用于缓存数据。由于声码器每20ms发送接收一个数据包,每个数据包有48个字节,1s内传输约2.5kb,所以该缓存区可以容下1s的数据。在读写函数中用到了poll/select机制实现读写阻塞,若读缓存区为空或写缓存区满了就进入阻塞状态,等待驱动硬件动作来唤醒。
字符驱动编好之后,在drivers/char/Kconfig字符配置文件中加入改驱动的选项。
增加了上述信息后在内核配置选项中显示了添加了的AMBE-2000字符驱动,并选择该选项。同时内核配置的时候将网卡驱动也配置好,一般默认选上了。重新编译内核,将内核镜像烧入处理器S3C2410的Flash,系统即可运行。
2.2 应用层上编程实现
在应用层主要任务为在语音通信链路建立以后,从本端的AMBE-2000读取数据通过局域网发送到对端,同时把从对端接收的数据发到解码芯片解码播放。采用Qt/E的UI开发框架编写软件界面如图4所示,主要功能是实现目标IP地址的输入,呼叫的发起及挂断;采用Qt/E的网络模块实现局域网中UDP数据的发送及接收;继承Qt/E的QThread类实现录音线程ReadThread、放音线程WriteThread的多线程编程。从示波器中观察得到的测试数据波形如图5、6所示。图5中,上下两波形分别为数据CHAN_TX_DATA线上的时序波形和接收时钟CHAN_TX_CLK线上的波形。从此数据波形可见数据线上是有数据在传输的且数据包的第一个字为0x13ec,是一个有效的数据帧;在图6中上下两波形分别为数据接收使能CHAN_TX_STRB线上的波形和编码一包就绪标志EPR线上的波形,从图中可见每隔20ms有一包数据帧就绪。可见声码器芯片已正常工作,语音数据通过局域网传输,实现了在两个终端之间进行全双工、低速率通信。
图5 编码数据帧波形
图6 编码包间距
3 结束语
在处理器为S3C2440的Mini2440开发平台上设计开发了基于AMBE-2000声码器为核心的低带宽语音通信系统,可用于各种低速率条件下的实时全双工的通信。在Mini2440开发板上还可以结合视频流进行音视频一起传输,达到实时通信。应用前景广阔。
[1] 邱毅凌.现代嵌入式系统开发专案实务[M].北京:电子工业出版社,2009:67-79.
[2] 陈媛.一种基于AMBE-2000的语音系统的设计与实现[J].现代电子技术,2010,(16):205-207.
[3] 赵叶星,韦志棉.基于AMBE-2000的数字话音传输系统[J].无线电工程,2007,37(7):30-31.
[4] 孙天泽,袁文菊.嵌入式设计及Linux驱动开发指南[M].北京:电子工业出版社,2009:199-208.
[5] 石云.基于AMBE-2000的语音通讯系统[J].山西电子技术,2008,(2):47-48.