基于嵌入式Linux的网络语音平台的设计与构建
FXO部分电路主要采用SILICON LABS公司的SI3016和SI3021。SI3016为一个DAA电路,能为线路上的信号提供光电隔离和2/4线转换功能,以满足编解码与数字交换对四线传输的要求。并且能够实现对线路上的振铃信号、呼叫方ID和极性反转检测等功能。SI3021一方面提供直接连接DSP的通信接口,另一方面也提供控制接口。电路可工作于On-Hook(电话线可供使用)和Off-Hook(电话线忙碌)这两种状态下,通过设定SI3021的引脚电平的高低来控制:为高表示处于On-Hook状态,可以接收或发起一个呼叫;为低表示处于Off-Hook状态,电话线忙碌。当线路上有振铃信号时通过引脚表示。并可以通过配置M1和M0脚来选定串行数据接口的工作模式。整个平台还配有CPLD电路,是为了控制各个电话接口,并协调各端口间的通信。
主处理器IXP421是INTEL公司IXP42x系列的网络处理器,它在VoIP应用方面具有自己的特点。如提供了两个高速同步串口HSS, 同时含有高速网络处理引擎NPE,在Xscale的配合下它可以实现DSP等高级数据处理的应用。并配有基于Xscale的DSP软件库,支持2~4路语音信号的处理。在网络处理方面,IXP421集成有10~100兆MAC,通过MII/RMII接口连接通用PHY芯片,并连至IP网络。
1.2 软件部分
软件可从功能上或驱动模块上划分,下面将从以上两个方面进行分析。
1.2.1 软件功能模块
从功能上可划分如图2所示的模块结构。
本文引用地址:http://www.amcfsurvey.com/article/152541.htm
其中DSR模块是IXP421进行底层语音数据处理的模块,它主要采用由INTEL提供的DSR(DSP software release)软件库。一方面,它与上层应用程序进行通信,传递数据或响应来自上层的控制消息。另一方面,它与底层接口进行通信与控制。
编码部分负责进行编码和对从HSS到IP接口的数据分组打包,提供对G.711等音频标准的支持,并提供有增益控制功能的自动等级控制ALC单元和区分背景噪声的VAD功能。并将多个语音帧合并成一个IP分组包。对语音包以特定的帧长进行压缩编码,压缩后的语音包送入网络处理单元。网络处理单元为语音添加包头、时标和其他信息后,把数据放在可变长的数据报或分组中,然后给每个数据报附带寻址和控制信息,并通过网络发送到目的地。
相对于解码部分负责把从IP网络接收的语音分组包进行打包并转成语音数据流发送至HSS接口。类似于编码部分,解码部分也包含G.711和G.729数据处理和ALC处理单元。不同的是其包含产生适当背景噪声的CNG单元、消除由于网络丢包而造成语音信息不完整问题的PLC单元和控制从IP网络到HSS接口数据传输节奏的JitterBuffer单元。
电话信号音监测模块负责监控300~3500Hz的电话信号音,如DTMF信号等。主要是采用快速傅立叶算法FFT来进行分析和判断。电话信号音产生模块则负责产生相应的电话信号音。而网络节点是连接HSS端口与编解码等部分的程序模块,它把需要从HSS端口发送的数据放入HSS发送缓冲区,或把需要从HSS端口接收的数据放入HSS接收缓冲区内。
1.2.2 状态机的结构
为了模拟通常状态下的电话机工作流程,需要相应地建立几种不同的状态,并实现不同状态的转换。一般通话双方有空闲、拨号、发送信令、回应、建立连接和断开连接等状态,故可以定义如下几个状态值:call_idel、call_dial、call_cancel、call_invite、call_ack、call_connect、call_bye等。例如用户摘机事件发生后会有中断产生,若该路终端目前的状态为call_ack时,表明该终端用户为被动接收者,且已接收到invite信令并等待用户摘机。故此时状态转为call_connect并进行相关处理。而当该路终端目前的状态不为call_ack时,表明该终端用户为主动呼叫者,准备拨号拨打电话。此时状态转为call_dial,话筒中产生等待音,DSR模块开始等待用户拨号。当用户结束拨号后状态转为call_invite并进行相关处理。大致流程如图3所示。
为了保证状态机能在不同的状态之间转换和方便控制管理各路话音通话的信息。还需要建立一些全局数据结构:
struct call_params{
unsigned char local_num;
unsigned char remote_num;
unsigned char local_addr;
unsigned char remote_addr;
unsigned char status;
};
用于保存当前网关中各路话音的配置参数,num表示该路通话的本地号码和对端号码,addr表示该路通话对应在DSR内所使用的本地和远端网络地址,status记录本地终端在该通话中处于状态机中的状态。设备在加电启动后,需要按步骤进行一系列的初始化工作。包括一些记录状态信息的全局变量,初始化SLIC接口、DSR模块、网络接口、信令处理模块并开启所需的监控线程,等待控制状态的变化。
1.2.3 软件驱动模块
因为网络语音底层平台使用嵌入式LINUX做为其操作系统,故需要划分如图4所示的几个模块并写出相应的驱动。
linux相关文章:linux教程
评论