• 大小: 2KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-05-08
  • 语言: Matlab
  • 标签: Matlab  端点检测  

资源简介

端点检测对于语音识别有着重要的意义。本程序采用双门限端点检测算法,双门限端点检测算法的基本思想是:先用短时平均能量进行初次判断,然后再在这个基础上用短时平均过零率进行再次判断。初次判断得到大致的语音段,再次判断得到比较精确的语音起点和终点。

资源截图

代码片段和文件信息

function [x1x2] = vad(x)

%幅度归一化到[-11]
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;
   

评论

共有 条评论