如何利用局域网的资源打内线IP电话

来源:互联网 发布:使用eplan软件的感悟 编辑:程序博客网 时间:2024/03/29 14:17

摘要:本文系统介绍局域网中IP电话的实现原理;在MCU中如何实现Lean TCP/IP协议;对电话的信令和语音信号怎样打成IP包,进行了具体阐述;并给出在实际中如何选出相应的支持芯片及完整的硬件设计模块。

 
1 概述

    当今各个公司、企事业单位都拥有各自的局域网。在平时的数据传输当中,总有一部分带宽资源是处于闲置状态。本文主要就是阐述如何充分利用这部分资源实现单位内部的语音传输。若采用这种特制的IP电话机,就不再需要购买单位内部的交换机。而这种IP电话同一般电话机成本差不多,这样一来为使用这种电话的部门可节约大笔开资。

2 内容

2.1 IP 电话的设计原理 
    首先简述一下IP电话的设计原理。IP电话就是网络电话。我们选择以使用很普遍Ethernet网口作为接入网络的接口,而不选择SLIP或MODEM 作为接入网络的接口。在Ethernet 接口中,IP电话的实现原理如图1所示:


       图  1
    图1实际就是一个TCP/IP协议的分层结构,所示分层结构是在遵循SI的七层结构的基础上,做了适当简化的TCP/IP协议机制。由于TCP/IP协议是一个庞大而繁杂的体系结构,几乎涵盖了网络上所有应用,这种实现的基础必须在功能强大的CPU的系统上才能实现。要在8bit低成本单片机上实现这一切是不可能的,只能就其应用要求,对TCP/IP协议进行最简化的裁剪,来适应这一应用平台的需要,IP电话的实现就是如此。当然,为了实现IP电话的兼容性,也需要遵循最基本TCP/IP网络协议,才能达到IP电话的互连互通。
    设计的IP电话的原理框图如图2所示。下面分二个方面说明其实现原理,一是IP电话信令的实现原理;二是IP电话的语音数据传输原理。
2.1.1  IP电话的信令
    众所周知,打普通电话(PSTN)是靠信令控制用户的呼叫建立,连接,释放等过程。同样的道理,打IP电话,也要有呼叫的建立,连接,释放等过程,要实现这些,就要靠信令来控制,这就是IP电话信令。按照ITU的建议,在H.323框架协议下的H.245,H.248可以实现这些IP电话的信令,但要实现H.323,哪怕是最精简,也需要较大的程序空间,对于8bit廉价的单片机来说,更是不可思议。因此在实现过程中,我们摈弃了H.323,只用其一些基本思想,在TCP/IP协议中去实现IP电话信令。我们选择用ICMP(internet control message protocol)来实现IP电话信令。其基本流程如图1中虚线所示:ICMP---IP---ARP---Ethernet.用ICMP实现IP电话信令有两个好处,一是ICMP有请求和应答功能, 二是实现ICMP比较简单,它的原型或者基本功能就是Ping功能,这两点既符合简单的要求,又符合IP电话信令的基本要求,从而在ICMP的数据中可自定义IP电话所有信令格式和编码,一个ICMP的数据包格式如图2:


       图    2
    在ICMP的数据包中,可以只用一个byte来定义IP电话信令,按照《程控交换机的技术规范》,只需要以下一些基本信令即可。     一个基本的呼叫流程图如图3


       图3  一个基本的呼叫流程图
▲Req-ID 请求对应IP地址:Ethernet ID
▲Req-conn请求连接
▲Conn-In 连接指示
▲Req-lease 请求释放
▲Lease-In 释放指示
▲Ack 应答
▲ID_In  ID 指示

    图3是说明IP电话从呼叫、建立通信到释放的全过程,这是一个正常通信过程。如果是非正常通信过程,大部分是靠定时器或其它信令来支持,在详细设计过程当中,会考虑可能遇到的一切情况,以便能准确判断所发生的一切,来确定下一步所应采取的操作。
2.1.2   IP电话语音数据传输
    打电话的过程是一个语音信号互相传递的过程。普通电话采取的是电路交换的方式,而网络电话采用的是分组交换的方式。为了实现IP电话,必须首先将语音数据进行封装,然后按照一定路由选择送到目的
地。由于网络传输的特点,必然存在语音信号的延时、抖动、数据丢失等现象,为了尽量减少语音量的损失,应尽可能的采取一些措施,来确保语音的质量。综合各方面的考虑,语音编码可以按照G711的编码方式,采用8KH采样频率和A8BI编码方式,每路语音数据速率为64Kb/s,这种方式与压缩编码G729的8kb/s数据速率相比,提高了数据传输速度,且保留语音质量,减少了IP电话的语音数据压缩和解压缩的繁杂算法运算,可不使用DSP器件,从而使8bit单片机实现IP电话成为可能。另一方面,可考虑语音数据包的大小,如果语音数据包太大,一旦丢失,会给IP电话语音质量造成较大影响;如果语音数据包太小,需频繁传递,会降低传输效率,并且加大网络负荷。因此要选择合适语音数据包的大小,我们采取2ms传递一次语音数据包,在这个包中包含16bytes,使其既能保证语音质量,又不至于给网络造成过大压力。我们用UDP(user data protocol)的方式来对语音数据进行封装,对比TCP方式封装数据来说,尽管UDP没有数据丢失的重传功能,但在网络压力不太大的情况下,可以提高传输效率,其传送语音数据的流程示意图如图1的实线指示,即Audio—Data—UDP—IP—ARP—Ethernet。一个UDP的数据包格式如图4所示:


   图4    UDP数据包格式
    从图4可以看出,每一个UDP中封装n bytes的语音数据而语音数据又是按照G711进行编码与解码的,关于语音信号的LPC编解码芯片即可完成PCM编解码功能。我们已经知道,完成网络电话,用两种较简单的数据包就可完成。一种就是IP电话信令数据包,即ICMP包;另一种是IP电话语音数据包,即UDP包。对于同一局域网(LAN)中相同的IP电话,只要设为不同的IP地址,按照上面的方法,就可以完成一个电话接续的全过程。
