基于DSP的自适应会议电话算法设计与实现
传统的会议电话算法将一个会议的所有参加者合成,使每一个参加者听到除他本人以外的其他参加者的声音。然而这一算法在使用中存在一些问题,首先,为了避免溢出,合成之前要对所有参加者的话音进行统一衰减。衰减量是根据参加者总数确定的,当参加者很多时衰减量很大。这将导致的问题是:此时如果实际发言者少,合成输出的声音将很小,而实际发言者很多、音量很大时,预先确定的衰减又可能不够,合成输出的声音可能发生饱和失真。所以当会议参加人数较多时声音效果较差,在实际应用中无法满足用户的要求。会议电话算法的另一个问题是容量问题,以大唐电信SP30CN交换机为例,当在同一时刻一个会议的参加者超过45个小时,处理能力问题就会表现出来。因此本文提出了一种自适应会议电话算法,该算法既解决了当会议参加人数较多时效果较差的问题,又通过优化处理流程,从而提高了处理能力,解决了容量问题。
1 基本设计思想
提出的自适应算法,是控制好程序进行合成算法时需要合成的人数。以下将会议中最终需要合成的参加者称为最终输出者。如果将最终输出者的数目控制在确定的范围之内,就能解决溢出和处理量不够问题。
选出最终输出者最直接的方法应该是对每个参加者进行语音识别,判断话音和背景噪音,只对话音进行合成。考虑到语音识别的复杂性,决定从能量角度动态筛选出最终输出者。从能量角度解决问题基于这样一个假设,即话音能量高于背景噪音的能量。这个假设在一般实际环境中是成立的。解决的方法基于这样的原理:对一个会议的所有参加者进行能量计算,最终进行合成的只是能量持续大的几个参加者。
能量计算采用的方法是:对样本值取绝对平均值。程序处理的音源经过8KHz采样,则1ms采集8个样本值。考虑到话音的突变性,短时性,在5—50ms内特性保持较一致,所以对每个参加者保存25ms的能量,以此作为能量判断的依据。根据纪录的能量值,就可以对会议的最终输出者进行更新,更新有两种方式:若一个最终输出者的能量持续一段时间都低于一门限,就判断其暂时不说话了,不再合成该路话音;另一种方式是对最终输出者中能量最小的通道和非最终输出者中能量最大的通道进行跟踪比较,如果这个非最终输出者在持续的一段时间内都比这个最终输出者能量大,则将其替换上去。若比较不成功则将这一对比较对象刷新,找出新的比较对象。通过这两种更新方法,程序设计为任何时候只有最多3个参会者是最终输出者。
2 系统硬件结构
采用TI公司的DSP TMS320VC5402完成128路语音信号的检测,分组与合成。会议电话软件运行于一块TI‘S TMS C5402 DSP之上,如图1所示。
3 软件设计
软件设计分为单片机和DSP程序两部分(见图4)。单片机主要完成与处理机的通讯、交换网络芯片PEB2045的控制、DSP上报DTMF号码的扫描。在80C32复位后,单片机首先完成程序的初始化。通过HPI接口下载DSP程序代码,设置PEB2045的交换模式,允许外部中断口0和定时器0中断,并向交换机处理机发送同步和复位消息,处理机得到同步和复位消息后,向DTMF板发送连接时隙的命令,由80C32控制PEB2045进行时隙的接续。程序通过HPI接口定时(60ms)扫描DsP上报的DTMF号码消息,存入8OC32上报消息数据区,然后再上报给处理机。程序主要由三大模块组成:主程序、外部中断0子程序、定时器0中断程序。
一个消息帧由头尾两帧组成,在主程序循环中检测有无需要上报的消息或重发消息标志,如果有重发或上报事件发生,则完成消息帧头帧的发送或重发。
在外部中断0子程序中,接收处理机下达的命令和消息,进行分析处理,完成时隙的连接和断开操作,检测有需要上报的消息或重发消息标志时,发送消息帧的尾帧。
定时中断0子程序中,监控处理机的消息处理情况,并扫描DSP有否DTMF号码上报,把上报号码存入80C32上报消息数据区中,稍后在主循环中被检测并上报交换机处理机。
DsP主要完成32路 rMF检测,DTMF检测主要由六个功能函数组成,如图5所示。
4 测试
测试首先是要确保算法能够正确工作。还要保证会议语音合成的实时性,并保证会议参加人数较多时高质量的语音效果。
首先在程序运行硬件平台之前,对电话会议的算法进行软件模拟。其次是基于硬件平台的测试,检测RAM是否可以稳定正常的工作,验证主处理器与DSP的接口协议,并实际建立电话会议测试算法的正确性。
当算法能够正确工作以后,再进行处理量和话音效果的测试。经过检测,当会议参加者总数达到交换机最大标称值128路时,该算法仍不存在处理量问题,并且可以获得非常清晰的语音效果。