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和SOPCBuilder工具设计了语音记录SoPC系统中的G.726语音编解码器,并实现了编解码器在该系统中的综合。采用基于FPGA的G.726语音编解码器的语音记录嵌入式系统具有运行速度快、体积小巧、开发周期短等优点。
图1 ADPCM编码器框图
图2 基于FPGA的DSP设计系统级开发流程
1、G.726语音编解码标准
G.726编码器框图如图1所示。G.726语音编码器首先将输入的A律或μ律的log-PCM信号S(k)转换成线性的PCM码Sl(k),然后与预 测信号Se(k)相减产生差分信号d(k),再对差值信号进行自适应量化,产生2~5比特ADPCM码I(k)。一方面将I(k)送至解码器;另一方面逆 自适应量化器利用I(k)产生量化差分信号dq(k)。预测信号Se(k)和量化差分信号dq(k)相加产生本地重构信号Sr(k)。自适应预测器是由二 阶极点和六阶零点组成的滤波器,根据重构信号Sr(k)和量化差分信号dq(k)产生输入信号的预测信号Se(k)。量化器比例因子自适应单元根据输入信 号的特性计算量化器比例因子y(k),用来控制量化器和逆量化器,以获得自适应功能。量化器比例因子由快速因子和慢速因子两部分,以及速度控制因子 al(k)对这两部分的加权组成。速度比例因子al(k)的计算由自适应速度控制单元与音调和传送检测器单元完成。
G.726语音解码器的解码过程实际上已经包含在编码器中,只是多了输出PCM格式转换单元和同步串行编码调整单元。输出PCM格式转换是将线性PCM码转换为A律或μ律PCM码;同步串行编码调整是为了防止多级传输、转换过程中的误差。
2、基于FPGA的DSP设计开发流程
利用传统的开发工具,基于FPGA的DSP开发者在算法确定后只能直接使用VHDL或VerilogHDL语言进行FPGA的DSP系统设计,开发需要较长的周期,且难度比较大。目前出现的基于FPGA的DSP开发工具,如DSP Builder、SOPC Builder、System Generator等,使得设计者能遵循一条类似于软件设计流程的开发方法进行FPGA的DSP设计,设计效率大为提高。本文给出利用MATLAB/Simulink和Altear公司的开发工具进行基于FPGA的DSP设计的开发流程。DSP Builder是Altera公司推出的面向DSP开发的系统级工具。它作为MATLAB的一个Simulink工具箱(ToolBox)出现。MathWorks的MATLAB和Simulink系统级的设计工具具备了算法开发、仿真、验证能力,DSP Builder将这些工具与Altera的开发工具组合在一起,为用户提供了一个完整的DSP开发平台。
基于FPGA的DSP设计系 统级开发流程如图2所示。其步骤:(1)在MATLAB/Simulink中对DSP系统进行建模,用图形方式调用Altera DSP Builder和其他Simulink库中的图形模块(Block),构成系统级和算法级设计框图,同时利用Simulink完成模型仿真。(2)利用 DSP Builder将Simulink的模型文件(.mdl)转化成通用的硬件描述语言VHDL文件(.vhd),转换获得的HDL文件是基于RTL级的 VHDL描述。(3)对转换过程中产生的VHDL的RTL代码和仿真文件进行综合、编译适配以及仿真。所用工具可以是Altera的Quartus II软件,也可以是第三方软件工具。(4)在DSP Builder中直接下载到FPGA用户开发板上,也可通过Quartus II完成硬件的下载、测试。整个开发流程几乎可以在同一环境中完成,真正实现了自顶向下的设计流程,极大地缩短了DSP设计周期。
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) (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语音编解码器的性能基本上达到了设计要求。
参考文献
1 潘 松,黄继业,王国栋.现代DSP技术[M].西安:西安电子科技大学出版社,2003
2 王海平,刘 琚.定点DSP实现ITU-T G.726语音编解码标准[J].电子技术,2003;(12):33~35
3 任爱锋,初秀琴.基于FPGA的嵌入式系统设计[M].西安:西安电子科技大学出版社,2004
4 Shorten DSP Design Cycle Using Complex IP in MATLAB/Simulink to Quartus II Flow[J].
Altera Corporation News & Views,Third Quarter 2002
5 Altera Corporation. DSP Builder User Guide,2004
6 Altera Corporation. DSP Builder Reference Manual,2004