matlab实现简单清浊音检测

  1. 清浊音检测原理公式
    清浊音检测是在一段语音信号中区分出清音段、浊音段和静音段。
    原理框图如下所示:
    在这里插入图片描述
    1.过零率:
    在这里插入图片描述
    2.对数能量
    在这里插入图片描述
    3.单位延迟自相关系数归一化
    在这里插入图片描述
    4.lpc系数

使用Leveson-Durbin算法求得,取[-a2,-a3,…,–aM的值即为LPC系数]

  1. 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;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章