📄 puneng22.m
字号:
%读入语音
[x,fs]=wavread('e:\语音\da.wav');
%分帧,预处理
%% 常数设置
L=length(x);
N=fix(0.02*fs);
M=fix(0.02*0.67*fs);
F=fix((L-N)/M)+1;
detx=x';
Y=[];
Xn=[];
P=[];
H=[];
% 求能量
for k=1:F
up=1+(k-1)*M;
down=up+N-1;
temp1=detx(up:down);
Y=[Y,temp1];
y=fft(x,256);
Xn=[Xn,y];
Pn=abs(y)/sum(x);
P=[P,Pn];
for i=1:N
sum2=sum(Pn(i).*log2(Pn(i)));
H=[ H,sum2];
end
end
amp1=-0.0022;
status = 0;
count = 0;
silence = 0;
x1 = 0;
x2 = 0;
for n=1:F
goto = 0;
switch status
case 0, % 0 = 静音, 1 = 可能开始
if H(n)<amp1 % 确信进入语音段
x1 = max(n-count-1,1);
n=n+1;
status = 1;
silence = 0;
count = count + 1;
else % 静音状态
count = 0;
silence = silence+1;
end
case 1, % 2 = 语音段
if H(n) <amp1 ... % 保持在语音段
n=n+1;
count = count + 1;
status = 1;
else % 语音将结束
silence = silence+1;
status =2;
end
case 2,
break;
end
end
x2 = x1 + count ;
subplot(311)
plot(x)
axis([1 length(x) -1 1]);
ylabel('Speech');
line([x1*M x1*M], [-1 1], 'Color', 'red');
line([x2*M x2*M], [-1 1], 'Color', 'red');
subplot(312)
plot(H);
axis([1 length(H) -0.25 0.1]);
ylabel('Energy');
line([x1 x1], [min(H),max(H)], 'Color', 'red');
line([x2 x2], [min(H),max(H)], 'Color', 'red');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -