全文内容: G.726是ITU前身CCITT于1990年在G.721和G.723标准的基础上提出的关于把64kbps非线性PCM信号转换为40kbps、32kbps、24kbps、16kbps的ADPCM信号的标准。G.726标准算法简单,语音质量高,多次转换后语音质量有保证,能够在低比特率上达到网络等级的话音质量,从而在语音存储和语音传输领域得到广泛应用[2]。
G.726语音压缩算法已经能够在以DSP处理器为器件的DSP应用系统上实现。但开发以DSP处理器为的DSP应用系统所采用的开发方法是自底向上的设计流程,严重影响开发的效率和成功率。面对现代通信技术的发展,DSP处理器已暴露出硬件结构的不可变性、处理速度比较慢等不足[1]。现代大容量、高速度的FPGA及其相关的开发技术,在可重配置的DSP应用领域、DSP数据大吞吐量和数据的纯硬件处理方面,有独特的优势[1]。新的基于FPGA的DSP系统级开发工具以及完整的软件开发平台,使得设计者能采用自顶向下的开发方法进行FPGA的DSP设计,设计效率大为提高。
本文分析了G.726标准,给出了基于FPGA的DSP设计开发流程,利用MATLAB/Simulink、Altera公司的DSP Builder和SoPC Builder工具设计了语音记录SoPC系统中的G.726语音编解码器,并实现了编解码器在该系统中的综合。采用基于FPGA的G.726语音编解码器的语音记录嵌入式系统具有运行速度快、体积小巧、开发周期短等优点。
3 G.726语音编解码器在SoPC中的实现
3.1 G.726标准算法的简化
本文设计的编解码器是在语音记录系统中实现G.726建议的速率为32kbps的ADPCM算法,根据实际情况对算法进行了一些简化和改进。
具体简化如下:(1)由于此系统中编解码器的输入信号是线性PCM码,因此PCM码转换模块可以省略。(2)这个算法是用在单纯的语音存储中,可不进行单音/过渡音检测。(3)对量化器比例因子y(k)的更新进行简化。y(k)的更新计算为:
y(k)=al(k)yu(k-1)+[1-al(k)]yl(k-1)&n bsp; (1)
一般情况下,只有语音信号时,al(k)是趋于1的;当输入为平稳信号时,al(k)的值则在0至1之间。对语音存储系统,在输入只有语音的情况下可以粗略地认为al(k)的值近似为1,从而将计算得到的快速比例因子yu(k)直接作为新的比例因子y(k),即y(k)=yu(k-1),降低了算法的复杂度。
3.2 G.726算法在Simulink中的建模
在Simulink中利用Altera DSP Builder库模块建立用于FPGA定点实现的模型。这里给出G.726编码器模型的设计。整个设计采用多层次结构,在顶层设计模型下包括多个子系统模块模型,如自适应量化器子系统模型、逆自适应量化器子系统模型、量化器比例因子自适应子系统模型等。下面重点分析编码器系统中的顶层设计模型及自适应量化器子系统模型。
3.2.1 编码器的顶层设计模型
顶层模型提供了对外的PCM语音接口,同时也提供了对Avalon总线的接口,使得所设计的编码器模块可通过SOPC Builder集成为Nios II系统的一个外围设备。模型中的自适应量化器模块、逆自适应量化器模块、量化器比例因子自适应模块和自适应预测器模块均为HDL SubSystem。编码器的顶层设计模型如图3所示。
图3 ADPCM编码器模型
图4 自适应量化器模型
其中SignalCompiler模块是DSP Builder的心脏。其主要完成的功能包括:(1)将Simulink设计转变成可综合的RTL级VHDL代码;(2)产生VHDL testbenches;(3)为LeonardoSpectrum、Synplify和Modelsim第三方EDA工具产生Tcl脚本文件;(4)为Quartus II的仿真产生仿真矢量文件(.vec);(5)产生PTF配置文件,用于将设计自动地输给SOPC Builder工具。SignalCompiler控制着设计系统的综合、编译和仿真的流程。
根据G.726语音算法的需求,系统需要两个时钟,分别为8kHz和120kHz,其中120kHz用于自适应预测器子系统。因此需要在模型中利用锁相环模块PLL实现多时钟设计,产生所需的两个时钟,DSP Builder根据PLL输出时钟的上升沿工作。在Simulink设计图上不会显示时序模块的时钟引脚,而是当SignalCompiler将系统转化为VHDL文件时才自动地把时序模块的时钟引脚与相应时钟相连。
3.2.2 编码器的自适应量化器子系统模型
自适应量化器模型如图4所示。自适应量化在对数域内进行,在用量化比例因子对差分信号进行规格化处理后,通过查找量化器规格化输入/输出特性表,即得到ADPCM码。对数运算在Simulink中的实现是借助于查找表的方式,使用DSP Builder子库中的LUT模块;规格化输入/输出特性表的实现是采用ROM查表法的方式,用ROM EAB模块实现。
由于ADPCM语音编解码算法终要在FPGA上实现,Simulink的浮点值必须转换成定点值并能在目标硬件实现。硬件中表示定点值的位数以及小数点的位置不但会影响构成硬件系统的资源利用率,还影响系统的特性。本设计中根据信号的应用范围判定小数点的位置,并根据实际需要改变小数点右侧的位数,以节省硬件资源,灵活地应用总线控制库中的模块来对总线进行截位、增位、位提取或进行数据类型转换等操作,以达到所需求的。
3.3 G.726算法模型的仿真过程
利用MATLAB/Simulink和DSP Builder工具进行基于FPGA的DSP设计需要进行一系列的仿真。在Simulink中设计的模型首先要在Simulink中仿真,不仅是验证模型的正确性,而且因为用于ModelSim仿真的TestBench文件中的输入信号激励是由SignalCompiler根据Simulink的仿真结果产生,并且只有仿真后利用SignalCompiler转换产生的VEC文件才有效。在Simulink中完成仿真验证后,使用SignalCompiler将模型进行设计转换。
对于设计转换后产生的VHDL文件,必须进行RTL级仿真。因为Simulink中模型仿真是算法级的,而生成的VHDL描述是RTL级的,两者描述的情况可能不完全符合,因此需要对生成的RTL级VHDL代码进行功能仿真。仿真可通过在ModelSim中运行转换过程所生成的Tcl脚本文件。可以利用转换过程生成的VEC文件,在Quartus II软件中进行时序仿真。本设计对上述建模的语音编码器完成了仿真,Simulink的仿真结果与ModelSim的仿真结果基本一致,表明两者描述相符合;Quartus II的时序仿真结果表明所设计的语音编码器达到了预期的结果。
3.4 编解码器模块在SoPC系统中的综合
编码器模型在Quartus II综合和编译后,可以使用SOPC Builder将其作为外围设备添加到Nios II系统中。SignalCompiler生成的PTF配置文件可用于将设计自动地输给SOPC Builder工具。所设计的编码器出现在SOPC Builder的模块池中,将其添加到所创建的系统中即可。所建SoPC系统元件页如图5所示,图5中只列出了语音记录系统的一部分组件。利用SOPC Builder即可生成一个完整的系统,生成编程文件,进行硬件的,完成G.726语音编码器在SoPC中的设计。
图5 SoPC系统元件页
由于DSP Builder中的DSP基本模块以算法级的描述出现,而且采用Simulink图形化界面,因此设计非常直观,实现了自顶向下的开发流程。与传统DSP开发相比,大大缩短了创建DSP设计的硬件的开发周期。设计的编解码器可作为Nios II系统的外围设备,通过SOPC Builder很方便地综合到SoPC系统中。同时,由于设计是在基于FPGA的SoPC上实现,因此可以根据实际需求更改设计,对系统进行重配置,具有很高的灵活性。本G.726语音编解码器的性能基本上达到了设计要求。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。