哈尔滨工程大学语音信号处理实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实 验 报 告
实验课程名称: 语音信号处理实验
姓名: 班级: 20120811 学号:
指导教师 张磊 实验教室 21B#293 实验时间 2015年4月12日 实验成绩
实验序号
实验名称
实验过程 实验结果 实验成绩
实验一 语音信号的端点检测 实验二 语音信号的特征提取 实验三
语音信号的基频提取
实验一 语音信号的端点检测
一、实验目的
1、掌握短时能量的求解方法
2、掌握短时平均过零率的求解方法
3、掌握利用短时平均过零率和短时能量等特征,对输入的语音信号进行端点检测。
二、实验设备 HP 计算机、Matlab 软件 三、实验原理 1、短时能量
语音信号的短时能量分析给出了反应这些幅度变化的一个合适的描述方法。对于信号)}({n x ,短时能量的定义如下:
∑
∑∞
-∞
=∞
-∞
=*=-=
-=
m m n n h n x m n h m x m n w m x E )()()()()]()([222
2、短时平均过零率
短时平均过零率是指每帧内信号通过零值的次数。对于连续语音信号,可以
考察其时域波形通过时间轴的情况。对于离散信号,实质上就是信号采样点符号变化的次数。过零率在一定程度上可以反映出频率的信息。短时平均过零率的公式为:
∑∑-+=∞
-∞=--=---=1
)]
1(sgn[)](sgn[21 )
()]1(sgn[)](sgn[21N n n
m w w m n m x m x m n w m x m x Z
其中,sgn[.]是符号函数,即
⎩
⎨
⎧<-≥=0)(10)(1
)](sgn[n x n x n x
3、端点检测原理
能够实现这些判决的依据在于,不同性质语音的各种短时参数具有不同的概率密度函数,以及相邻的若干帧语音应具有一致的语音特性,它们不会在S 、U 、V 之间随机地跳来跳去。要正确判断每个输入语音的起点和终点,利用短时平均幅度参数E 和短时平均过零率Z 可以做到这一点。
首先,根据浊音情况下的短时能量参数的概率密度函数)|(V E P 确定一个阈值参数H E ,H E 值一般定的较高。当一帧输入信号的短时平均幅度参数超过H E 时,就可以判定该帧语音信号不是无声,而有相当大的可能是浊音。根据H E 可判定输入语音的前后两个点1A 和2A 。在1A 和2A 之间的部分肯定是语音段,但语音的精确起点、终点还要在1A 之前和2A 之后仔细查找,如图1所示。
C 1
B 1 A 1
A 2
B 2
C 2
E H E E L
C 2
B 2 A 1
C 1
B 1 A 2 Z
Z s
图1 端点检测原理示意图
为此,再设定一个较低的阈值参数L E ,由1A 点向前找,当短时能量由大到小减至L E 可以确定点1B 。类似地,可以由2A 点向后找,确定2B 点。在1B 和2B 之间的仍能肯定是语音段。然后由1B 向前和2B 向后,利用短时平均过零率进行搜索。根据无声情况下的短时平均过零率,设置一个参数s Z ,如果由1B 向前搜索时,短时平均过零率大于s Z 的3倍,则认为这些信号仍属于语音段,直到短时平均过零率下降到低于3倍的s Z ,这时的点1C 就是语音的精确的起点。对于终点也做类似的处理,可以确定终点2C 。采用短时平均过零率的原因在于,1B 点以前可能是一段清辅音,它的能量相当弱,依靠能量不可能将它们与无声段分开。而对于清辅音来说,它们的过零率明显高于无声段,因而能用这个参数将二者区分开来。
存在噪声的情况下,正常的过零率计算会存在一定的误差,解决这个问题的一种方法是对上述过零率定义做一个简单的修改,即设立一个门限T ,将过零率的含义修改为跨过正负门限的次数,如图2。
门限3 门限2 门限1 门限1 门限2 门限3
时间
图2 门限短时平均过零率
于是,有:
)
(}])1(sgn[])(sgn[ ])1(sgn[])(sgn[{21m n w T m x T m x T m x T m x Z m n -+--++
----=∑∞
-∞= 这样计算的短时平均过零率就有一定的抗干扰能力。即使存在小的随机噪声,只要它不超过正负门限所构成的带,就不会产生虚假过零率。 四、实验步骤及程序 实验程序:
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); 实验结果截图: