哈尔滨工程大学 语音信号处理实验报告

更新时间:2023-11-01 05:43:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实 验 报 告

实验课程名称: 语音信号处理实验

姓名: 班级: 20120811 学号:

实验序号 实验名称 实验过程 实验结果 实验成绩 实验一 实验二 实验三 语音信号的端点检测 语音信号的特征提取 语音信号的基频提取

指导教师 张磊 实验教室 21B#293 实验时间 2015年4月12日 实验成绩

实验一 语音信号的端点检测

一、实验目的

1、掌握短时能量的求解方法 2、掌握短时平均过零率的求解方法

3、掌握利用短时平均过零率和短时能量等特征,对输入的语音信号进行端点检测。

二、实验设备 HP计算机、Matlab软件 三、实验原理 1、短时能量

语音信号的短时能量分析给出了反应这些幅度变化的一个合适的描述方法。对于信号{x(n)},短时能量的定义如下:

En?m????[x(m)w(n?m)]?2?m???22x(m)h(n?m)?x(n)?h(n) ??2、短时平均过零率

短时平均过零率是指每帧内信号通过零值的次数。对于连续语音信号,可以

考察其时域波形通过时间轴的情况。对于离散信号,实质上就是信号采样点符号变化的次数。过零率在一定程度上可以反映出频率的信息。短时平均过零率的公式为:

1?Zn??sgn[x(m)]?sgn[x(m?1)]w(n?m)2m??? ?12n?N?1m?n

?sgn[xw(m)]?sgn[xw(m?1)]其中,sgn[.]是符号函数,即

x(n)?0?1 sgn[x(n)]???1x(n)?0?3、端点检测原理

能够实现这些判决的依据在于,不同性质语音的各种短时参数具有不同的概率密度函数,以及相邻的若干帧语音应具有一致的语音特性,它们不会在S、U、V之间随机地跳来跳去。要正确判断每个输入语音的起点和终点,利用短时平均幅度参数E和短时平均过零率Z可以做到这一点。

首先,根据浊音情况下的短时能量参数的概率密度函数P(E|V)确定一个阈值参数EH,EH值一般定的较高。当一帧输入信号的短时平均幅度参数超过EH时,就可以判定该帧语音信号不是无声,而有相当大的可能是浊音。根据EH可判定输入语音的前后两个点A1和A2。在A1和A2之间的部分肯定是语音段,但语音的精确起点、终点还要在A1之前和A2之后仔细查找,如图1所示。

E EH EL C1 Z B1 A1 A2 B2 C2 Zs C1 B1 A1 A2 B2 C2 图1 端点检测原理示意图

为此,再设定一个较低的阈值参数EL,由A1点向前找,当短时能量由大到小减至EL可以确定点B1。类似地,可以由A2点向后找,确定B2点。在B1和B2之间的仍能肯定是语音段。然后由B1向前和B2向后,利用短时平均过零率进行搜索。根据无声情况下的短时平均过零率,设置一个参数Zs,如果由B1向前搜索时,短时平均过零率大于Zs的3倍,则认为这些信号仍属于语音段,直到短时平均过零率下降到低于3倍的Zs,这时的点C1就是语音的精确的起点。对于终点也做类似的处理,可以确定终点C2。采用短时平均过零率的原因在于,B1点以前可能是一段清辅音,它的能量相当弱,依靠能量不可能将它们与无声段分开。而对于清辅音来说,它们的过零率明显高于无声段,因而能用这个参数将二者区分开来。

存在噪声的情况下,正常的过零率计算会存在一定的误差,解决这个问题的一种方法是对上述过零率定义做一个简单的修改,即设立一个门限T,将过零率的含义修改为跨过正负门限的次数,如图2。

门限3 门限2 门限1 门限1 门限2 门限3 时间

图2 门限短时平均过零率

于是,有:

1?Zn??{sgn[x(m)?T]?sgn[x(m?1)?T]?2m??? sgn[x(m)?T]?sgn[x(m?1)?T]}w(n?m)这样计算的短时平均过零率就有一定的抗干扰能力。即使存在小的随机噪声,只要它不超过正负门限所构成的带,就不会产生虚假过零率。 四、实验步骤及程序 实验程序:

function point_check() s1=wavread('man.wav'); s=s1/max(abs(s1)); s=filter([1 -0.9375],1,s); plot(s); len=length(s); round=160; repeat=80;

inc=round-repeat;%b_len-2*repeat; ka=ceil((len-round)/(round-repeat))+1;

s=[s;zeros((round-repeat)*(ka-1)+round-len,1)]; len=length(s); w=zeros(round,ka); for i=1:ka

for k=1:round

w(k,i)=s(k+(i-1)*(round-repeat),1); end end ST=0.01;

F=zeros(ka,round); for i=1:ka for k=0:round-1 for j=1:round-k

F(ka,k+1)=F(ka,k+1)+abs(w(j,i)-w(j+k,i)); end

if(k

if(w(k+1,i)>0&&w(k+2,i)<0)

z=sign(w(k+1,i)-ST)-sign(w(k+2,i)+ST); elseif(w(k+1,i)<0&&w(k+2,i)>0) z=sign(w(k+2,i)-ST)-sign(w(k+1,i)+ST); end if(z==2) f(i,1)=f(i,1)+1;

end end end end

amp=sum(abs(w).^2,1);

实验结果截图:

本文来源:https://www.bwwdw.com/article/f7f2.html

Top