【语音识别】基于MFCC+VAD端点检测智能语音门禁系统含Matlab源码
【语音识别】基于MFCC+VAD端点检测智能语音门禁系统含Matlab源码
TT_Matlab
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,完整matlab代码或者程序定制加qq1575304183。
1 简介
为提高低信噪比环境下语音端点检测算法性能不高的问题,提出将MFCC倒谱距离与对数能量结合进行端点检测.首先,对语音计算对数能量,然后计算改进的倒谱距离,将MFCC倒谱距离与对数能量融合,获得了一种新的语音参数,该参数能有效地提高低信噪比情况下语音与噪声的区别,对参数进行顺利滤波用于语音端点检测,采用自动更新的双阈值进行语音端判别.仿真实验表明,该算法具有较好的适用不同噪声,在低信噪比下依然能获得比较理想的端点检测效果.
2 部分代码
function
[x,mc,mn,mx]=melbankm(p,n,fs,fl,fh,w)
if
nargin < 6
w
=
’tz’;
if
nargin < 5
fh
=
0.5;
if
nargin < 4
fl
=
0; % min freq is DC
end
end
end
sfact
=
2-any(w==’s’);
wr
=
’ ’; % default warping is mel
for
i=1:length(w)
if
any(w(i)==’lebf’);
wr
=
w(i);
end
end
if
any(w==’h’) || any(w==’H’)
mflh
=
[fl fh];
else
mflh
=
[fl fh]*fs;
end
if
~any(w==’H’)
switch
wr
case
’f’
case
’l’
if
fl<=0
error(’Low
frequency limit must be >0 for l option’);
end
mflh
=
log10(mflh);
case
’e’
mflh
=
frq2erb(mflh);
case
’b’
mflh
=
frq2bark(mflh);
otherwise
mflh
=
frq2mel(mflh);
end
end
melrng
=
mflh*(-1:2:1)’;
fn2
=
floor(n/2);
if
isempty(p)
p
=
ceil(4.6*log10(fs));
end
if
any(w==’c’)
if
p<1
p
=
round(melrng/(p*1000))+1;
end
melinc
=
melrng/(p-1);
mflh
=
mflh+(-1:2:1)*melinc;
else
if
p<1
p
=
round(melrng/(p*1000))-1;
end
melinc
=
melrng/(p+1);
end
switch
wr
case
’f’
blim
=
(mflh(1)+[0 1 p p+1]*melinc)*n/fs;
case
’l’
blim
=
10.^(mflh(1)+[0 1 p p+1]*melinc)*n/fs;
case
’e’
blim
=
erb2frq(mflh(1)+[0 1 p p+1]*melinc)*n/fs;
case
’b’
blim
=
bark2frq(mflh(1)+[0 1 p p+1]*melinc)*n/fs;
otherwise
blim
=
mel2frq(mflh(1)+[0 1 p p+1]*melinc)*n/fs;
end
mc
=
mflh(1)+(1:p)*melinc;
b1
=
floor(blim(1))+1;
b4
=
min(fn2,ceil(blim(4))-1);
switch
wr
case
’f’
pf
=
((b1:b4)*fs/n-mflh(1))/melinc;
case
’l’
pf
=
(log10((b1:b4)*fs/n)-mflh(1))/melinc;
case
’e’
pf
=
(frq2erb((b1:b4)*fs/n)-mflh(1))/melinc;
case
’b’
pf
=
(frq2bark((b1:b4)*fs/n)-mflh(1))/melinc;
otherwise
pf
=
(frq2mel((b1:b4)*fs/n)-mflh(1))/melinc;
end
if
pf(1)<0
pf(1)
=
[];
b1
=
b1+1;
end
if
pf(end)>=p+1
pf(end)
=
[];
b4
=
b4-1;
end
fp
=
floor(pf);
pm
=
pf-fp;
k2
=
find(fp>0,1);
k3
=
find(fp<p,1,’last’);
k4
=
numel(fp);
if
isempty(k2)
k2
=
k4+1;
end
if
isempty(k3)
k3
=
0;
end
if
any(w==’y’)
mn
=
1;
mx
=
fn2+1;
r
=
[ones(1,k2+b1-1) 1+fp(k2:k3) fp(k2:k3) repmat(p,1,fn2-k3-b1+1)];
c
=
[1:k2+b1-1 k2+b1:k3+b1 k2+b1:k3+b1 k3+b1+1:fn2+1];
v
=
[ones(1,k2+b1-1) pm(k2:k3) 1-pm(k2:k3) ones(1,fn2-k3-b1+1)];
else
r
=
[1+fp(1:k3) fp(k2:k4)];
c
=
[1:k3 k2:k4];
v
=
[pm(1:k3) 1-pm(k2:k4)];
mn
=
b1+1;
mx
=
b4+1;
end
if
b1<0
c
=
abs(c+b1-1)-b1+1;
end
%
end
if
any(w==’n’)
v
=
0.5-0.5*cos(v*pi);
elseif
any(w==’m’)
v
=
0.5-0.46/1.08*cos(v*pi);
end
if
sfact==2
msk
=
(c+mn>2) & (c+mn<n-fn2+2);
v(msk)
=
2*v(msk);
end
if
nargout > 2
x
=
sparse(r,c,v);
if
nargout == 3
mc
=
mn;
mn
=
mx;
end
else
x
=
sparse(r,c+mn-1,v,p,1+fn2);
end
if
any(w==’u’)
sx
=
sum(x,2);
x
=
x./repmat(sx+(sx==0),1,size(x,2));
end
if
~nargout || any(w==’g’)
ng
=
201;
me
=
mflh(1)+(0:p+1)’*melinc;
switch
wr
case
’f’
fe
=
me;
xg
=
repmat(linspace(0,1,ng),p,1).*repmat(me(3:end)-me(1:end-2),1,ng)+repmat(me(1:end-2),1,ng);
case
’l’
fe
=
10.^me;
xg
=
10.^(repmat(linspace(0,1,ng),p,1).*repmat(me(3:end)-me(1:end-2),1,ng)+repmat(me(1:end-2),1,ng));
case
’e’
fe
=
erb2frq(me);
xg
=
erb2frq(repmat(linspace(0,1,ng),p,1).*repmat(me(3:end)-me(1:end-2),1,ng)+repmat(me(1:end-2),1,ng));
case
’b’
fe
=
bark2frq(me);
xg
=
bark2frq(repmat(linspace(0,1,ng),p,1).*repmat(me(3:end)-me(1:end-2),1,ng)+repmat(me(1:end-2),1,ng));
otherwise
fe
=
mel2frq(me);
xg
=
mel2frq(repmat(linspace(0,1,ng),p,1).*repmat(me(3:end)-me(1:end-2),1,ng)+repmat(me(1:end-2),1,ng));
end
v
=
1-abs(linspace(-1,1,ng));
if
any(w==’n’)
v
=
0.5-0.5*cos(v*pi);
elseif
any(w==’m’)
v
=
0.5-0.46/1.08*cos(v*pi);
end
v
=
v*sfact;
v
=
repmat(v,p,1);
if
any(w==’y’)
v(1,xg(1,
:
)<fe(2))=sfact;
v(end,xg(end,
:
)>fe(p+1))=sfact;
end
if
any(w==’u’)
dx
=
(xg(:,3:end)-xg(:,1:end-2))/2;
dx
=
dx(:,[1 1:ng-2 ng-2]);
vs
=
sum(v.*dx,2);
v
=
v./repmat(vs+(vs==0),1,ng)*fs/n;
end
plot(xg’,v’,’b’);
set(gca,’xlim’,[fe(1)
fe(end)]);
xlabel([’Frequency
(’ xticksi ’Hz)’]);
end
3 仿真结果
4 参考文献
[1]周代勇, 曾妍萍, 蔡燕. 基于Matlab的语音识别端点检测算法研究与实现[J]. 内江科技, 2013, 34(9):2.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。
-
2023年血糖新标准公布,不是3.9-6.1,快来看看你的血糖正常吗? 2023-02-07
-
2023年各省最新电价一览!8省中午执行谷段电价! 2023-01-03
-
GB 55009-2021《燃气工程项目规范》(含条文说明),2022年1月1日起实施 2021-11-07
-
PPT导出高分辨率图片的四种方法 2022-09-22
-
2023年最新!国家电网27家省级电力公司负责人大盘点 2023-03-14
-
全国消防救援总队主官及简历(2023.2) 2023-02-10
-
盘点 l 中国石油大庆油田现任领导班子 2023-02-28
-
我们的前辈!历届全国工程勘察设计大师完整名单! 2022-11-18
-
关于某送变电公司“4·22”人身死亡事故的快报 2022-04-26
