-
大小: 4KB文件類型: .m金幣: 1下載: 0 次發(fā)布日期: 2021-06-04
- 語言: Matlab
- 標(biāo)簽: 語音??端點(diǎn)檢測(cè)??
資源簡(jiǎn)介
用matlab編寫的語音信號(hào)處理程序。
我也是初學(xué)者,剛編的,拿過來和大家一起分享一下!大家共同進(jìn)步!
代碼片段和文件信息
%對(duì)語音信號(hào)采樣分幀
clear
clc
X=?wavread(‘s1‘);
%對(duì)信號(hào)進(jìn)行預(yù)加重
x=X;
x4=filter([1-0.9375]1x);
figure(1)
subplot(211)plot(x)
title(‘原始語音信號(hào)‘);
xlabel(‘樣本序列n‘);
ylabel(‘幅值‘);
subplot(212)plot(x4)
title(‘原始語音信號(hào)的預(yù)加重‘);
xlabel(‘樣本序列n‘);
ylabel(‘幅值‘);
???
%?幅度歸一化到[-1,1]
x=double(x);
x=x/max(abs(x));
%?常數(shù)設(shè)置
frameLen=240;???????%?幀長(zhǎng)取30ms8kHz的采樣率
frameInc=80;????????%?幀移取10ms1/3
amp1=3;????????????
amp2=2;??????????????
zcr1=10;????????????
zcr2=5;????????????????
maxsilence=3;????????%?3*10ms=30ms
minlen=15;??????????%?15*10ms=150ms???
status=0;
count=0;
silence=0;?
%?短時(shí)過零率(矢量法)
tmp1=enframe(x(1:length(x)-1)frameLenframeInc);
tmp2=enframe(x(2:length(x))frameLenframeInc);
signs=(tmp1.*tmp2)0;
diffs=(tmp1-tmp2)>?0.02;
zcr=sum(signs.*diffs2);
figure(2)
subplot(211)
plot(zcr);
title(‘短時(shí)過零率‘);
ylabel(‘zcr‘)
%計(jì)算短時(shí)能量
amp=sum(abs(enframe(filter([1-0.9375]1x)frameLenframeInc))2);
inz=find(amp>1);
amm=amp(inz);
ll=min(amm);
figure(2)
subplot(212)
plot(amp);
title(‘短時(shí)能量‘);
ylabel(‘a(chǎn)mp‘)
%調(diào)整能量門限?
amp1=ll+(max(amp)-ll)/8;
amp2=ll+(max(amp)-ll)/16;
%開始端點(diǎn)檢測(cè)
x1=0;
x2=0;
for?n=1:length(zcr)
????goto?=?0;
????switch?status?
????????case{01}????????????????????%?0=靜音,1=可能開始
????????????if?amp(n)?>?amp1?????????%?確信進(jìn)入語音段
????????????????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????????????????????????????????????%?靜音狀態(tài)?
????????????????status=0;
????????????????count=0;
????????????end
????????case?2?????????????????????????????????????%?2=語音段
????????????if?amp(n)?>?amp2?|?zc
評(píng)論
共有 條評(píng)論