5.2.3隐马尔可夫模型
HMM过程是一个双重随机过程:一重用于描述非平稳信号的短时平稳段的统计特征(信号的瞬态特征);另一重随机过程描述了每个短时平稳段如何转变到下一个短时平稳段,即短时统计特征的动态特性(隐含在观察序列中)。人的言语过程本质上也是一个双重随机过程,语音信号本身是一个可观测的时变列。可见,HMM合理地模仿了这一过程,是一种较为理想的语音信号模型。其初始状态概率向量π,状态转移概率矩阵向量A,以及概率输出向量B一起构成了HMM的3个特征参量。HMM 模型通常表示成λ={π,A,B}。
5.2.4HMM模型的三个基本问题
HMM模型的核心问题就是解决以下三个基本问题:
(1)识别问题:在给定的观测序列O和模型λ=(A,B,π)的条件下,如何有效地计算λ产生观测序列O的条件概率 P(O︱λ)最大。常用的算法是前后向算法,它可以使其计算量降低到N2T次运算。
(2)最佳状态链的确定:如何选择一个最佳状态序列Q=q1q2…qT,来解释观察序列O。常用的算法是Viterbi算法。
(3)模型参数优化问题:如何调整模型参数λ=(A,B,π),使P(O︱λ)最大:这是三个问题中最难的一个,因为没有解析法可用来求解最大似然模型,所以只能使用迭代法(如Baum-Welch)或使用最佳梯度法。
5.2.5系统框图
原始语音数据特征参数提取端点检测数据储存模型训练模型库识别结果识别
图5 系统整体结构框图
5.2.6 实施方案
实施方法及具体过程如下: (1)端点检测vad(x):采用双门限的算法。输入为采样语音数据x,输出X1,
10
X2是起始端点和结束端点的帧数,并将xi到x2帧的语音数据存sample(k).wave结构数组中。
(2)MFCC参数算法mfcc(x):输入为采样语音数据x,输出为mfcc参数,取x1—2至x2—2帧的mfcc参数到sample(k).data结构数组中。
(3)HMM参数初始化inithmm(samples,M):输入为samples和NX*1的数组M,N为状态数,M是每个状态包含的高斯混合个数。
(4)viterbit识别算法:输入删模型和mfcc参数,回溯最佳状态路径,返回输出概率和状态路径。
(5)训练过程train(sample,M):对一次迭代函数baum.m实施n次迭代(设 置迭代次数)。输出为训练后的HMM模型参数和总输出概率,将模型参数存入 hmm{i}(hmm为一个cell数组)。
(6)识别主程序(recog):对输入待识别的语音用函数vad进行端点检测, 计算出MFCC参数之后,交由识别函数viterbi.m计算得到其对数形式的输出概率,最后显示出识别结果。
5.3 问题三
5.3.1 LP分析基本原理
LP分析为线性时不变因果稳定系统V(z)建立一个全极点模型,并利用均方误差准则,对已知的语音信号s(n)进行模型参数估计。
如果利用P个取样值来进行预测,则称为P阶线性预测。假设用过去P个取样值
?S?n?1?,S?n?2?,?pS?n?p??的加权之和来预测信号当前取样值
S?n?,则预测信号
S?n??为:
S?n???ak?n?k?k?1 (1)
其中加权系数用ak表示,称为预测系数,则预测误差为:
e?n??s?n??S?n??s?n???ak?n?k?k?1?p (2)
要使预测最佳,则要使短时平均预测误差最小有:
2??E??e?n????min (3)
2???e?n????ak?0,(1?k?p) (4)
令
??i,k??E??s?n?i?,S?n?k??? (5)
最小的?可表示成:
11
?min???0,0???ak??0,k?k?1p (6)
显然,误差越接近于零,线性预测的准确度在均方误差最小的意义上为最佳,由此可以计算出预测系数。
通过LPC分析,由若干帧语音可以得到若干组LPC参数,每组参数形成一个描绘该帧语音特征的矢量,即LPC特征矢量。由LPC特征矢量可以进一步得到很多种派生特征矢量,例如线性预测倒谱系数、线谱对特征、部分相关系数、对数面积比等等。不同的特征矢量具有不同的特点,它们在语音编码和识别领域有着不同的应用价值。
5.4 问题四
与普通实际频率倒谱分析不同,MFCC的分析着眼于人耳的听觉特性,Mel频率尺度的值大体上对应于实际频率的对数分布关系,更符合人耳的听觉特性,MFCC参数突出优点是不依赖极点语言产生模型的假定,考虑了人耳的听觉感知特性,抗噪声和抗频谱失真能力较强,从而提高识别系统的性能。
但是在系统实时处理上,与LPCC参数相比,MFCC参数计算有两个缺点:一是计算量大,计算时间长,很难达到实时性;二是精度难以保证,由于MFCC参数的计算需要FFT变换和对数操作,影响了计算机的动态范围,要保证其在单片机或DSP平台上的运算速度,就只有牺牲参数精度。
目前声纹识别技术的识别率,T-NETIX公司的SpeakEZ达到94%-95%。日本岩井公司在此基础上研制的同类产品据称其识别率以达到99.8%。根据最近的报道,国内的北京得意音通技术有限责任公司开发的“得意”身份证开发工具据其自称辨认和确认准确度都可以到达接近100%。
12
六·附录
主程序: clc,clear
disp('正在计算参考模板的参数...') for i=1:10
fname=sprintf('01w.wma',i-1); x=wavread(fname); [x1 x2]=vad(x); m=mfcc(x);
m=m(x1-2:x2-4,:); ref(i).mfcc=m; end
disp('正在分析语音信号...') for i=1:10
fname=sprintf('01w.wma',i-1);
[x,fs,bit]=wavread(fname,[2000,2512]); %采样% %sound(x,fs); %播放语音信号 figure(i);
subplot(3,3,1);
plot(x(1:256)); %原始语音信号的时域图形% title('原始信号') subplot(3,3,2)
[h,w]=freqz(x); %原始语音信号的频率响应图 hr=abs(h); plot(w,hr);
title('频率响应图');
xlabel('Frequency in rad/sample') ylabel('Magnitude in dB') subplot(3,3,3) hphase=angle(h);
hphase=unwrap(hphase); %求系统相频响应 plot(w,hphase); title('频率响应图');
xlabel('Frequency in rad/sample') ylabel('Phase in degrees')
y=fft(x,512); %傅立叶变换% mag=abs(y);
mag1=10*log10(mag);
13
f=fs*(0:255)/512; subplot(3,3,4)
plot(f,mag(1:256)); ?T频谱图 % title('fft变换后信号')
iff=ifft(y,512); %反傅立叶变换% ifm=abs(iff); subplot(3,3,5) plot(f,ifm(1:256)) title('ifft后信号')
% 短时傅里叶变换 Ts=1/fs; %N=T/Ts; N=512;
Nw=20; %窗函数长
L=Nw/2; %窗函数每次移动的样点数
Tn=(N-Nw)/L+1; %计算把数据x共分成多少段 nfft=32; ?T的长度
TF=zeros(Tn,nfft); %将存放三维谱图,先清零 for i=1:Tn
xw=x((i-1)*10+1:i*10+10); %取一段数据 temp=fft(xw,nfft); ?T变换
temp=fftshift(temp); %频谱以0频为中心 for j=1:nfft;
TF(i,j)=temp(j); %把谱图存放在TF中 end end
subplot(3,3,6)
fnew=((1:nfft)-nfft/2)*fs/nfft; tnew=(1:Tn)*L*Ts;
[F,T]=meshgrid(fnew,tnew); mesh(F,T,abs(TF))
title('短时傅立叶变换时频图') subplot(3,3,7)
contour(F,T,abs(TF)) title('等高线表示') end
disp('正在计算测试模板的参数...') for i=1:10
fname=sprintf('01x.wma',i-1); x=wavread(fname); [x1 x2]=vad(x); m=mfcc(x);
14