语音特征参数MFCC的提取及识别

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

语音特征参数MFCC的提取及识别

耳蜗实质上相当于一个滤波器组,耳蜗的滤波作用是在对数频率尺度上进行的,在1000HZ下,人耳的感知能力与频率成线性关系;而在1000HZ以上,人耳的感知能力与频率不构成线性关系,而更偏向于对数关系,这就使得人耳对低频信号比高频信号更敏感。Mel频率的提出是为了方便人耳对不同频率语音的感知特性的研究。频率与Mel频率的转换公式为:

MFCC在一定程度上模拟了人耳对语音的处理特点,应用了人耳听觉感知方面的研究成果,采用这种技术语音识别系统的性能有一定提高。

MFCC参数的提取1、

预加重处理

预加重处理其实是一个高通滤波器,该高通滤波顺的传递函数为:

其中的取值为0.97,该高通滤波器作用是滤去低频,使语音信号的高频特性更加突现。

2、

分帧及加窗处理

由于语音信号只在较短的时间内呈现平稳性(一般认为

10-30ms),因此将语音信号划分为一个一个的短时段即一帧。同时为避免丢失语音信号的动态信息,相邻帧之间要有一段重叠区域,重叠区域一段为帧长的1/2或1/3。然后再将每帧乘上窗函数,以增加每帧左端和右端的连续性。

3、

各帧信号的FFT变换

对分帧加窗后的各帧信号进行FFT变换得到各帧的频谱。并对语音信号的频谱取模平方得到语音信号的功率谱。

4、

三角滤波器系数的求取

定义若干个带通三角滤波器(k),0<=m<=M,M为滤波器个数,其中心频率为f(m),每个带通三角滤波器的频率响应为

且满足Mel(f(m))-Mel(f(m-1))=Mel(f(m+1))-Mel(f(m))

求得滤波系数为m(i),i=1,…,p,p为滤波器阶数

5、

三角滤波并进行离散余弦变换DCT

C(i)即为所要求提取的特征参数。

特征参数的识别

特征参数的识别主要采用BP神经网络算法进行预测,而在预测前需要用一定数量的样本对网络进行训练,使网络具有联想记忆和预测能力。

网络训练步骤如下:

(1)

网络初始化。确定网络输入层、隐层、输出层数目,输出层到隐层的连接权值及隐层到输出层的连接权值,同时初始化隐层阈值a和输出层阈值b;

(2)

隐层的输出计算。隐层输出式中,l为隐含层节点数;f为隐含层激励函数,本实验选取函数为:

(3)

输出层输出计算。根据隐含层输出H,连接权值和阈值b,计算BP神经网络预测输出O.

(4)

误差计算。根据网络预测输出O和期望输出Y,计算网络预测误差e.

(5)

权值更新。根据网络预测误差e更新网络连接权值,

其中,为学习速率。

(6)

阈值更新。根据网络预测误差e更新网络节点阈值a,b. (7)

判断算法迭代是否结束,若没有结束,返回步骤(2)。

BP神经网络分类

用训练好的BP神经网络分类语音特征信号,根据分类结果分析BP神经网络分类能力。

将四种音乐风格的数据各1500组共6000组MEL特征数据随机抽取4000组进行训练网络,剩下的2000组特征向量进行辨识,得到各类风格的正确率如下:

rightridio =

1.0000

0.9261

0.9129

0.8399

下图为BP网络误差:MATLAB程序如下:

clear;

clc;

%%%%%%%%采集的四种音乐各500000个数据%%%%%%%%%%%%%%%%%%%%%

load f:\课程\voice_reco\c1 x1

load f:\课程\voice_reco\c2 x2

load f:\课程\voice_reco\c3 x3

load f:\课程\voice_reco\c4 x4

%%%%%%%%%%%%%%%对语音信号进行预加重处理%%%%%%%%%%%%%%%%%%

len=length(x1);

heigt=0.98;

for i=2:len

x1(i)=x1(i)-heigt*x1(i-1); end

for i=2:len

x2(i)=x2(i)-heigt*x2(i-1); end

for i=2:len

x3(i)=x3(i)-heigt*x3(i-1);

end

for i=2:len

x4(i)=x4(i)-heigt*x4(i-1);

end

%%%%%%%%%%%%%%MEL三角滤波参数%%%%%%%%%%%%%%%%%%%%%%%%%%%

fh=20000;

melf=2595*log(1+fh/700);

M=24;

i=0:25;

f=700*(exp(melf/2595*i/(M+1))-1);

N=256;

for m=1:24

for

k=1:256

x=fh*k/N;

if (f(m)<=x)&&(x<=f(m+1))

F(m,k)=(x-f(m))/(f(m+1)-f(m));

else if (f(m+1)<=x)&&(x<=f(m+2))

F(m,k)=(f(m+2)-x)/(f(m+2)-f(m+1)); else

F(m,k)=0;

end

end

end

end

m=N/2;

for k=1:12

相关文档
最新文档