1 简介

语音端点检测的准确性直接影响着语音识别系统性能.在低信噪比环境下,一些在高信噪比环境下具有良好性能的检测方法无法有效工作.提出了基于谐波分析的频带方差和能量门限结合的端点检测方法.方法基于语谱图的分析,突出了语音信号和噪声信号的区别,在低信噪比环境下能准确检测出语音端点,并保障了实时性.试验证明,方法在较低信噪比环境下比频带方差检测方法的性能有较大提高,具有较好的实用性.

Matlab【特征提取】频带方差端点检测含Matlab源码_方差

2 部分代码


          
          
%频带方差端点检测M1_009.wav,enframe.m放在当前路径
clear all;
[x,fs,bits]=wavread('M1_009.wav');
x=filter([1 -0.95],1,x);%对语音进行预加重,x[n]=y[n]-0.95y[n-1]
L=320; %窗长
FrameLen=320;
FrameInc=160;
%[f]=enframe(x,hamming(320,'periodic'),FrameInc);%加汉明窗
[framenum,f]=enframe(x,FrameLen,FrameInc);
%[framenum,L]=size(f);%显示帧数
P=framenum;%总帧数
%求每帧的频带方差,用数组Dvar存储,第i个元素为第i帧的频带方差
for ii=1:P
s=f(ii,:);% 取出第ii帧语音样值
S=abs(fft(s));%该帧的幅度频谱
S=S(1:FrameLen/2);%取正频率成分,即频谱左边那部分
Dvar(ii)=var(S)+eps;%计算每帧的频带方差
end
%%%观察
frameTime=(((1:P)-1)*FrameInc+FrameLen/2)/fs;%
%frameTime是数组,长度为帧长,第i个元素值是第i帧中间那个样值对应的时间
figure
subplot(2,1,1)
plot((0:length(x)-1)/fs,x);
xlabel('时间/s');ylabel('幅度');title('语音信号');
subplot(2,1,2)
plot(frameTime,Dvar);%画出各帧的频带方差值,从而预估起点和终点的帧序号及alpha1,alpha2大小
xlabel('时间/s');ylabel('幅度');title('频带方差值');
%%%%取前导帧的频带方差值的平均值
MR=mean(Dvar(1:5));% 取1-5帧做背景噪声的频带方差的平均值的2倍为门限值
MR=2*MR;
cx1=0;%检测出的起点帧号
cx2=0;%检测出的终点帧号
flag1=0;
flag2=0;
for i=1:P-3
if (Dvar(i)>MR)&&(Dvar(i+1)>MR)&&(Dvar(i+2)>MR)&&(Dvar(i+3)>MR)&&(flag1==0)
cx1=i;
flag1=1;
end
end
for i=cx1+1:P-3
if (Dvar(i)<MR)&&(Dvar(i+1)<MR)&&(Dvar(i+2)<MR)&&(Dvar(i+3)<MR)&&(flag2==0)
cx2=i-1;
flag2=1;
end
end
cx1
cx2
frameTime(cx1)
frameTime(cx2)
figure%显示图形
subplot(211),plot((0:length(x)-1)/fs,x);
title('语音波形');
xlabel({'时间/s' ; '(a)'});
ylabel('幅度');
line([frameTime(cx1),frameTime(cx1)],[min(x),max(x)],'color','r');
line([frameTime(cx2),frameTime(cx2)],[min(x),max(x)],'color','r');
subplot(212),plot(frameTime,Dvar);
title('频带方差值');
xlabel({'时间/s' ; '(b)'});
ylabel('频带方差值');
line([frameTime(cx1),frameTime(cx1)],[min(Dvar),max(Dvar)],'color','r');
line([frameTime(cx2),frameTime(cx2)],[min(Dvar),max(Dvar)],'color','r');
%%%%%%思考1:设定双门限,即起点和终点的判定门限大小是不同的
%%%%%%思考2:带噪情况下效果如果?换别的语音效果如何?
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.

3 仿真结果

Matlab【特征提取】频带方差端点检测含Matlab源码_方差_02

Matlab【特征提取】频带方差端点检测含Matlab源码_方差_03

4 参考文献

[1]戴秋芳, 吴晓军. 基于谐波分析的频带方差端点检测方法[J]. 计算机仿真, 2009(8):4.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

Matlab【特征提取】频带方差端点检测含Matlab源码_数组_04