哈尔滨工程大学 语音信号处理实验报告汇总.docx
《哈尔滨工程大学 语音信号处理实验报告汇总.docx》由会员分享,可在线阅读,更多相关《哈尔滨工程大学 语音信号处理实验报告汇总.docx(25页珍藏版)》请在冰豆网上搜索。
哈尔滨工程大学语音信号处理实验报告汇总
实验报告
实验课程名称:
语音信号处理实验
姓名:
班级:
20120811学号:
实验序号
实验名称
实验过程
实验结果
实验成绩
实验一
语音信号的端点检测
实验二
语音信号的特征提取
实验三
语音信号的基频提取
指导教师张磊
实验教室21B#293
实验时间2015年4月12日
实验成绩
实验一语音信号的端点检测
一、实验目的
1、掌握短时能量的求解方法
2、掌握短时平均过零率的求解方法
3、掌握利用短时平均过零率和短时能量等特征,对输入的语音信号进行端点检测。
二、实验设备
HP计算机、Matlab软件
三、实验原理
1、短时能量
语音信号的短时能量分析给出了反应这些幅度变化的一个合适的描述方法。
对于信号,短时能量的定义如下:
2、短时平均过零率
短时平均过零率是指每帧内信号通过零值的次数。
对于连续语音信号,可以考察其时域波形通过时间轴的情况。
对于离散信号,实质上就是信号采样点符号变化的次数。
过零率在一定程度上可以反映出频率的信息。
短时平均过零率的公式为:
其中,是符号函数,即
3、端点检测原理
能够实现这些判决的依据在于,不同性质语音的各种短时参数具有不同的概率密度函数,以及相邻的若干帧语音应具有一致的语音特性,它们不会在S、U、V之间随机地跳来跳去。
要正确判断每个输入语音的起点和终点,利用短时平均幅度参数和短时平均过零率可以做到这一点。
首先,根据浊音情况下的短时能量参数的概率密度函数确定一个阈值参数,值一般定的较高。
当一帧输入信号的短时平均幅度参数超过时,就可以判定该帧语音信号不是无声,而有相当大的可能是浊音。
根据可判定输入语音的前后两个点和。
在和之间的部分肯定是语音段,但语音的精确起点、终点还要在之前和之后仔细查找,如图1所示。
图1端点检测原理示意图
为此,再设定一个较低的阈值参数,由点向前找,当短时能量由大到小减至可以确定点。
类似地,可以由点向后找,确定点。
在和之间的仍能肯定是语音段。
然后由向前和向后,利用短时平均过零率进行搜索。
根据无声情况下的短时平均过零率,设置一个参数,如果由向前搜索时,短时平均过零率大于的3倍,则认为这些信号仍属于语音段,直到短时平均过零率下降到低于3倍的,这时的点就是语音的精确的起点。
对于终点也做类似的处理,可以确定终点。
采用短时平均过零率的原因在于,点以前可能是一段清辅音,它的能量相当弱,依靠能量不可能将它们与无声段分开。
而对于清辅音来说,它们的过零率明显高于无声段,因而能用这个参数将二者区分开来。
存在噪声的情况下,正常的过零率计算会存在一定的误差,解决这个问题的一种方法是对上述过零率定义做一个简单的修改,即设立一个门限T,将过零率的含义修改为跨过正负门限的次数,如图2。
图2门限短时平均过零率
于是,有:
这样计算的短时平均过零率就有一定的抗干扰能力。
即使存在小的随机噪声,只要它不超过正负门限所构成的带,就不会产生虚假过零率。
四、实验步骤及程序
实验程序:
functionpoint_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);
fori=1:
ka
fork=1:
round
w(k,i)=s(k+(i-1)*(round-repeat),1);
end
end
ST=0.01;
F=zeros(ka,round);
fori=1:
ka
fork=0:
round-1
forj=1:
round-k
F(ka,k+1)=F(ka,k+1)+abs(w(j,i)-w(j+k,i));
end
if(kif(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);
实验结果截图:
五、实验结果与分析
这次实验利用MATLAB对信号进行分析和处理,利用短时过零率和短时能量,对语音信号的端点进行检测。
我之前虽然接触过MATLAB软件,但从未进行过有关语音信号的操作,在实验过程中欠缺独立性,代码是参考网上的,在理解的基础上借鉴。
学习是无止境的,现在的动手能力不强也是由于之前的松懈造成的,以后一定要多动手,毕竟能力是立身之本。
实验二语音信号的特征提取
一、实验目的
1、掌握语音信号的Mel倒谱特征(MFCC)的求解方法
2、掌握语音信号的线性预测原理以及LPC特征的求解方法
二、实验设备
HP计算机、Matlab软件
三、实验原理
1、MFCC特征原理及求解方法
在语音识别和说话人识别中,常用的语音特征是基于Mel频率的、倒谱系数(MelFrequencyCepstrumCoefficient,简称MFCC)。
由于MFCC参数是将人耳的听觉感知特性和语音的产生机制相结合,因此目前大多数语音识别系统中广泛使用这种特征。
研究者根据心理学实验得到了类似于耳蜗作用的一组滤波器组,这就是Mel频率滤波器组。
Mel频率可以用公式表达如下:
在实际应用中,MFCC倒谱系数计算过程如下:
(1)将信号进行分帧,预加重和加汉明窗处理,然后进行短时傅立叶变换得到其频谱;
(2)求出频谱平方,即能量谱,并用M个Mel带通滤波器进行滤波,由于每一个频带中分量的作用在人耳中是叠加的,因此将每个滤波频带内的能量进行叠加,这时第k个滤波器输出功率谱;
(3)将每个滤波器的输出取对数,得到相应频带的对数功率谱;并进行反离散余弦变换,得到个MFCC系数,如下式所示。
一般取12~16个左右;
(4)这种直接得到的MFCC特征作为静态特征,将这种静态特征做一阶和二阶差分,得到相应的动态特征。
2、线性预测原理及LPC特征求解方法
根据参数模型功率谱估计的思想,可以将语音信号看作是由一个输入序列激励一个全极点的系统(模型)而产生的输出,如图3所示。
系统的传递函数为:
其中为常数,为实数,p为模型的阶数。
显而易见,这种模型是以系数和增益G为模型参数的全极点模型,即AR模型。
用系数{}可以定义一个阶线性预测器
这个阶预测器从时域角度可以理解为,用信号的前个样本来预测当前的样本得到预测值,
因为预测器是用AR模型的系数{}来构造的,而AR模型是在最小均方意义上对数据的拟合,所以预测器必然是一个最佳预测器,即此时预测器的预测误差短时总能量最小。
语音信号的线性预测分析就是根据这一性质,从语音信号出发,依据最小均方误差准则,估计出一组线性预测器的系数{},它就是我们所要求的信号AR模型的系数。
{}被称为线性预测系数或LPC系数。
预测器的预测误差为:
由上式可知,是输入为,且具有如下形式传递函数的滤波器的输出
因此称为预测误差滤波器。
比较式(4-1)和式(4-5)可知,即预测误差滤波器是系统的逆滤波器。
为了在最小均方误差意义上计算一组最佳预测系数,定义短时预测均方误差为
由于语音信号的时变特性,线性预测分析应该在短时的语音段上进行,即按帧进行。
因此上式的求和通常也是在一帧语音的范围内进行。
为了使达到最小,{}必须满足。
则有:
这样可以得到以{}为变量的线性方程组
要构造信号的AR模型,还应估算增益因子。
将系统传递函数转化成差分方程的形式:
则预测误差和残差能量分别计算如下:
激励信号无法准确计算,但根据前文所述的语音产生模型,在浊音情况下,激励可以看作是准周期的脉冲串;在清音时,可以看作为高斯白噪声。
因此输入信号总能量可以认为近似为1,这样估算增益因子。
这种计算只是一种近似的方法,。
为了使模型的假定能够很好地符合语音产生的模型,需要考虑如下两个因素。
(1)模型阶数的选择
阶数应与共振峰的个数相吻合,通常一对极点对应一个共振峰,因此当共振峰数为5时,应取=10。
考虑到一些情况,一般按如下的方式计算模型阶数,其中为共振峰的个数。
(2)通过预加重进行高频提升
由于声门脉冲形状和口唇辐射的影响,语音信号的频谱在总趋势上会产生高频衰落的现象,大约每倍程下降6dB。
要抵消这一影响,通常在LPC分析之前采用一个非常简单的一阶FIR滤波器进行预加重以进行高频提升,其传递函数为,其中为预加重系数,对10kHz采样的语音,一般取=0.95。
大量的实践证明:
LPC参数是反映语音信号特征的良好参数。
附:
莱文逊—杜宾递推算法
该算法过程如下:
(1)计算自相关系数;
(2);
(3);
(4)开始按如下公式进行递推运算:
,
(5)。
若则算法结束退出,否则返回第(4)步。
四、实验步骤及程序
MFCC特征提取程序:
closeall
clear
clc
[x]=wavread('N:
\second\man.wav');
bank=melbankm(24,256,8000,0,0.5,'m');
bank=full(bank);
bank=bank/max(bank(:
));
fork=1:
12
n=0:
23;
dctcoef(k,:
)=cos((2*n+1)*k*pi/(2*24));
end
w=1+6*sin(pi*[1:
12]./12);
w=w/max(w);%预加重滤波器
xx=double(x);
xx=filter([1-0.9375],1,xx);%语音信号分帧
xx=enframe(xx,256,80);%计算每帧的MFCC参数
fori=1:
size(xx,1)
y=xx(i,:
);
s=y'.*hamming(256);
t=abs(fft(s));
t=t.^2;
c1=dctcoef*log(bank*t(1:
129));
c2=c1.*w';
m(i,:
)=c2';
end
figure
imagesc(m);xlabel('帧数');
ylabel('幅度');
title('MFCC');
实验结果截图:
LPC特征提取程序:
clear
clc
I=wavread('N:
\second\man.wav');%读入原始语音
%subplot(3,1,1),
plot(I);
title('原始语音波形')
%对指定帧位置进行加窗处理
Q=I';
N=256;%窗长
Hamm=hamming(N);%加窗
frame