资源简介

语音多字的端点检测,找出清浊分界,并以线的形式标出界线

资源截图

代码片段和文件信息

close all
clear
clc
x=wavread(‘D:\文档\语音信号处理\端点检测\man.wav‘);%x是列向量
x=x-mean(x);
%幅度归一化到[-11]
x = double(x);
x = x / max(abs(x));
begainvoice=[];
endvoice=[];
%常数设置
frameLen = 160;
frameInc = 40;

amp1 = 10;
amp2 = 3;
zcr1 =50;
zcr2 = 8;

maxsilence = 4; % 10*10ms = 30ms
minlen = 10; % 10*10ms = 100ms
status = 0;
count = 0;
silence = 0;

%计算过零率
tmp1 = enframe(x(1:length(x)-1) frameLen frameInc);
tmp2 = enframe(x(2: length(x))  frameLen frameInc);
signs = (tmp1.*tmp2)<0;
diffs = abs(tmp1 -tmp2)>0.02;
zcr = sum(signs.*diffs 2);

%计算短时能量
amp = sum(abs(enframe(x frameLen frameInc)) 2);

%调整能量门限
amp1 = min(amp1 max(amp)/4);
amp2 = min(amp2 max(amp)/8);
x=x(1:length(zcr)*frameInc);
%开始端点检测
x1 = 0;
x2 = 0;
for n=1:length(zcr)
    switch status

评论

共有 条评论