概 述
在众多的语音编译码调制中,连续可变斜率增量调制(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的译码算法
图4是CVSD译码算法框图,其量阶调整是基于前3位的连码。译码过程就是编码的逆过程,只是在积分器I1后面增加了一个低通滤波器,用于抑制带外干扰。
3 CVSD算法在FPGA中的实现
3.1 硬件实现框图
考虑到实际需求,采用了通用性较强的A/D,D/A元器件和FPGA器件。该硬件可以同时实现3路CVSD编译码算法,一路采用FPGA(XC3S1500)实现,两路采用专用芯片实现;同时编译码之间可以通过FPGA内部逻辑控制互相通信。在FPGA内设计实现了CVSD编译码算法,在该器件内融合多种控制功能,可以在线编程、方便调试。
音频信号在进行A/D采样之前,为了防止带外信号进入,首先进行低通滤波;再通过高倍时钟进行采样得到数字信号进入FPGA进行编译码处理。译码过后的信号通过D/A输出模拟信号,该信号再经过低通滤波器后输出,得到音频信号。
3.2 CVSD算法实现框图
在FPGA内部算法实现上,采用了“自顶向下”的设计方法,即根据要求的功能先设计出顶层的原理图,该图由若干个功能模块组成。再把各个模块细化为子模块,各子模块的功能采用电路图实现,也可用硬件描述语言实现。设计中顶层采用原理图实现,子模块采用VHDL硬件描述语言实现,利用ISE自带的IP Core乘法器,经过综合和优化等过程,最终将程序下载到芯片中,使用在线逻辑分析仪ChipScope Pro进行逻辑和功能测试分析。
3.3 CVSD算法的仿真
以正弦单音输入信号为例,利用信号源产生信号幅度O.5 Vpp,频率fin(t)=1 kHz的正弦信号作为测试信号,在FPGA中利用高倍时钟产生fs(t)=64 kHz的采样时钟。对输入A/D的音频信号采用专用低通滤波芯片进行了滤波。D/A输出的信号包含了许多不必要的高次谐波分量,因此也采用低通滤波器对其进行了平滑滤波。
在设计上,不仅仅是采用FPGA实现和验证自己的CVSD编译码算法,还和专用芯片CMX639进行互相通信进行验证。CMX639是一款CVSD全双工音频调制芯片,集成了编码和译码功能,实现了单芯片语音处理能力,外围设备简单,用户可以根据实际情况,自主选择采样速率。
图8是通过ChipScope Pro采集的实时正弦信号。从图中可以看出量阶△的大小能够很好地反映输入信号斜率的大小,输出端输出信号能够很好地重现输入信号,说明CVSD编译码方式是有效的。
3.4 CVSD算法的实现
采用原理图和VHDL语言相结合的方式在FPGA中实现了CVSD电路。具体实现步骤如下:
(1)根据算法框图设计顶层原理图CVSD.SCH;
(2)利用IP Core产生底层所需要的乘法器;
(3)利用VHDL语言完成CVSD编译码模块;
(4)I/O管脚定义,约束条件编写;
(5)设计综合、编译;
(6)bit文件生成、下载,通过ChipScope Pro进行仿真测试;
(7)根据仿真测试结果返回修改设计,直到设计成功;
(8)mcs文件生成、加载,最终验证。
验证是FPGA设计中很重要的一环,只有通过验证才能说明设计的正确与否。采用XILINX公司的Spartan一3系列中的XC3S1500来具体实现CVSD的编译码功能。通过自己设计的编译码算法和CMX639专用芯片的编译码模块互相通信,输入实际语音信号测试,能够很好地从D/A输出语音信号,从CMX639译码输出也能听到语音信号,达到了满意的效果。
4 结 语
本文提出的FPGA设计方法很好地实现了CVSD编译码功能,充分利用了FPGA的优势,可以同时实现多路CVSD编译码功能,弥补了采用专用芯片实现CVSD编译码的不足,设计灵活、简单,成本低,具有很好的应用前景。
CVSD算法分析及其在FPGA中的实现
- FPGA(591969)
- cvsd(11831)
相关推荐
FPGA中实现PID算法
本帖最后由 发烧友LV 于 2014-12-29 20:13 编辑
在FPGA中实现PID算法,面临着小数的计算,请问大家一般是怎么处理的?
2014-12-03 21:59:29
FPGA实现滑动平均滤波算法和LZW压缩算法
采集数据中的量化噪声,在进行数据压缩前采用滤波的预处理技术。介绍LZW算法和滑动滤波算法的基本理论,详细阐述用单片FPGA实现两种算法的方法。最终测试结果表明,该设计方案能够有效滤除数据中的高频噪声
2010-04-24 09:05:21
FPGA设计中必须掌握的Cordic算法
大多数工程师在碰到需要在 FPGA 中实现诸如正弦、余弦或开平方这样的数学函数时,首先会想到的是用查找表,可能再结合线性内插或者幂级数(如果有乘法器可用)。不过对这种工作来说,CORDIC 算法
2019-09-19 09:07:16
FPGA设计之浮点DSP算法实现【赛灵思工程师作品】
FPGA设计之浮点DSP算法实现,DSP算法是很多工程师在设计过程中都会遇到的问题,本文将从FPGA设计的角度来讲解浮点DSP算法的实现。FPGA设计之浮点DSP算法实现是赛灵思工程师最新力作,资料不可多得,大家珍惜啊1FPGA设计之浮点DSP算法实现[hide][/hide]
2012-03-01 15:23:56
fpga实现滤波器
本帖最后由 eehome 于 2013-1-5 10:03 编辑
fpga实现滤波器在利用FPGA实现数字信号处理方面,分布式算法发挥着关键作用,与传统的乘加结构相比,具有并行处理的高效性特点
2012-08-11 18:27:41
fpga实现滤波器
fpga实现滤波器fpga实现滤波器在利用FPGA实现数字信号处理方面,分布式算法发挥着关键作用,与传统的乘加结构相比,具有并行处理的高效性特点。本文研究了一种16阶FIR滤波器的FPGA设计方法
2012-08-12 11:50:16
在FPGA上建立MATLAB和Simulink算法原型的四种最佳方法
测试平台,采用系统级指标分析HDL实现 方案;通过FPGA在环仿真加速验证(图1)。为什么在FPGA上建立原型?在FPGA上建立算法原型可以增强工程师的信心,使他们相信自己的算法在实际环境中的表现能够
2020-05-04 07:00:00
在FPGA体系结构能够实现的并行运算
的提升。运算速度或者数据路径宽度都可以进一步提高,另外,时序操作可以在结构上增加一些并行度。这些措施中,每一种都可以提高一定的性能。在利用了目标FPGA器件灵活性的结构中实现算法,会获得比较大的好处
2021-12-15 06:30:00
FFT 算法的一种 FPGA 实现
点数的 FFT 运算。本文在分析衰减非周期分量对半波傅氏算法产生的影响的基础上, 介绍了几种新算法, 不仅保留了原来傅氏算法的功能, 又增添了对衰减非周期分量的滤波作用。新算法中差分傅氏算法计算量最少, 其为并联
2017-11-21 15:55:13
FFT算法的FPGA实现
在信号处理中,FFT占有很重要的位置,其运算时间影响整个系统的性能。传统的实现方法速度很慢,难以满足信号处理的实时性要求。针对这个问题,本文研究了基于FPGA芯片的FFT算法,把FFT算法对实时性
2010-05-28 13:38:38
MATLAB和Simulink算法原型如何在FPGA上适配?
,使用HDL编码器自动生成HDL代码具有众多明显优势。工程师可以快速地评估能否在硬件中实施当前算法;迅速评估不同的算法实现,选择最佳方案;并在FPGA上更快地建立算法原型。 对于DDC案例研究而言
2018-09-04 09:26:53
PID算法基本原理及其执行流程
在自动控制中,PID及其衍生出来的算法是应用最广的算法之一。各个做自动控制的厂家基本都有会实现这一经典算法。我们在做项目的过程中,也时常会遇到类似的需求,所以就想实现这一算法以适用于更多的应用场
2021-12-21 08:22:06
评论