- 清濁音檢測原理公式
清濁音檢測是在一段語音信號中區分出清音段、濁音段和靜音段。
原理框圖如下所示:
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;