数字化全双工语音会议电路
“语音会议”常被称为“电话会议”,但电话会议只是语音会议的形式之一。实际上,语音会议的用户终端并不限于电话机,也可以是调度机、会议机、指挥机等各种通信设备的语音终端;语音会议的通信网络也并不限于普通的二线制PSTN电话网络,还可以是四线制的语音网络、专用的无线通信网络或者有线/无线结合的综合通信网络。
在语音会议中,每个与会者都可以收听会议,但不一定能够发言。如果与会者要通过申请才能发言,那么习惯上称其为“半双工”语音会议。要申请发言,并不是一件方便的事。因为既然是半双工,与会者在自己的终端上说话会议是听不到的,他要么再用别的通信设备来向会议主持者提出他的发言请求,要么就只能在自己的终端上通过语音以外的方式来发出申请,如拍打叉簧开关或按双音多频拨号键来发出信号等。
如果每个与会者除了能够收听会议外,还可以自由发言,那么就是“全双工”语音会议。这里的“自由”是指电路上能够让与会者的语音随时发出供大家收听,至于会议规则是允许或是禁止某个用户在某个时段发言则另当别论。显然,全双工会议更方便,更有效率。但全双工会议的电路要复杂得多,尤其是较大门次(32门以上)的全双工语音会议。
语音会议的实现方法
无论是哪种语音会议,主要采用的都是语音求和技术。实现方法是把所有发言者的语音信号求和后发送给各个有权收听的与会者,但每路都不能接收自己发送的语音,以避免自发自收的反馈信号造成回声啸叫。在最简单的情况下,每个与会者的收听权是相等的,如果这时每路的收发语音已分离(四线制或经过了二/四线变换),那么有两种实现方法:一种是把除本路以外的n-1路(n为会议用户数)发送语音求和后送给本路接收,用模拟语音电路来实现时需要用到n个n-1路的语音加法器;另一种方法是把全部的发言都相加后减去某个用户的发言再发送给这个用户,用模拟电路时需要用到1个n路的加法器和n个2路的减法器。每个加/减法器的模拟电路都可以用运算放大器和若干个电阻来实现。第二种方法由于求和的路数少,虽然多用1个运放,却可少用许多电阻和连线。但用第二种方法时,如果模拟减法器的增益没有调到使本路语音完全被抵消,就会产生收发串音。
在模拟式语音会议电路中,如果需要视情况决定是否接受每个与会者的发言申请,那么还要增加模拟开关来控制每路语音是否参加求和运算。
当开关数量多时,还必须加入译码电路来分别选通这些开关。由于不得不使用大量运放、电阻、模拟开关、译码器及信号线和控制线,使得大门次的模拟式语音会议电路变得十分烦琐复杂,集成度低,功耗大。
如果语音会议系统建立在PCM/TDM(脉冲编码调制/时分多路复用)数字交换平台上,这时处理的是数字化了的语音信号,一般可用ASIC(特定用途集成电路)器件来实现数字化语音会议功能, 如Zarlink公司的MT8924、ST公司的M34116等芯片。ASIC器件使用方便、成本低,但通常只能处理1帧PCM信号中32个时隙的语音。如果要实现大门次的全双工会议,就只有把多片这类器件组合起来复用,为此还得再配上时隙交换芯片(如MT8980等)来调整各路信号的时隙关系、增加译码电路来分别选通各片器件。这一来电路的复杂度又增加了,而且功能更改困难。
相比之下,FPGA技术能够提供一个集成度更高、更灵活的解决方案。FPGA的优势在于,能够轻易地在其芯片内设计和配置出大量并行工作的加/减法器,来处理多路语音信号。FPGA片内的加/减法器是纯硬件结构,能够相当精确地设计其语音输出入信号的时序关系,并可通过EDA软件准确地预测和仿真电路的实时特性。这对于语音之类实时性要求很高的信号来说是十分重要的。FPGA成本低廉,用来实现全双工语音会议功能时,除配置芯片外不需要再加其它外围芯片,十分接近于单芯片的解决方案。
基于FPGA的全双工语音会议电路
图1即为基于FPGA的数字化全双工语音会议电路的原理框图。
图1中间框内的电路全部由一片FPGA芯片来实现。模拟语音信号通过PCM编码器成为串行数字语音信号送入FPGA芯片。PCM语音编码以32个时隙组成1帧,每路语音占用1个时隙。为了发挥FPGA并行处理信号的长处,把输入语音信号每32路作为1组,经编码后成为1帧PCM信号,FPGA对各帧信号进行并行处理。例如输入是128路语音时,FPGA就同时处理4帧PCM信号。经FPGA处理后的信号最终仍然分帧输出,经PCM解码器后还原为模拟语音。图中为了说明信号流程把PCM编码器和解码器分开来画,实际上编解码器是集成于同一芯片内的。
以下简要说明FPGA内各电路模块的功能:
串行/并行转换电路
输入到FPGA的串行PCM信号通过该电路将每时隙8比特的串行数据转换成8位的并行信号,然后暂存在用FPGA片内RAM资源设计成的双端口存储器中。双端口存储器的另一端按要求的时序依次输出各并行数据,供后续处理。
A律码/线性码转换电路
本部分电路完成8位A律PCM码到13位线性码的转换,以便随后对语音进行线性运算。转换电路用AHDL语言编写。在每帧的125μs时间内32路PCM语音信号分时使用本电路,因此每32路可共用1个码型转换电路。
静噪门限控制电路
全双工会议的发言通道向每个与会者敞开,虽然同时发言的用户总是少数,但任何一路即使不发言也会产生噪声。如果所有的输入噪声都被迭加求和后放出,将严重影响会议效果。因此,必须对每路输入语音实施静态噪声控制。噪声控制的原理是设置一个门限值,当输入信号的幅度低于门限值则认为是噪声拒绝其通过,高于门限则认为是语音而放行。但某些突发噪声也可能在短时间的幅度高于门限值,语音中也会有幅度比噪声更小的有用信号或短暂的无声停顿。因此,静噪门限电路还应该具有“前延时”功能以阻挡短促的突发噪声,具有“后延时”功能以防止话音断续。
帧加法器
通过前面电路的处理,每帧PCM信号已经转换成了32路分时的13位并行线性码,每路信号的持续时间是3.9μs。帧加法器的作用是累加这32路信号,其单元电路如图2。
图2 中加法器add_sub在每帧起始时被frame信号清零。随后在第1个3.9μs时间内,第1路线性码的低12位数据l[11..0]送入加法器,符号位l12则用来控制加或减。加法器的输出ds[11..0]反馈回来,在第2个3.9μs周期里和第2路信号相加,其和再反馈回来和第3路信号相加。如此在1帧时间里完成全帧32路语音信号的求和运算。
在多路语音信号相加时,如果求和所得信号溢出,语音将产生限幅失真。为解决这一问题,用双向计数器carry_counter来扩展“和”的动态范围。用a/c_clock信号的上升沿执行加/减法操作、下降沿执行进/退位操作。采用这一技术比简单地增加加法器的数据宽度节省芯片的逻辑资源。通常carry_counter用4位计数器就够了。
summing_enable信号用来允许/禁止某路语音参加求和。如果要禁止某路发言,当加法器对该路数据求和时,使summing_enable为低即可。
求和后的线性码ds[11..0]和进/退位信号ds[15..12]在每帧结束时被sum_latch信号锁存,然后在sum_out信号有效时输出。
全局加法器
来自各个帧加法器的输出分时选通三态总线,相继送入全局加法器,在全局加法器里累加所有各帧的信号。从全局加法器输出的“和”信号就包括了所有与会者的发言。全局加法器的电路设计类似于帧加法器。
本路减法器和延时电路
本路减法器由32路信号分时共用,从全部“和”信号中减去一路信号再输出到该路,这路就收到了除自己以外的所有其它与会者的发言。但是由于两次累加过程,“和”信号已经产生了两帧时间的延迟,因此必须把拟减去的本路信号先做相同的延时,然后再相减。只要在前面的累加过程中没有产生限幅失真,本路信号就能够被精确地减除掉。
线性码/A律码转换电路
从本路减法器输出的仍是线性码,通过本模块转换回A律编码。该转换电路也是1帧32路信号分时共用的。
并行/串行转换电路
最后把运算完毕的并行信号转换成符合PCM时序要求的串行信号,即可输出给PCM解码器,得到供各用户收听的语音会议信号。
时序发生器
时序发生器外接16.384MHz的有源晶振,导出3组同步的时钟信号:FPGA内各逻辑处理电路的时序信号、FPGA和外部处理器接口的时序信号、PCM编解码器的时钟信号。
外部处理器接口
本接口通过地址、数据、控制三组总线连接到FPGA片外的单片机或嵌入式计算机。通过本接口,外部处理器可以设定和选择FPGA的功能,如禁止某路发言或收听等。
如把数据和控制总线设计成双向的,还可以读取到FPGA内各路用户的语音状态信息。