- 清浊音检测原理公式
清浊音检测是在一段语音信号中区分出清音段、浊音段和静音段。
原理框图如下所示:
1.过零率:
2.对数能量
3.单位延迟自相关系数归一化
4.lpc系数
使用Leveson-Durbin算法求得,取[-a2,-a3,…,–aM的值即为LPC系数]
- matlab代码实现
代码针对每一帧语音信号进行检测。
function [vadout,zcrout,Esout,cout]=voiced_unvoiced_detection(x) %x为每一帧的短时语音信号
n=length(x); %x的长度
x1=x(2:n);
x1(n)=0; %x1为x单位时延后的信号
%短时过零率
signs=(x.*x1)<0; %x和x1乘积小于0的找出来
zcr=sum(sum(signs~=0)); %统计小于0的个数,即过零次数
zcr=zcr/(n-1); %计算过零率
%对数短时能量
epsilon=1e-5; %避免功率太小取对数负无穷
Es=10*log(epsilon+1/n*sum(x.^2));
%单位延迟的归一化自相关系数
c=abs(sum(x.*x1)/(sum(x.^2).*sum(x1.^2)).^0.5);
if(Es<-110)
flag=0; %靜音
else
if(zcr>0.48)
flag=1; %清音
else flag=2; %濁音
end
end
vadout=flag;
zcrout=zcr;
Esout=Es;
cout=c;