毕业论文的主要内容
本论文是基本电话信令的实现、拨号、建立连接、来电接收、网络接口MAC帧的封装以及收发的软件设计,实现由摘机到挂机间的所有话机之间的数据收发控制,完成了电话信令,拨号信息等的传递外,主控程序设计、并把封装好的数据包按事先初始化的“电话号码”路由转发出去,与此同时还要监听网络上是否有目的地址是本机的数据包,若有也要以最小的延迟和丢包接收下来交给主控程序处理解码为模拟语音。最后用相应的仿真软件进行了仿真,分析并解决了仿真过程中出现的问题。在同组同学做好硬件后,再对硬件进行调试,并对调试过程中出现的一些问题进行分析,进而解决;最后是对这次毕业设计的一些总结。
系统总体设计方案
2.1 VoIP网络电话的特点
传统的电话网是以电路交换方式传输语音,所要求的传输宽带为64kbit/s。而所谓的VoIP是以IP分组交换网络为传输平台,对模拟的语音信号进行压缩、打包等一系列的特殊处理,使之可以采用无连接的UDP协议进行传输。
网络电话采用Internet接入,速度快,语音清晰。 全世界无任何漫游费,点对点通话,零话费不管您的通话对象是在美国、欧洲、香港……。还是任何一个城市,只要安装了宽带电话,两地之间通话费就为零话费,不受通话时间的限制。可以随身携带,即插即用安装简单实施方便接上宽带就可以打电话,拨打方式与普通电话完全一样,且连接速度快,语音清晰。 适合国际或国内商务旅游人士。特别适用于国际、国内长途或企业内部通讯(宽带电话之间通话,“零话费”)。 通信范围,网络覆盖全国各个城市,国际通达300多个国家和地区。
VOIP电话机是一种集合了拨号器与普通电话机的VOIP电话机,它让拨号器与电话机完美的结合在一起,大大减少了因为电话机、线路等原因造成的拨号器不匹配的问题,并大大减少客户投入,美化办公、家庭的桌面环境。无线中继是指固定电话通过无线中继,来达到拨打无线网络的效果,大大节省话费。 目前VoIP产品的研发已经逐步走向成熟,不过随着协议栈的不断推陈出新,给VoIP产品的研发带来了新的机遇和挑战。从最初的H.323和MGCP,到目前的SIP和MEGACO协议,表明市场要求产品的特点越来越丰富。并且随着竞争的激烈,成本必须越来越低才能适应市场的竞争。
2.2 总体设计
查有关资料得知,网络电话需要有语音处理单元、主控单元、网络控制单元[1][2]。分别完成数模转换、语音流控制、数据包收发以完成语音交换。所以把主要设计整体分为以下几个部分:硬件设计包括主控板的设计、网络接口的设计、控制接口的设计、拨号键盘的设计、显示结构的设计;软件开发包括软件结构设计、算法确定、底层驱动的开发和调试、基本电话信令的实现、拨号、建立连接、来电接收、网络接口MAC帧的封装以及收发等等,系统实现流程图如图2-1所示。
图2-1 系统实现流程图
总体的设计思路为以语音数据交换为中心展开。
具体语音流交换的实现如下:首先是用话筒采集模拟语音,将其送入PCM编解码芯片进行D/A转换,输出64Kb/s的八位串行数据流到AVR的usart串行通信口,AVR作为主控器将PCM码流进行一个缓存后,以片外DMA方式并行送到RTL8019的RAM里,等待封装成帧发送到局域网交换机,然后将8019里接收缓存器里的数据帧在AVR的控制下以并行的方式读入到AVR的1kRAM里,然后再用AVR的usart串行口以串行方式送给LC5480解码成模拟语音,模拟语音用喇叭放大发声,再回到语音采集阶段,如此反复。
2.3 系统方案的选择
1、方案一
这一方案是把语音数据交换核心放在了DMA模块,主控芯片只是主要对网卡和编解码芯片起一个协调作用。系统的工作流程如下:从话筒采集到模拟语音后交个PCM编解码器编码,然后直接串行送给DMA模块,再经串并转换后由网卡封装成帧后发送到局域网环境中,数据的接收是此过程的逆过程。通话过程的中的数据交换都是在DMA中进行的,DMA模块的主要作用在于匹配串并码流的速率,总体设计图如图2-2所示。
图2-2 方案一设计图
2、方案二
此方案从系统中去掉了DMA模块,把语音数据的交换中心放到了主控芯片上,充分利用主控芯片的处理能力。但因为主控单元选用的是8M晶振,每条指令的执行周期是0.125us,过长的数据处理指令会引起难以接受的数据丢失和语音延时,考虑到丢包和延时的参数,所以设计采用的是数据循环处理的方式,以计数方式进行发送数据帧,当数据达到先前初始化的数据量时,向局域网发送数据帧,等待对方经局域网交换机处理的语音帧,8019接收到该帧后交给AVR,AVR处理后送到LC5480解码,进而得到模拟语音。总体设计图如图2-3所示。
图2-3 方案二设计图
3、方案的比较
方案一在编码芯片和网卡芯片之间增加DMA处理器和串并转换芯片,其优点在于在DMA传送方式下,数据的传送不经过MCU,由DMA控制器来实现内存和外设,外设和外设之间的直接快速传送,在编码芯片和网卡芯片之间建立了DMA通道,缓解了MCU的处理负担。DMA传送方式的优点是以增加系统硬件的复杂性和成本为代价的,在没有考虑到的因素下有可能会引起的系统延时和丢包不能控制在可以接受的范围内,并且在通话的建立阶段有一个数据交换的过程,MCU需要对被叫的反馈帧的有效数据进行识别,以确定电话是否接通,而这一方案的数据交换都没有MCU参与,所以也就不能实现通话的建立。
方案二虽然较大的增加了MCU的负担,分析单片机的处理能力,因为数据的交换是循环处理的方式进行,所以理论上是能够完成数据交换。并且在设计中实现一些电话的相关功能,这些功能是随时和通话阶段的数据交换紧密联系的,方案二的数据交换方式能较好的解决。
综上所述:设计选择方案二作为最后方案。
2.3.1 模块划分
VoIP技术的主要目的都是用于处理语音和信令,因此可以将它分为四个功能模块:语音包处理模块(Voice Package Module)、电话信令网关模块(Telephone Signaling Gateway Module)、网络协议模块(Network Protocol Module)、网络管理模块(Network Management Module) [3][4],但在设计的时候,考虑到自己目前知识的局限性,打算先实现在局域网链路层的通信,然后再向IP层扩展,逐步实现预期功能。所以将整个系统初期设计为以下几个模块:
1、 模拟语音采集
普通电话机是用小MIC收集模拟信号的,在本设计中的语音采集和普通话机的语音采集并无差异,只是普通话机语音采集后要经过一个放大电路,而本设计则是送去进行语音编码,所以模拟语音采集这一模块是一个纯硬件的解决,选用一个SNR可以接收的小MIC即可,采集后用R11接口进行传送。
2、语音编解码
人类的声音都是靠声带振动发声,是300-3400HZ的连续信号(模拟信号)[5],但在设计系统总是以数字信号的形式在进行传输和交换,并且语音处理的全过程都是实时应用,所以首先要对语音信号进行模拟数据转换,也就是对模拟语音信号进行8位或6位的量化,然后送入到缓冲存储区中,缓冲器的大小可以根据延迟和编码的要求选择。许多低比特率的编码器是采取以帧为单位进行编码。典型帧长为10~30ms。考虑传输过程中的代价,语间包通常由60、120或240ms的语音数据组成。数字化可以使用各种语音编码方案来实现,目前采用的语音编码标准主要有ITU-T G.711。源和目的地的语音编码器必须实现相同的算法,这样目的地的语音设备帮可以还原模拟语音信号。本设计中采用MC14LC5480 PCM芯片进行语音编解码,后有对该芯片的详细介绍。选用A律编码规范,经编码后的数字码流是64kb/s串行数据,编码的SNR可以达到30dB-40dB[12]。
3、MAC帧封装
一旦语音信号进行数字编码,下一步就是对语音包以特定的帧长进行压缩编码。大部份的编码器都有特定的帧长,若一个编码器使用15ms的帧,则把从PCM芯片来的60ms的包分成4帧,并按顺序进行编码。每个帧合120个语音样点(抽样率为8kHz)。编码后,将4个压缩的帧合成一个压缩的语音包送入RTL8019。RTL8019在mega16的控制下为语音添加同步包头、目的地址、帧数据长度、有用数据、效验信息和其它信息后封装成MAC帧通过局域网传送到另一端点,其中同步包头是固定二进制数据(56bits),目的地址是接受的键盘输入的“电话号码”,帧数据长度是手动设置的,有用数据是从RTL8019的RAM里读取得到,效验和其他信息是NCI自动添加的,MAC帧格式在后面会有详细介绍。
4、发送/接受数据包
语音网络简单地建立通信端点之间的物理连接(一条线路),但共用网络信道,在这个信道中,全部网络被看成一个从输入端接收语音包,然后在一定时间(t)内将其传送到网络输出端。t可以在某全范围内变化,反映了网络传输中的抖动。且在端点之间传输编码信号。局域网网络不像电路交换网络,它不形成连接,它要求把数据放在可变长的数据报或分组中,然后给每个数据报附带寻址和控制信息,并通过网络发送,经过交换机转发到目的端。AVR通过片外的DMA指令读写网卡芯片的RAM接收和发送缓冲页,用专用指令激活8019的控制寄存器把MAC帧数据发送到网络链路上,8019会自动接收符合自己地址数据并开始处理,并提供一个可变长度的缓冲器,用来调节网络产生的抖动。该缓冲器可容纳许多语音包,缓冲器的大小可以选择。小的缓冲器产生延迟较小,但不能调节大的抖动,这个模块也可以按帧进行操作,完全和解码器的长度相同。若帧长度为15ms,是60ms的语音包被分成4帧,然后它们被解码还原成60ms的语音数据流送入解码缓冲器。在数据报的处理过程中,去掉寻址和控制信息,保留原始的原数据,然后把这个原数据提供给PCM解码器。
5、键盘和显示
考虑到人们已经接受的传统电话是4×4的键盘,所以设计采用4×4的矩阵式键盘,键盘驱动LCD的显示,主要显示已拨出的目的号码,同时AVR将拨出的“电话号码”存储后将其作为目的地址交给8019。本设计中的电话号码也就是MAC地址,但在初始化时已经过处理,把十六进制的MAC地址转换成了十进制的6位号码。
简而言之,语音信号在局域网网络上的传送要经过从模拟信号的采集、显示、模拟信号到数字信号的转换、数字语音封装成MAC帧通过网络的传送、语音包解包和数字语音还原到模拟信号等过程。
2.3.2 各部分可能遇到的问题及其解决方案
通话质量是网络电话的关键指标,表现在信噪比、延迟和丢包等参数。
1、 语音编解码
在网络通信中,丢包和延迟是致命的瓶颈,一个系统通信质量的好坏与编码方式有直接关系,常见的编码有以下三种:自然二进制码组NBC、折叠二进制码组FBC、格雷二进制码组RBC,因为人类声音频率在300-3400Hz,其中一般人们通话的声音频率都是在2500Hz以内[5];在这种声音频率较低的情况下,用折叠二进制码作为语音码形式可以使误码率降到最低,较大的提高信噪比。其论证如下:
自然二进制码(Natural Binary Code,NBC):码字与电平值的对应关系简单。一般的十进制正整数的二进制表示:
(2-1)
反射二进制码/格雷码(Reflected Binary Code,RBC): 任何相邻的电平的码组,只有一位码位发生变化:
(2-2)
折叠二进制码(Folded Binary Code,FBC):八位编码,除去左边第一位,其余部分从电平序号中部呈上下对称(折叠关系)左边第一位是符号位。(1表示正;0表示负)
从定性上讲PCM选用折叠码(FBC)在于:对于语音信号来说,频率范围在300-3400HZ,一般发音频率较低小信号出现的概率最大;而对于任意编码,左边第一位(高位)误码造成的误差功率最大。NBC码在小信号情况,如果0111误为1111,则误码功率大。而FBC码,如果0000误为1000,同样的小信号情况,则误码功率相对较小。
另外:在数字化通信过程中,误差来源于两部分:量化误差ea和误码误差et
总噪声功率为:
(2-3)
对于均匀量化器
量化噪声 (2-4)
误码噪声 (2-5)
, ---第i,j级量化电平; 是将 误为 的概率; 是 的出现概率L是量化电平总数。假设每个电平出现概率相等, =1/L。
n位编码中只有一位误码,则只可能出现n=㏒2L种量化电平误差,错误概率为 = ,所以有:
(2-6)
在自然码NBC中,第K位发生误码,产生的误差值为:
总噪声功率为:
(2-7)
设输入信号服从均匀分布,满载功率为:
信噪比为: (2-8)
当 时,误码造成信噪比下降3dB。对于L=256的线性量化来说,此时的Pe为3.8×10-6,对不同的编码规律时SNR与输入电平的关系,在相同误码的情况下,折叠码的信噪比明显高于自然码。所以选择折叠码作为语音数据的编码形式,在查阅一些芯片资料后,设计选用MC14LC5480芯片进行处理。
2、 主控芯片
因为模拟语音经过PCM编码后是串行码流,而网络处理器要求串行输入,所以主控芯片除了控制键盘和显示外,最主要的是将串行码流转换为并行数据送给网络处理器,再由网络处理器发到局域网上,主控芯片起到了串并转换的作用[6]。但在主控芯片进行串并转换的时候,因为整个系统是全双工通信,而单片机的指令周期是一定得,假如在接收PCM码流的处理阶段,如果转换的数据量过大,所用的代码量必然很多,当芯片处理这一过程时,其他的数据量就无法同时处理,这就造成了语音数据丢失,到网络控制芯片处就会演变为丢包。
造成丢包的主要原因:第一在于单片机无法同时处理几个数据流,第二就是一次处理数据所用代码量太大,而前者是单片机固有特性,无法解决,所以要解决丢包或者把丢包控制在可以接受的范围的话,就必须减少处理数据的代码量。方法就是减少处理数据的循环周期, PCM编解码芯片到AVR之间的串行数据传输和再从AVR到网络控制芯片的并行数据传输均采用字节为单位,经计算,由此产生的丢包是可以接受的,详细论证请见第三章。