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 各基本元算单元所采集到的中心削波值和三电平值的时序图
状态机为核心的状态转换逻辑,状态机根据计算出的各帧过零率及短时能量标识当前帧所处的状态(静音段,过渡段,语音段,结束),并根据触发条件完成状态转移以标记各语音段的始末端点。
本文关键字:检测 DSP/FPGA技术,单片机-工控设备 - DSP/FPGA技术