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