1 引言
传统的DSP处理器的硬件结构的不可变性已成为DSP处理器一个难以突破的瓶颈。随着达数百万门高密度的FPGA的出现,FPGA在原有的高密度的逻辑宏单元的基础上嵌入了许多面向DSP的专用硬核模块,结合大量可配置于FPGA硬件结构中的参数化的DSP IP软核,DSP开发者能十分容易地将整个DSP应用系统实现在一片FPGA中,从而实现了所谓的可编程SOC系统,即SOPC,它具有灵活的用户可定制性。
基音周期估值是语音处理中的一个十分重要的问题。基音检测器可用于声码器、说话人确认和辨认系统以及有生理缺陷的人用的辅助用具,这使得基音周期估值在语音信号处理领域中占有举足轻重的地位,因此将它硬件化,提高其执行效率以适应其应用场合的需要将是一件很有意义的事情。
2基音周期提取算法的确定及软件实现
2.1算法概述
基音周期估值是语音处理中的一个十分重要的问题。目前有多种基音周期提取算法,这些方法从不同角度来提出其解决方案,以克服语音信号中如噪音、说话人差异等对特征提取时的干扰,但都有它们的局限性,所以可以说,对各种说话人、广泛的应用及使用环境都能给出满意结果的有效的基音检测方法至今还没有出现。
本文选取了一种目前较成熟的通过自关函数进行基音周期检测的算法。其整个过程全面涉及了语音信号时域处理方法中的“能量分析”、“过零分析”及“相关分析”三大分析技术。其算法的可行性已在MATLAB中进行软件模拟。
2.2系统框图
考虑到背景噪声和提取结果出现跳变等问题,整个系统最终确定由下面三个部分构成:(i)端点检测模块;(ii)基音频率提取模块;(iii)平滑处理模块。其工作流程可由图1表示。
图1 基音检测系统工作流图
本文选取了32kHz采样频率PCM音频格式的wav文件作为系统的输入数据,输出为每帧的基音频率值。最后通过对相关参数(比如端点检测模块中所确定的双能量门限及双过零率门限,基音检测模块中的清浊判别门限以及平滑处理模块中的滑动窗长)的不断调整,可以很好地解决清浊误判,语音段数据漏判以及尖峰的出现等问题。
3基音周期特征提取算法的DSP实现
3.1 DSP Builder开发环境的确定
DSP Builder可以帮助设计者完成基于FPGA的DSP系统设计。除了图形化的系统建模外,DSP Builder还可以自动完成大部分的设计过程和仿真,直至把设计文件下载到DSP开发板上。利用MatlabDSP Builder进行DSP模块设计是SOPC技术的一个组成部分。利用DSP Builder和基本Nios CPU,用户可以根据设计项目的具体要求,随心所欲地构建自己的DSP处理器系统,而再也不必拘泥于其他DSP公司已上市的有限款式的DSP处理器。
3.2系统整体分析及模块划分
从DSP模块的顶层来看,该模块就是完成语音信号的采集,然后以一定的频率输出从各帧中提取的基音频率值。图2是整个DSP系统的顶层模块图。
图2 整个DSP系统的顶层模块
d[1].[20]:输入。归一化的语音采样信号值,取小数点后20位(二进制)
ena:输入。输入使能信号,当该信号有效时,模块读入d[1].[20]端口的信号。
rd:输入。读信号,当该信号有效时,提取的基音频率值将从Out[8:0]口被读出。
CS:输入。片选。
Out[8:0]:输出。基音频率值的输出端口,9位无符号数。该端口的数据读出受rd控制。
data_available:输出。当基音频率提取完毕时,该端口置1,此时对数据的读出才为有效数据,否则产生未知结果。
按照算法部分的划分,在DSP实现部分仍采用整个系统由端点检测模块,基音频率提取模块和平滑处理模块三大子模块的构成方式,但不同的是端点检测模块和基音频率提取模块采用并行处理方式,由于这两个模块的功能相对独立,最后进行平滑后处理。整个系统的互连逻辑可由图3表示。
图3 基音周期提取、端点检测、平滑处理三大模块的互连逻辑图
基音频率提取模块根据输入数据将提取的基音频率值存入一FIFO中,端点检测模块将提取到的语音文件中的所有语音段的始末端点存入两个FIFO中,各语音段的起始点存入FIFO1中,终止点存入FIFO2中,当两个模块将结果全部存入相应的FIFO中,三个FIFO开始同步工作,与基音频率提取模块相连的FIFO的当前输出是提取出的该帧的基音频率,而FIFO1和FIFO2的当前输出表示某一个语音段的始末端点,当前扫描帧或尚未进入这两个端点所界定的帧范围,或正处于这个帧范围之中。对于前者,这应通过判断逻辑使2-1多路选择器将基音频率置0;对于后者,应通过判断逻辑使2-1多路选择器选取基音频率提取模块所提取出的基音频率。判断逻辑的另一任务是当当前扫描帧已跨出两端点界定的帧范围时,使FIFO1和FIFO2读出新一对端点,即读出下一个语音段的始末端点。最终的各帧的基音频率通过平滑处理模块处理后送入另一FIFO,等待读信号将其读出。
3.3详细设计
基音频率提取模块的主要任务是根据采样信号按照自相关法进行基音周期提取,然后以一定频率输出提取到的各帧的基音频率。对于基音频率提取模块,主要由五大子模块构成:滤波器模块、帧缓存模块、削波门限电平提取模块、削波模块(中心削波,三电平削波)、互相关值提取模块。滤波器模块对采样信号进行900Hz的低通滤波,以确保处理以后的信号只含有第一共振峰以下的基波和谐波分量,DSP Builder为设计者提供了数字信号处理中常用的一些MegaCore核,这里可以根据设计直接调用其中的fir_compiler并进行参数化设置,极大地简化了设计过程;帧缓存模块对处理后的数据进行分帧,这里需确定帧移(相邻帧间的数据重叠,本文选取帧移为1/2帧);削波门限提取模块根据自相关法的算法要求完成对一帧的数据的削波门限电平的提取;削波模块根据提取出的削波门限电平完成中心削波和三电平削波,同时完成该帧短时能量的计算(考虑到短时能量计算的相对独立性,该任务从互相关值提取模块中分离出来);互相关值提取模块的主要任务是完成互相关值 (k=64,65,…,500)(由于选取的是30阶低通滤波器,取求和下限为31,1280为根据所选取的测试对象而确定的帧的大小,k当取值64-500时恰对应于基音频率的500Hz-64Hz,y´为相应y的三电平值)的计算,由于对每一个R(k)的计算,都要几乎扫描完整个帧,故其庞大的计算量导致此模块在执行效率上将成为整个基音频率提取部分的瓶颈。为了避免额外的空间开销,若采用串行解决方式(即计算完R(64)再计算R(65),计算完R(65)再计算R(66),依此类推),则该模块需工作在一个更高的时钟频率上,而一个系统中对一部分模块进行一个大幅度的工作频率的提高,将会导致Simulink仿真效率的大幅下降,这里通过并行方式解决该问题,虽然这需要花费更多的器件(通过复用多个基本运算单元,所有运算单元同时进行计算,每个基本运算单元完成一个R(k)的计算),但换取时间效率上的提高还是值得的。这种处理方法只需对各帧数据进行一次扫描即可同时得到R(64),R(65),…,R(500)的处理结果。设计思想是每扫描完一个数据,就应使其参与到所有互相关值的计算中而避免被再次扫描。实现途径是:当前的三电平值同时送往所有的基本运算单元,而中心削波值只在开始送入第一个基本运算单元,而其它的基本运算单元的中心削波值由其前一个基本运算单元的中心削波值经一个周期的延迟而得到,这样中心削波值将会由第一个基本运算单元通过延迟一级一级传到最后一个。其时序如图4所示(图中数字表示帧序号),这样各基本运算单元的输出即为相应的互相关值R(k) (k=64,65,…,500),达到了仅对中心削波值和三电平值扫描一次便可计算出所有互相关值的效果,大大提高了运行的时间效率。
端点检测模块由三个核心部分构成:各帧过零率的提取,各帧短时能量的提取和一个以
图4 各基本元算单元所采集到的中心削波值和三电平值的时序图
状态机为核心的状态转换逻辑,状态机根据计算出的各帧过零率及短时能量标识当前帧所处的状态(静音段,过渡段,语音段,结束),并根据触发条件完成状态转移以标记各语音段的始末端点。
平滑后处理模块依据中值滤波平滑处理,采用5点长的滑动窗口对提取出的基音频率进行后处理。
4 DSP加速模块与NIOS的整合及综合仿真测试
4.1基于Simulink的仿真
各模块整合后,即可添加激励及信号接收终端进行Simulink仿真。
4.2 处理器系统的构建
通过DSP Builder设计出的DSP模块可以成为单片FPGA电路系统中的一个组成部分,以担任某个局部电路的功能,另一方面,也可以直接通过DSP Builder为Nios嵌入式处理器设计各类加速器,从而成为Nios系统的一个接口设备,与整个片内嵌入式系统融为一体,使得Nios的通用性和DSP加速模块的专用性恰到好处地结合在了一起,使DSP处理器系统的灵活性得到了最大程度的体现。当Nios接收到对语音数据进行基音频率提取的任务时,它会将需处理的原始数据送往DSP加速模块,DSP加速模块对数据进行处理并将处理结果转交给Nios处理器,由Nios送往相应终端进行结果显示或进行其它处理,从而构建起整个SOPC系统。需要特别说明的是,Nios系统的所有外设都是通过Avalon总线与Nios CPU相接的,DSP加速模块也不例外,该模块若与Nios进行信息交换,必须通过Avalon总线,也就是说,所设计出的DSP模块应该有与Avalon总线的接口。DSP Builder提供了SOPC Builder Links库,其中的AVALON Ports提供了各种与Avalon总线相连接的功能端口,本设计需根据所完成的DSP模块各端口的功能为其添加Avalon总线接口。
DSP模块功能验证后,即可加载DSP Builder中的核心模块“SignalCompiler”,以完成模型分析、 MDL到VHDL的转化、综合及适配。最后在SOPC Builder中完成将该模块与Nios的整合,以使DSP能成为挂接到Nios的一个硬件加速模块。此后即可完成下载,并在Nios的集成开发环境(IDE)中编写测试程序对整个处理器系统进行测试。
4.3 性能评估
经分析,从输入最后一个数据到开始陆续得到最终结果(由于算法的限制,该系统并不是一个实时系统),需N*T/2时间(T为一个基本工作周期,N为语音数据的帧数),若从DSP向外输出数据的周期仍为T,那么送出数据共需N*T时间,两者之和为3N*T/2,即从输入最后一个数据到所有数据输出,共需时间3N*T/2。这种执行效率与软件相比,其优势是显而易见的,从理论上讲,软件没有执行上的并行性可言,也就是说对于顺序执行的子函数而言,只有前一个子函数执行完毕,后一个子函数才能执行,比如端点检测部分和基音频率提取部分只能顺序执行,而不像硬件那样,端点检测与基音频率提取可以分成两个独立的模块同时并行地对输入数据进行处理。对于语音内容为“你好”的1.1s的语音数据而言,Matlab的软算法的平均耗时在0.8-0.85秒之间(运行环境为1.73GHz主频,256MB内存)。但若令T=1/1.73G,代入到3N*T/2中(N=54),其延迟只有4.36×10-8秒,可见差异的显著。而这种差异将随N的增大而更加显著。可见,该算法的DSP实现使整个执行效率有了大幅度的提高,达到了预期的效果。
5 结语
本文尝试采用基于Altera硬件设计的一套新的设计流程和设计思路,不同于传统的在MAX-PLUS II和Quartus II中面向RTL级的硬件设计思路,转向了以MatlabSimulink为基本平台,以DSP Builder为其中的Blockset的面向系统级和算法级的硬件设计思路,同时充分利用了Simulink的强大的仿真功能,而在将系统级模型向RTL级模型转化时,完全通过DSP Builder的核心模块SignalCompiler自动实现,并同时完成综合和适配,若采用自动设计流程,甚至可以在Simulink中完成下载。这种设计思路有益于复杂算法的硬件化设计,将设计者的视线从Quartus中更多地转移到了MatlabSimulink中,使设计者考虑问题的着眼点从传统围绕底层的硬件实现转移到上层面向算法的实现和整个系统的构成。而在原来需要考虑过多的底层实现问题,通过SignalCompiler模块的强大功能,只是一蹴而就的事。
本文作者创新点在于通过一套新的设计流程,面向最终的应用(即实现基音周期特征的提取),并充分利用FPGA的优势,实现了彻底的硬件执行架构的设计,而不同于以往更多的周旋于软件层面的编程,同时以DSP Builder作为开发平台,按照自顶向下的设计思想,极大地简化了DSP核的设计,同时使算法的DSP设计结果实现了执行效率上的飞跃。
参考文献:
1 L.R.拉宾纳,R.W.谢弗. 语音信号数字处理. 北京:科学出版社,1983
2 易克初,田斌,付强. 语音信号处理. 北京:国防工业出版社,2000
3 王朝英,冯新喜. 信号处理原理. 北京:清华大学出版社,北京交通大学出版社,2005
4 邹鲲,袁俊泉,龚享铱. MATLAB 6.x信号处理. 北京:清华大学出版社,2002
5 张智星. MATLAB程序设计与应用. 北京:清华大学出版社,2002
6 何强,何英. MATLAB扩展编程. 北京:清华大学出版社,2002
7 潘松,黄继业,曾毓. SOPC技术实用教程. 北京:清华大学出版社,2005
8 彭澄廉,周博,丘卫东,陈燕,周学功,方茁. 挑战SOC-基于Nios的SOPC设计与实践. 北京:清华大学出版社,2004
9 潘松,黄继业,王国栋. 现代DSP技术. 西安:西安电子科技大学出版社,2003
10 Altera Corp. DSP Builder Reference Manual,2005
11 Altera Corp. DSP Builder User Guide,2005
12 杨守良. 利用Matlab/DSP Builder实现DDS的设计. 微计算机信息,2006, 7-2:211-212