2 .2硬件设计
    依上所述,我们的硬件设计框图如图5所示。从图5中IP电话系统框图可以看出,IP电话的实现可分为三部分:用户接口、I/O接口和存储器接口,下面就以CPU为中心来说明三个接口的功能:
    #用户接口。从图5看出,用户接口包括二个方面:一是键盘(电话机键盘),它的作用是输入电话号码或者输入IP地址;二是LCD(liquid crystal display)显示,它主要用来显示电话号码或扩展用作显示收发短消息的汉字,根据所选keypad, LCD以及CPU而定。
    #I/O接口:如图5所示,I/O接口包括二个方面:一是CPU与codec(code and decode)的接口,它的作用是将数字化的语音读取或送出,codec主要是与IP电话的手柄(speaker and erphone)相连。现在,CPU与codec的接口形式主要是I2C或SPI接口,即 codec现在提供的接口大部分是同步串行接口;二是CPU与Ethernet的接口(以太网接口), 它的作用是将IP包接收或者送出,它是进入LAN(local Area network)的通道,ethernet主要完成的是802.3的协议的功能,CPU与ethernet 的接口是采用并口(或ISA)方式相连,这是因为ISA接口的ethernet芯片相对PCI接口的Ethernet来讲,价格上要低得多,并且也比较适合单片机的接口形式。
    #存储器接口:如图5所示,存储器接口包括二个方面,一是ROM接口,实际中也包括Flash接口,它主要是存储程序代码所用,通常是并口形式与CPU相连,如果是CPU内已有flash 这个接口就可以省掉;二是RAM接口,实际中也有E2PROM接口,它主要存储的是数据,通常有几种形式的接口与CPU相连,I2C,SPI和并口(ISA形式),根据具体选择CPU支持RAM的接口而定。
下面以一次打电话的过程来说明图5中IP电话系统工作过程:呼叫建立、通话阶段、拆线阶段。
    #呼叫建立:在空闲状态下,CPU一直在循环检测是否有摘机或其它用户呼入的信号,用户摘机时,CPU检测到摘机信号,就发送拨号音(所有音源都是IP电话自备),用户开始拨号(在keypad上按相应电话号码数字键),CPU收到第一个号码后切断拨号音,并给话筒送相应数字键的DTMF音,然后将收到的号码送给LCD显示,等号码收齐后,CPU就到RAM中寻找与所拨电话号码对应的IP地址,如果未找到对应的IP地址,就给话筒送忙音,表示没有此电话号码,如果找到对应IP地址,CPU就开始发起呼叫,通过ICMP送到Ethernet,等待被叫用户的回应,当然在送ICMP时,CPU首先有一个ARP的协议过程,这个过程主要是寻找与IP地址对应的ethernet  ID 号。如果等待一段时间,用户未有回应,说明用户不存在或线路故障,给用户送忙音;如果被叫用户回应,就给话筒送回铃音,同时被叫用户一方振铃。若被叫久不摘机,被叫停止振铃,并发ICMP消息给主叫用户拆线,主叫用户收到此消息,送忙音,等待主叫用户挂机。如果被叫用户在规定时间内摘机,则停止送振铃音,并用ICMP应答信号,通知主叫用户,被叫已应答。主叫用户收到此消息,停止送铃音,通话开始。
    #通话阶段:进入通话阶段,主叫用户就开始发送话音数据的IP包。具体过程如下:首先将codes编码的语音数据进行接收,并按照UDP进行封装,再封装成IP包送往ethernet;同时,将ethernet接收到的语音IP包进行拆包,并按一定节拍将解封语音数据送到code进行解码,从而将被叫用户的话音送到听筒,将话筒的话音送到被叫方,被叫用户在通话阶段与主叫用户通话阶段所处理的过程完全相同。
#拆线阶段:当双方通话阶段结束时,如果主叫先挂机,CPU检测了挂机信号,就经被叫方送拆线信号ICMP,被叫方受到此拆线信号,就给被叫方送忙音,提醒被叫方挂机,如果被叫方挂机,就经主叫方送一个释放应答信号,并停止送忙音,这次通话就宣告结束。相反地,如果被叫方想挂机,其处理过程与上面是相同的。一次通话过程结束后,双方进入空闲状态,CPU再进行循环检测是否有摘机以及其它用户呼入的信号,然后进行上面类似的处理。

3 结论和参考文献

    本研究项目在这两个方面都有所突破,在提高语言质量方面,除了对TCP/IP进行最精简的裁减,用呼叫处理的基本思想外;在IP电话的实现方面采用G711语音编码,省去大运算量的语音压缩算法,利用提高语音质量方面的技术,为低成本高性能的IP电话设计方案奠定基础。本项目正是根据这两方面的技术因素,利用低价的MCU来实现IP电话,为IP电话的开拓创造了条件。


[1] TCP/IP   ILLustrated  Volume 1:The ProtocolsW.Richard Stevens 著
机械工业出版社
[2] TCP/IP  Lean  Jeremy Bentham 著CMPbooksLawrenc,Kansas 66046[3] IP电话技术及其
应用  舒华英、赖平漳等编著
人民邮电出版社
网址:      http://www.Realtek.com
http://www.national.com 
http://www.cirrus.com

原创粉丝点击