資源簡介
端點檢測matlab程序,用于檢測語音信號的起點和終點。分幀和預加重。
代碼片段和文件信息
[xfswmodefidx]=readwav(‘8_.wav‘‘r‘);
voice_len=length(x);?
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;
?????????silence?=?0;
?????????count???=?count?+?1;
??????elseif?amp(n)?>?amp2?|?...?%?可能處于語音段
?????????????zcr(n)?>?zcr2
?????????status?=?1;
?????????count??=?count?+?1;
??????else???????????????????????%?靜音狀態
?????????status??=?0;
?????????count???=?0;
????
- 上一篇:B樣條圖形繪制matlab
- 下一篇:定位峰值點的matlab程序
評論
共有 條評論