数字集群系统中实现话音缓存的方法 【技术领域】
本发明涉及移动通信领域中的数字集群系统,尤其涉及基于CDMA(CodeDivision Multiplex Access,码分多址)蜂窝集群制式的数字集群系统中语音缓存的方法。
背景技术
在日益多样化的社会需求推动下,移动通信技术从模拟通信系统,发展到目前广泛应用的第二代移动通信系统和2.5代移动通信系统,一直到即将大规模应用的第三代移动通信系统,移动通信技术的发展不仅满足了人们对于话音业务的需求,更越来越有效的满足着包括影像、音频、实时多媒体业务交互等增值型业务的需求,从而使得移动通信系统在人们的生活和工作中发挥着越来越重要的作用。其中,集群通信已经日益成为一个不可或缺的业务内容,数字集群系统是移动通信系统的一个重要分支,是一种用于集团调度指挥通信的移动通信系统,主要应用在专业移动通信领域,例如大型企业、铁路、宾馆、安全、出租车调度、港口等。和普通的移动通信不同,集群通信最大的特点是,话音通信采用PTT(Push To Talk)按键,以一按即通的方式接续,被叫无须摘机即可接听,且接续速度较快。另外一个特点是并能支持群组呼叫功能,也就是一呼百应的通讯模式,即用户拨打组呼电话时,会有多个被叫同时响应这个呼叫,这些被叫在同一时刻接收到基站发来地相同的语音帧,也就是说这些被叫在同一时刻会听到相同的话音。为了保证这一点,同一个组呼的用户标志前向语音帧的时间标记——帧序号应该相同,这就要求帧序号统一放在集群调度客户端业务处理模块(Dispatching Client Traffic Process,DCTP)填写。由于网络侧和空中发帧的间隔以及帧长度不同,语音帧在DCTP模块传到集群帧选择分发模块(Select Distrabute Module,SDM)之后有一个帧切割的过程,SDM模块要将网络侧较长间隔传过来的帧切割成N个适合向空中发送的帧,然后以较短间隔发送到信道板。DCTP模块将帧序号填入向SDM模块发送的帧的帧头,SDM模块根据收到帧的帧序号顺序填写切割后的每一帧的帧序号。而现有技术存在一个明显的缺点:如果网络侧向DCTP模块发帧的间隔不够长,SDM模块切割后不同帧的帧序号就会重复,从而造成帧覆盖现象,被覆盖的帧被基站丢弃,而不会发往终端,用户听到的声音就会断断续续。
【发明内容】
本发明所要解决的技术问题是现有技术存在的由帧覆盖造成的语音断续现象的缺点,以期提出一种能够保证语音连续、提高集群通讯话音质量的数字集群系统中实现话音缓存的方法。
本发明所述数字集群系统中实现话音缓存的方法包括以下步骤:
第一步:DCTP收到网络侧发来的帧,并且把帧放入缓冲区,还可以将同组的帧循环放在连续的固定大小的缓冲区中;
具体包括下列步骤:
(1)DCTP收到网络侧发来的帧;
(2)DCTP取出每帧中标记不同组的标识-组号。
第二步:DCTP记录帧的组号;如果是将同组的帧循环放在连续的固定大小的缓冲区中,则将同组的帧的缓冲区位置按顺序串成链表记录下来;如果不是,则需要记录上述帧放在缓冲区中的位置和组号。
本步骤进一步包括以下步骤:
(a)DCTP为此前向帧在缓冲区中分配一块内存,并且将此前向帧拷贝到该内存中;
(b)DCTP将该内存的位置串在记录相同组号GroupId的内存位置的链表BufferLink的最后;如果这是组内第一个前向帧,计算此组的发送时间偏置iOffset=Integer_mod((gwTimeOffset+1),M_TimeMod)。
第三步:每个固定时间将缓冲区中的帧填写帧序号,发往SDM模块;
(此固定时间由两个因素决定:第一个因素是信道板发送单元向终端发送的帧的大小和网络侧传输数据帧的大小之比;第二个因素是信道板向终端发送的帧的长度,如4个信道板发射单元向终端发送的帧在网络侧组成一帧发送,而且信道板向终端发送的帧采用的是20ms帧,那么这个固定长度就是20ms*4=80ms)
本步骤又可以包括下列步骤:
(1)固定时间到来之后,DCTP根据存储的信息确定该发送哪些组的帧;
(2)DCTP将每个组在缓冲区的第一帧取出;
(3)DCTP根据系统时间计算帧序号,填入帧头中;
(4)DCTP将此帧发往SDM。
如果是将同组的帧循环放在连续的固定大小的缓冲区中,则每个固定时间直接到缓冲区中取同组的第一个帧。
本发明所述方法通过集群调度客户端业务处理模块将网络侧发来的帧缓存,并在每个固定时间将缓冲区中的帧填写帧序号,发往集群帧选择分发模块模块,与现有技术相比,彻底解决了由于网络侧发帧不均匀导致的帧覆盖现象,提高了话音质量。
【附图说明】
图1是每个组前向帧在缓冲区中内存位置链表示意图。
图2是本发明所述方法中DCTP接收缓存方法流程图。
图3是本发明所述方法中DCTP发送前向帧方法流程图。
【具体实施方式】
下面结合附图和具体实施方式对本发明所述方法进行进一步描述。
图1所示为将话音缓冲区分为若干片,每片有编号,每个用户的语音帧放在缓冲区中的位置用缓冲区的编号表示。每组用户语音帧在缓冲区中的位置串成一个链表。
此方法的处理过程分DCTP对前向帧的缓存过程和DCTP对前向帧的发送过程。
步骤1、DCTP设置一个全局发送帧偏置gwTimeOffset,为每个组定义一个发送时间偏置ioffset,定义一个宏值M_TimeMod,这个宏值是每组前向帧实际发送的时间间隔Tsend1和调用发送进程的时间间隔Tsend2的比。Tsend1在此实例中取80ms,Tsend2在此实例中取20ms,M_TimeMod在本实例中取4(也是大小可调)。
如附图1,DCTP开一块4M大(大小可调)的缓冲区来存储前向帧。DCTP将每个组的前向帧在缓冲区中的位置用一个链表串起来。
步骤2、附图2所示DCTP对前向帧的接收缓存过程如下:
1.DCTP接收到网络侧发来的前向帧,如图2中第201步。
2.DCTP取出此帧中所带的组号GroupId,如图2中第202步。
3.DCTP为此前向帧在缓冲区中分配一块内存,并且将此前向帧拷贝到该内存中,如图2中第203步。
4.DCTP将该内存的位置串在记录相同GroupId的内存位置的链表BufferLink的最后,如图2中第204步。
5.如果这是组内第一个前向帧,计算此组的发送时间偏置
iOffset=Integer_mod((gwTimeOffset+1),M_TimeMod),如图2中第205步。
步骤3、每Tsend2时间间隔,DCTP调用一次发送过程,DCTP对前向帧的发送如图3所示,具体步骤如下:
1.DCTP计算全局发送帧偏置gwTimeOffset=Integer_mod((gwTimeOffset+1),M_TimeMod),如图3中第301步。
2.DCTP轮循每个组,将发送时间偏置iOffset等于全局发送帧偏置gwTimeOffset的组在缓冲区中的第一个帧根据系统时间打上帧序号发送到SDM模块,如图3中第302、303步。
3.DCTP释放这个帧在缓冲区中所占的内存,如图3中第304步。
4.DCTP删除这个帧在BufferLink中的内存位置的记录,使下一个帧成为改组在缓冲区中的第一个帧,如图3中第305步。