1 简介 说话人识别又称声纹识别,是由计算机利用语音勃兴中所包含的反映特定说话人生理和行为特征的语音特征参数来自动识别说话人身份的技术.Mel频率倒谱系数(MFCC)分析着眼于人耳
1 简介
说话人识别又称声纹识别,是由计算机利用语音勃兴中所包含的反映特定说话人生理和行为特征的语音特征参数来自动识别说话人身份的技术.Mel频率倒谱系数(MFCC)分析着眼于人耳的听觉特性,依据听觉试验结果来分析语音得倒谱,获取较高的识别率和较好的噪声鲁棒性.本文通过对MFCC特征参数的提取过程的介绍,提出了一种基于MFCC的说话人识别算法.
2 部分代码
function [x1,x2]=vad1(x,framelen,framelnc)% 幅度归一化[-1,1]1
x=double(x);
x=x/max(abs(x));
%常数设置
%framelen=256;
%framelnc=100;
amp1=10;
amp2=2;
zcr1=10;
zcr2=5;
maxsilence=3;%3*10ms=30ms
minlen=15; %15*10ms=150ms
status=0;
count=0;
silence=0;
%计算过零率
tmp1=enframe(x(1:length(x)-1),framelen,framelnc);
tmp2=enframe(x(2:length(x)),framelen,framelnc);
signs=(tmp1.*tmp2)<0;
diffs=(tmp1-tmp2)>0.02;
zcr=sum(signs.*diffs,2);
%size(tmp1)
%计算短时能量
amp=sum(abs(enframe(filter([1 -0.9375],1,x),framelen,framelnc)),2);
%size(amp)
%调整能量门限
amp1=min(amp1,max(amp)/4);
amp2=min(amp2,max(amp)/8);
%开始端点检测
x1=0;
x2=0;
for n=1:length(zcr)
goto=0;
switch status
case {0,1}
if amp(n)>amp1 %确信进入语音段
x1=max(n-count-1,1);
status=2;
silence=0;
count=count+1;
elseif amp(n)>amp2 | zcr(n)>zcr2 %可能处于语音段
status=1;
count=count+1;
else
status=0;
count=0;
end
case 2, %2=语音段
if amp(n)>amp2 | zcr(n)>zcr2 %保持在语音段
count=count+1;
else
silence=silence+1;
if silence<maxsilence
count=count+1;
elseif count<minlen
status=0;
silence=0;
count=0;
else
status=3;
end
end
case 3,
break;
end
end
count=count-silence/2;
x2=x1+count-1;
subplot(3,1,1)
plot(x)
axis([1 length(x) -1 1])
line([x1*framelnc x1*framelnc],[-1 1],'color','red');
line([x2*framelnc x2*framelnc],[-1 1],'color','red');
ylabel('原始信号')
text(x1*framelnc,0.5,'起始端点 \rightarrow',...
'HorizontalAlignment','right')
text(x2*framelnc,0.5,'\leftarrow 结束端点 ',...
'HorizontalAlignment','left')
subplot(3,1,2)
plot(amp);
axis([1 length(amp) 0 max(amp)])
line([x1 x1],[min(amp),max(amp)],'color','red');
line([x2 x2],[min(amp),max(amp)],'color','red');
ylabel('短时能量')
text(x1,max(amp)/2,'起始端点 \rightarrow',...
'HorizontalAlignment','right')
text(x2,max(amp)/2,'\leftarrow 结束端点 ',...
'HorizontalAlignment','left')
subplot(3,1,3)
plot(zcr)
axis([1 length(zcr) 0 max(zcr)])
line([x1 x1],[min(zcr),max(zcr)],'color','red');
line([x2 x2],[min(zcr),max(zcr)],'color','red');
ylabel('过零率')
text(x1,max(zcr)/2,'起始端点 \rightarrow',...
'HorizontalAlignment','right')
text(x2,max(zcr)/2,'\leftarrow 结束端点 ',...
'HorizontalAlignment','left')
3 仿真结果
4 参考文献
[1]张晶, 董金明, 冯文全. 基于MFCC的说话人识别系统研究[C]// 全国dsp应用技术联合学术会议. 中国航空学会;中国电子学会, 2008.