一种用于CVSD编码的数字压扩算法设计及实现*
2021-08-06许志强
许志强,陈 明
(中国电子科技集团公司第三十研究所,四川 成都 610041)
0 引 言
在军用无线、卫星、水声通信等特殊领域,信道质量比较恶劣,信道特性复杂多变且受干扰比较严重,连续可变斜率增量调制(Continuous Variable Slope Delta Modulation,CVSD)编码因其良好的抗信道误码鲁棒性,以及容易实现,被广泛应用[1-2]。为了提升在复杂多变环境下通话时的语音质量,CVSD编解码前都需压扩提高信噪比[3-5]。目前CVSD编码常用的压扩方法都是使用专用芯片的硬件实现方案。
目前用于CVSD编码压扩的硬件实现方案虽然具有较好的性能,但使用专用芯片会提高设备功耗和成本,且目前该类芯片(如SA575)都是由国外厂商生产,国内无此类芯片,在当前国际形势下,存在断供、停产风险。
当前专用芯片实现CVSD编码压扩方法的压扩曲线如图1所示。
1 解决的技术问题
针对目前使用硬件芯片时存在的问题,本文提出一种用于CVSD编码的数字压扩算法,可零成本的替换当前硬件实现CVSD编码压扩所使用的专用芯片,并解决当前使用专用芯片存在的风险。本算法通过设计适合的循环队列、查表法计算采样点平方、滑动窗口算法计算采样点平方和、二分法反向查找采样点均方根值、根据压扩曲线设计压扩传递函数计算压扩值等方法,将数字压扩方法的运算复杂度降到最低,利用处理器很少的处理能力即可实现,有利于简化硬件设计,降低设备功耗和成本。
与使用专用芯片的硬件实现方法相比较,软件实现压扩方法灵活性大,语音质量优于专用芯片实现方案,在具有多种语音编码算法的设备中使用不同编码算法时语音数据的前期处理完全一致,不需要根据不同语音编码算法切换工作模式。
2 用于CVSD编码的数字压扩算法技术方案
本文提出的用于CVSD编码的数字压扩算法技术方案由循环队列设计;查表法计算采样点平方;滑动窗口算法计算采样点平方;二分法反向查表,快速查找采样点均方根值;根据压扩曲线设计压扩传递函数计算压扩值5个步骤实现。在开始进行压缩或扩展前,先对循环队列进行初始化。正常语音通信过程中,语音数据发送方向处理流程为:麦克风采集经语音芯片模数(Analog to Digital,A/D)转换后的语音数据插入循环队列队尾;采用查表法计算队尾指针指向的采样数据平方值;根据滑动窗口算法计算当前窗口内数据平方和;计算滑动窗口内数据均方值;根据压缩传递函数计算压缩后的值;最后将压缩后的语音数据送给CVSD编码器编码。接收方向处理流程与发送方向基本一致,本技术方案组成及处理流程如图2所示。
2.1 循环队列设计
由于硬件芯片实现CVSD编码压扩方法的启动、释放时间为22 ms,使用32 Kb/s CVSD编码时22 ms对应采样点为704,为设计的软件实现方法与专用芯片实现的完全兼容,故设计循环队列的队列深度为704。循环队列定义如下所示,其中循环队列数组用于存放采样值。
#define MAX_QUEUE_SIZE 704
typedef struct queue
{
unsigned short Queue_array[MAX_QUEUE_SIZE];//循环队列
int front ;//头指针
int rear ;//尾指针
float square_aac;//循环队列平方累加和
long square_front;//兴指舒对应采样点平方long square_rear;//尾指针对应采样点平方
}SqQueue;
对该循环队列的使用过程如图3所示,初始化时将循环队列各参数初始化为0,并在使用前将尾指针移动到MAX_QUEUE_SIZE-2位置;在采样点入队后计算更新循环队列中采样点数据平方累加和及尾指针指向采样点平方;计算完一次用于CVSD编码的压缩或扩展值后,进行出队操作将头指针指向下一个采样点。
2.2 查表法计算采样点平方
由于经模数转换及采样后的语音信号采样值范围确定,而计算采样点平方运算占用处理器资源较多,因此将计算采样点平方乘法运算转换为查表法实现,可以显著降低运算复杂度。
2.3 滑动窗口算法计算采样点平方和
滑动窗口算法计算窗口内采样点平方和过程如图4所示。初始态窗口内采样点平方值均为0,故窗口内采样点平方和为0;当一个有效采样点进入窗口前,通过步骤二查表法计算该采样点平方为A,此时窗口向右滑动,则此时窗口内采样点平方和为A;当窗口再次向右滑动时,则此时窗口内采样点平方和为A-0+B。
窗口运行到某时刻假设窗口内采样点平方和为x1,当窗口向右滑动,则此时窗口内采样点平方和为x1-D+X;当窗口再次向右滑动时,则此时窗口内采样点平方和为(x1-D+X)-E+Y,以此类推。
该方法计算滑动窗口平方和时每次仅需一次减法和一次加法,降低了处理器的运算复杂度。
2.4 二分法反向查表快速查找采样点均方根值
2.5 根据压扩曲线设计压扩传递函数计算压扩值
根据图1压扩曲线,设计的压缩与扩展传递函数如下所示:
3 算法的实际应用
用于CVSD编码的数字压扩算法在数字语音通信终端中的应用场景如图6所示。数字语音通信设备1(以下简称“设备1”)和数字语音通信设备2(以下简称“设备2”)使用CVSD编码进行双向通话。设备1、设备 2中均嵌入本文提出的数字压扩算法。设备1的发送端语音经过麦克风采集进入语音芯片处理,语音芯片将模拟语音信号转换为线性脉冲编码调制(Pulse Code Modulation,PCM)数据,送入数字压块算法模块进行数字压缩,压扩完毕后进行CVSD编码后发送到线路;设备2的接收端接收到经压缩及CVSD编码后的数据后进行CVSD解码,解码完毕后将数据送入数字压块算法模块进行数字扩展,还原为线性PCM数据送入语音芯片处理后通过扬声器播放。
经实际测试,嵌入本算法后CVSD编码可以在信道质量比较恶劣的环境中明显提高通话清晰度,提升用户体验,同时嵌入本算法的设备比硬件实现方案设备互通时语音质量高。
4 结 语
本文提出的用于CVSD编码的数字压扩算法,使用软件方法替代了原来由专用芯片实现用于CVSD编码的硬件压扩方法,利用设备自身处理器很少的处理能力即可软件实现,有利于简化硬件设计,降低设备功耗和成本。
同时,使用本算法的设备间进行CVSD编码通信时,语音质量比硬件专用芯片实现用于CVSD编码的压扩设备语音质量高,通信品质更好。