資源簡介
端點檢測對于語音識別有著重要的意義。本程序采用雙門限端點檢測算法,雙門限端點檢測算法的基本思想是:先用短時平均能量進行初次判斷,然后再在這個基礎上用短時平均過零率進行再次判斷。初次判斷得到大致的語音段,再次判斷得到比較精確的語音起點和終點。
代碼片段和文件信息
function?[x1x2]?=?vad(x)
%幅度歸一化到[-11]
x?=?double(x);
x?=?x?/?max(abs(x));
%常數設置
frameLen?=?240;
frameInc?=?80;
amp1?=?10;
amp2?=?2;
zcr1?=?10;
zcr2?=?5;
maxsilence?=?8;??%?6*10ms??=?30ms
minlen??=?15;????%?15*10ms?=?150ms
status??=?0;
count???=?0;
silence?=?0;
%計算過零率
tmp1??=?enframe(x(1:end-1)?frameLen?frameInc);
tmp2??=?enframe(x(2:end)???frameLen?frameInc);
signs?=?(tmp1.*tmp2)<0;
diffs?=?(tmp1?-tmp2)>0.02;
zcr???=?sum(signs.*diffs?2);
%計算短時能量
amp?=?sum(abs(enframe(filter([1?-0.9375]?1?x)?frameLen?frameInc))?2);
%調整能量門限
amp1?=?min(amp1?max(amp)/4);
amp2?=?min(amp2?max(amp)/8);
%開始端點檢測
x1?=?0;?
x2?=?0;
for?n=1:length(zcr)
???goto?=?0;
???switch?status
???case?{01}???????????????????%?0?=?靜音?1?=?可能開始
??????if?amp(n)?>?amp1??????????%?確信進入語音段
?????????x1?=?max(n-count-11);
?????????status??=?2;
???
評論
共有 條評論