文献标识码:A
文章编号: 0258-7998(2012)11-0016-03
说话人识别作为一种生物识别技术,能够根据测试语音来辨别说话者的身份。说话人识别的过程可以分为语音信号预处理、特征提取和识别判断三部分。其中,识别判断由码本训练和识别两部分组成,其原理如图1所示。
语音信号的预处理包括采样和量化、预加重、分帧、加窗、端点检测等。预处理的目的是去除噪声,加强有用的信息,并对输入应测量仪器或其他因素造成的退化现象进行复原。
特征提取是系统的关键部分。近年来,一种能够比较充分利用人耳非线性系统感知特性的参数得到了广泛的应用,这就是Mel频率倒谱系数[1]。临界频率带宽随着频率的变化而变化,并与Mel频率增长一致[2]。在1 000 Hz以下大致呈线性分布,带宽为100 Hz左右;在1 000 Hz以上呈对数增长,具体如式(1)所示:
1 识别系统设计
本文设计的说话人识别系统的应用背景为文本相关的闭集识别[4]。通过对待识别者语音信号的采集分析,系统能够识别出系统内注册人员的身份。
1.1 系统整体架构
通过对具体功能的分析,系统的整体框架可以采用图3所示的形式。其工作流程为:采集待识别者3 s的语音数据并将其保存在片外SRAM中;在采集的同时进行端点检测;完成端点检测后,对有效的语音数据进行Mel倒谱系数的提取;用码本库中的码本对待识别者语音特征进行量化,判断最小失真码本;最后进行阈值比较,并用数码管显示识别结果。
系统的硬件平台为Altera公司提供的EP2C35F672C6开发板。它由33 216个LE组成,片上有105个M4K-RAM块,RAM总量为483 840,并且其片上有4个锁相环。
1.2 功能模块分析
算法实现模块主要包括:预处理模块、特征提取模块、码本库和识别模块。其工作流程如下:首先,预处理模块对输入的语音数据进行实时处理,判断录音是否有效;其次,对有效的语音数据进行特征提取,形成待测码本;接着,用码本库中的码本对待测码本进行矢量量化;最后,对量化结果进行判断,输出识别结果。
2 说话人识别系统的FPGA实现
系统的硬件结构主要包括语音采集模块、端点检测模块、特征提取模块和VQ识别模块。
2.1 语音采集模块
语音采集模块包括语音数据的采集和存储两部分,由WM8731控制单元和格式转换单元组成。系统通过I2C总线来实现对WM8731的控制,I2C控制器的时钟输入由系统时钟分频得到。系统时钟为50 MHz,分频得到I2C控制器时钟为20 kHz。由于WM8731采集的16 bit语音数据是串行输出的,因此在进行后续处理之前需要进行串行到并行格式的转换。
2.2 端点检测模块
本文采用基于短时能量和短时平均过零率的双门限检测法,将加窗处理放在特征提取的过程中进行。
一般情况下,在预加重单元中,预加重系数的值接近于1。在0.9~1之间,其典型值为0.94。为方便硬件编程,将一阶FIR滤波器用差分方程表示为:
其中,data为16 bit输入数据,Data为8 bit输出数据。把输入信号中大于-20且小于20的数据置0,可以有效地降低白噪声对过零率造成的影响。
端点检测模块的RTL级视图如图5所示。其中,vad_part1_sp2为数据转换单元;vad_d1为有效位延迟单元;vad_part2_sp1为短时能量和短时平均过零率计算单元;vad_part3_sp1为帧端点检测单元。
在帧端点检测单元中,en为输入使能标志位,energy和zcr分别为输入帧短时能量和短时平均过零率,enGate为短时能量阈值寄存器,zcrGate为短时平均过零率阈值寄存器,BeginLen为起始点帧长阈值,EndLen为结束点帧长阈值,flag1为起始点检测完成标志位,flag2为结束点检测完成标志位。具体检测步骤如下:
(1)初始化各寄存器。
(2)en有效时,对前10帧数据的短时能量和短时平均过零率求和,counter1用于计数。
(3)当counter1=10时,把前10帧数据的短时能量和短时平均过零率均值分别存于寄存器enGate和zcrGate中,完成阈值计算。
(4)对输入信号进行判断:当输入帧energy或zcr大于阈值时,用寄存器framebegin记录帧号,并执行步骤(5);否则,重复步骤(4)。
(5)counter2对输入帧计数。当输入帧energy或zcr小于阈值时,counter2和framebegin清零,返回步骤(4);当counter2>BeginLen时,起始帧检测结束,flag1置1,并执行步骤(6)。
(6)当输入帧energy和zcr都小于阈值时,用寄存器frameend记录帧号,并执行步骤(7);否则,重复步骤(6)。
(7)counter3对输入帧计数。当输入帧energy或zcr大于阈值时,counter3和frameend清零,并返回步骤(6);当counter3>EndLen时,结束帧检测完成,flag2置1,并执行步骤(8)。
(8)当flag1和flag2同时有效时,输出起始帧号和结束帧号;否则,error置1。
2.3 特征提取模块
特征提取中的FFT运算单元采用按时间抽取基2算法[5]。一帧数据(128点)的FFT可分为7级运算,每级包括64个蝶形运算单元。总体硬件结构图如图6所示,主要包括倒序模块、存储单元、蝶形运算单元、地址发生器和控制单元5个部分。
2.4 VQ识别模块
识别就是寻找最小失真码书的过程,其硬件结构如图7所示。将未知矢量序列与码书中的各个码字进行欧氏距离检测,累加得到的误差值就是该码书的失真值。最小失真的码书即为判决对象。其中,计数模块用于统计未知矢量序列,地址发生器控制码本输出。当所有码书对输入矢量量化结束后,判决模块检测最小失真码书并输出结果。
本文采用平方误差欧氏距离测度。对一个待测码本进行矢量量化的具体步骤如下:
(1)初始化各个寄存器。
(2)对输入帧数据进行欧氏距离检测,c1=c1+1。
(3)对检测结果进行累加求和,如c1<128,则执行步骤(2);否则,执行步骤(4)。
(4)输出累加结果,量化完毕。
本系统码本的训练在PC上完成。码本的存储采用单精度浮点数形式,一个码本的大小为128 bit×12 bit×32 bit,共6 KB。
实验结果表明,在系统时钟为50 MHz的条件下,FPGA的处理速度是PC机的18倍,具有更好的实时性能。
参考文献
[1] Xie Qiuyun,Xiao Tiejun.Implementation ofMFCCextraction in speech recognition based on FPGA[J].Computer Engineering and Design,2008,29(21):5474-5475.
[2] 王玥.说话人识别中语音特征参数提取方法的研究[D].长春:吉林大学,2009.
[3] Wei Han.An efficient MFCC extraction method in speech recognition[C].Kos,Greece:ISCAS,2006:145-148.
[4] 潘灏.语音识别门禁系统关键技术研究[J].科技情报开发与经济,2009,19(11):87-89.
[5] 杨静.基于FPGA的FFT处理器设计与实现[J].化工自动化及仪表,2010,37(3):107-109.