puneng22.m

来自「这是个关于短时能量及谱熵的端点检测」· M 代码 · 共 77 行

M
77
字号
 %读入语音
[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 + =
减小字号Ctrl + -
显示快捷键?