0 引 言
在众多的语音编译码调制中,连续可变斜率增量调制(CVSD)作为许多增量调制中的一种,只需编一位码,在发送端与接收端之间不需要码型同步,量阶△的大小能自动地跟踪信号变化,因而具有强抗误码能力,在10-3时仍可保持高质量的话音。目前市场上有CVSD的专用芯片,但专用芯片的通用性、灵活性和可扩展性受到了很大的限制,并且产品的开发周期长,开发成本也较高。专用CVSD芯片只能实现一路编译码,在需要多路CVSD编译码时则需要很多专用芯片,具有局限性;而单片FPGA容易实现多路CVSD编译码功能。此外如果专用芯片停产或者买不到,已有的通信设备维修将会因器件缺乏导致后续工作无法开展。为了弥补专用CVSD芯片的不足,同时也方便在现场可编程门阵列(FPGA)中增加一些其他相关的应用功能,因此在FPGA中实现CVSD语音编译码调制功能的前景将是非常广阔的。
这里将详细介绍基于FPGA的CVSD语音编译码的设计思路、具体实现以及和专用芯片CMX639之间的互相通信。
l CVSD工作原埋
CVSD是一种量阶△随着输入语音信号平均斜率(斜率绝对值的平均值)大小而连续变化的增量调制方式。它的工作原理如下:用多个连续可变斜率的折线来逼近语音信号,当折线斜率为正时,对应的数字编码为“1”;当折线斜率为负时,对应的数字编码为“0”。
当CVSD工作于编码方式时,其系统框图如图1所示。语音信号xin(t)经采样得到数字信号x(n),数字信号x(n)与积分器输出信号g(n)比较后输出误差信号d(n),误差信号d(n)经判决后输出数字编码c(n),同时该信号作为积分器输出斜率的极性控制信号和积分器输出斜率大小逻辑的输入信号。在每个时钟周期内,若语音信号大于积分器输出信号,则判决输出为“1”,积分器输出上升一个量阶△;若语音信号小于积分器输出信号,则判决输出为“0”,积分器输出下降一个量阶△。当CVSD工作于译码方式时,其系统框图如图2所示。在每个时钟周期内,数字编码c(n)被送到连码检测器,然后送到平滑电路以控制积分器输出斜率的大小。若数字编码c(n)输入为“1”,则积分器的输出上升一个量阶△,若数字输入为“O”,则积分器的输出下降一个量阶△,这相当于编码过程的逆过程。积分器的输出g(n)通过低通滤波器平滑滤波后将重现输入语音信号xout(t)。可见输入信号的波形上升越快,输出的连“1”码就越多,同样下降越快,输出的连“O”码越多,CVSD编译码能够很好地反映输入信号的斜率大小,有效地避免了斜率过载失真和颗粒失真。为使积分器的输出能够更好地逼近输入语音信号,量阶△随着输入信号斜率大小而变化,当信号斜率绝对值很大,编码出现3个或4个连“l”或连“O”码时,则量阶△加一个增量△0;当不出现上述码型时,量阶△则相应地减少。
2 CVSD的软件算法
2.1 CVSD的编码算法
图3是CVSD编码算法框图,其量阶△调整是基于前3位的连码。x(n)是语音经过采样得到的数字信号,数字信号x(n)与积分器地I1输出的预测信号xp(n)经过比较后输出误差信号d(n),误差信号d(n)经一阶量化(d(n)≥0,c(n)=1;d(n)<0,c(n)=O)得到输出的数字编码c(n),该信号同时作为积分器I2的极性控制信号和控制积分器I2输出斜率大小逻辑的输入信号。当输出码出现连续的“1”码或者连续的“0”码,则说明信号波形的斜率较大,因此量阶△需要适当增加,当输出码c(n)长时间没有出现连码,则积分器I2向“O”值方向衰减,量阶△减小。最小和最大阶距是由△MIN和△MAX分别确定的。当长时间没有出现连码,CVSD编码器退化为一个线性增量调制(LDM)编码器。
2.2 CVSD的译码算法