-
大小: 1.39 KB文件類型: .rar金幣: 1下載: 0 次發布日期: 2024-09-24
- 語言: 其他
- 標簽:
資源簡介
利用語音信號的短時能量與短時過零率來達到自動檢測語音的起止點。效果不錯.
代碼片段和文件信息
%語音信號的端點檢測
[xfsnbits]=wavread(‘speech.wav‘);
x?=?x?/?max(abs(x));%幅度歸一化到[-11]
%參數設置
frameLen?=?256;?????%幀長
inc?=?90;???????????%未重疊部分
amp1?=?10;??????????%短時能量閾值
amp2?=?2;??????
zcr1?=?10;??????????%過零率閾值
zcr2?=?5;
minsilence?=?6;??%用無聲的長度來判斷語音是否結束
minlen??=?15;????%判斷是語音的最小長度
status??=?0;?????%記錄語音段的狀態
count???=?0;?????%語音序列的長度
silence?=?0;?????%無聲的長度
%計算過零率
tmp1??=?enframe(x(1:end-1)?frameLeninc);
tmp2??=?enframe(x(2:end)???frameLeninc);
signs?=?(tmp1.*tmp2)<0;
diffs?=?(tmp1?-tmp2)>0.02;
zcr???=?sum(signs.*diffs2);
%計算短時能量
amp?=?sum((abs(enframe(filter([1?-0.9375]?1?x)?frameLen?inc))).^2?2);
%調整能量門限
amp1?=?min(amp1?max(amp)/4);
amp2?=?min(amp2?max(amp)/8);
%開始端點檢測
for?n=1:length(zcr)
???goto?=?0;
???switch?status
???case?{01}???????????????????%?0?=?靜音?1?=?可能開始
??????if?amp(n)?>?amp1??????????%?確信進入語音段
?????????x1?=?max(n-count-11);?%?記錄語音段的起始點
?????????status??=?2;
?????????silence?=?0;
?????????count???=?count?+?1;
??????elseif?amp(n)?>?amp2?||?zcr(n)?>?zcr2?%?可能處于語音段
?????????status?=?1;
?????????count??=?count?+?1;
??????else???????????????????????%?靜音狀態
?????????status??=?0;
?????????count???=?0;
??????end
???case?2???????????????????????%?2?=?語音段
??????if?amp(n)?>?amp2?||zcr(n)?>?zcr2?????%?保持在語音段
?????????
?????????count?=?count?+?1;
??????else???????????????????????%?語音將結束
?????????silence?=?silence+1;
?????????if?silence?????????????count??=?count?+?1;
?????????elseif?count?????????????status??=?0;
????????????silence?=?0;
????????????count???=?0;
?????????else????????????????????%?語音結束
????????????status??=?3;
?????????end
??????end
???case?3
??????break;
???end
end???
count?=?count-silence/2;
x2?=?x1?+?count?-1;??????????????%記錄語音段結束點
subplot(311)
plot(x)
axis([1?length(x)?-1?1])
ylabel(‘Speech‘);
line([x1*inc?x1*inc]?[-1?1]?‘Color‘?‘red‘);
line([x2*inc?x2*inc]?[-1?1]?‘Color‘?‘red‘);
subplot(312)
plot(amp);
axis([1?length(amp)?0?max(amp)])
ylabel(‘Energy‘);
line([x1?x1]?[min(amp)max(amp)]?‘Color‘?‘red‘);
line([x2?x2]?[min(amp)max(amp)]?‘Color‘?‘red‘);
subplot(313)
plot(zcr);
axis([1?length(zcr)?0?max(zcr)])
ylabel(‘ZCR‘);
line([x1?x1]?[min(zcr)max(zcr)]?‘Color‘?‘red‘);
line([x2?x2]?[min(zcr)max(zcr)]?‘Color‘?‘red‘);
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2559??2007-10-23?15:06??edgedetect.m
-----------?---------??----------?-----??----
?????????????????2777????????????????????2
- 上一篇:漢字內碼轉換工具,區位碼轉換
- 下一篇:清華大學鄭莉C 語言程序設計課件
評論
共有 條評論