当前位置:首页 > 音频信号的分类与分割
哈尔滨理工大学学士学位论文 fclose(fid);
x=awgn(x1,15,'measured'); %加入15db的噪声 s=fra(220,110,x); %分帧,帧移110 zcr=zcro(s); %求过零率 figure(1); plot(x);
title('原始信号'); xlabel('样点数'); ylabel('幅度'); figure(2); plot(zcr);
title('原始信号过零率'); xlabel('帧数'); ylabel('过零次数');
其中zcro( )为求过零率的函数,其MATLAB程序如下: %zcro.m
function f=zcro(x)
f=zeros(size(x,1),1); %生成全零矩阵 for i=1:size(x,1)
z=x(i,:); %提取一行数据 for j=1:(length(z)-1); if z(j)*z(j+1)<0; f(i)=f(i)+1; end end end
实现过程是首先分帧,然后计算过零率,得到过零率曲线。从下面仿真结果曲线上可以看出,音乐段的过零率的波动幅度相对较小,而说话段的波动幅度较大,而静音段的过零率几乎为0,如下图中的蓝色部分。
图3-3 过零率曲线
- 12 -
哈尔滨理工大学学士学位论文 因此,根据过零率是否大于0,来判断信号帧是属于静音段还是语音段(包括音乐段和说话段)。对判断结果进行中值滤波,去掉毛刺,结果为上图中红色部分。
上图中红色部分圈出的就是语音段,没圈中的就是静音段。然后还需要对语音段进行区分,即区分是音乐段还是说话段。
上图中蓝色部分可以看出,音乐段的过零率的波动幅度相对较小,而说话段的波动幅度较大,因此可对过零率曲线求方差,来判断是音乐段还是说话段。
另外对得到的过零率结果每10个点(可调)计算一次方差,得到过零率方差曲线如下图:
图3-4 过零率方差曲线
可以看到音乐段的过零率方差曲线数值相对于说话段明显小很多。因此,求每一段语音的过零率方差曲线的均值,然后根据均值大小即可判断出该段是属于音乐段或说话段。
最终判断结果如下图
图3-5 语音模型图
该图中1段表示语音段,2段表示说话段,仅有零值线的部分则为静音段。最终分割结果为: 音乐段: 14505ms 说话段时长:14625ms 静音段时长:4036.81ms
短时平均过零率可以用于语音信号清、浊音判断。语音产生模型表明,由于声门波引起了谱的高频跌落,所以浊音语音能量约集中在3khz以下。但是对于清音语音,多数能量却是出现在较高的频率上。所以,如果过零
- 13 -
哈尔滨理工大学学士学位论文 率高,语音信号就是清音,如果过零率低,语音信号就是浊音。但有的音,位于清音和浊音的重叠区域,这时,只根据短时平均过零率就不可能来明确地判断清音、浊音。
3.3 基于能量和过零率的语音端点检测
在复杂的应用环境下,从信号流中分辨出语音信号和非语音信号,是语音处理的一个基本问题。语音端点检测就是指从包含语音的一段信号中确定出语音的起始点。正确的端点检测对于语音识别和语音编码都有重要的意义,它可以使采集的数据真正是语音信号的数据,从而减少数据量和运算量并减少处理时间。判断语音段的起始点和终止点的问题主要归结为区别语音和噪声的问题。如果能够保证系统的输入信噪比很高(即使最低电平的语音的能量也比噪声能量要高),那么只要计算输入信号的短时能量就基本能够把语音段的背景噪声区别开来。但是,在实际应用中很难保证这么高的信噪比,仅仅根据能量来判断是比较粗糙的。因此,还需要进一步利用短时平均过零率来进行判断,因为清音和噪声的短时平均过零率比背景噪声的平均过零率要高出好几倍。本节介绍基于能量和过零率的语音端点检测方法——两级判别法及程序实现。 两级判别法采用双门限比较法: 1、第一级判决
?先根据语音短时能量的轮廓选取一个较高的门限T1,进行一次粗判:语音起止点位于该门限与短时能量包络交点所对应的时间间隔之外(即AB段之外)。
?根据背景噪声的平均能量确定一个较低的门限T2,并从A点往左、从B点往右搜索,分别找到短时能量包络与门限T2相交的两个点C和D,于是CD段就是用双门限方法根据短时能量所判断的语音段。 2、第二级判决
以短时平均过零率为标准,从C点往左和从D点往右搜索,找到短时平均过零率低于某个门限T3的两点E和F,这便是语音段的起止点。门限T3是由背景噪声的平均过零率所确定的。
这里要注意,门限T2,T3都是由背景噪声特性确定的,因此,在进行起止点判决前,通常都要采集若干帧背景噪声并计算其平均短时能量和平均过零率,作为选择T2和T3的依据。当然,T1,T2,T3三个门限值的确定还应该通过多次试验。
基于MATLAB程序实现能量与过零率的端点检测算法步骤如下:
?语音信号x(n)进行分帧处理,每一帧记为Si(n)=1,2,??,N,n为离散语音信号时间序列,N为帧长,i表示帧数。
- 14 -
哈尔滨理工大学学士学位论文 ?计算每一帧语音的短时能量,得到语音的短时帧能量:Ei=?si2(n)。
n?1N ?计算每一帧语音的过零率,得到短时帧过零率 Zi=?|sgn[Si(n)]-sgn[Si(n-1)]|。其中
n?1N?1,Si?n??0 (3-7) Sgn?Si?n??????0,Sin?0? ④考察语音的平均能量设置一个较高的门限T1,用以确定语音开始,
然后再根据背景噪声的平均能量确定一个稍低的门限T2,用以确定第一级中的语音结束点。T2=a1En,En为噪声段能量的平均值。完成第一级判决,第二级判决同样根据背景噪声的平均过零率Zn,设置一个门限T3,用于判断语音前端的清音和后端的尾音。?1,?1为经过大量实验得到的经验值。由于MATLAB代码较长,这里从略。
- 15 -
共分享92篇相关文档