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

资源简介

用matlab编写的语音信号处理程序。 我也是初学者,刚编的,拿过来和大家一起分享一下!大家共同进步!

资源截图

代码片段和文件信息

%对语音信号采样分帧
clear
clc
X= wavread(‘s1‘);
%对信号进行预加重
x=X;
x4=filter([1-0.9375]1x);
figure(1)
subplot(211)plot(x)
title(‘原始语音信号‘);
xlabel(‘样本序列n‘);
ylabel(‘幅值‘);
subplot(212)plot(x4)
title(‘原始语音信号的预加重‘);
xlabel(‘样本序列n‘);
ylabel(‘幅值‘);


   
% 幅度归一化到[-1,1]
x=double(x);
x=x/max(abs(x));
% 常数设置
frameLen=240;       % 帧长取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; 


% 短时过零率(矢量法)
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(‘短时过零率‘);
ylabel(‘zcr‘)

%计算短时能量
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(‘短时能量‘);
ylabel(‘amp‘)


%调整能量门限 
amp1=ll+(max(amp)-ll)/8;
amp2=ll+(max(amp)-ll)/16;
%开始端点检测
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;
                silence=0;
                count=count+1;
            elseif amp(n) >amp2 | zcr(n) > zcr2     % 可能处于语音段
                status=1;
                count=count+1;
            else                                    % 静音状态 
                status=0;
                count=0;
            end
        case 2                                     % 2=语音段
            if amp(n) > amp2 | zc

评论

共有 条评论