资源描述:
《语音信号处理实验.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验一语音信号的预处理1实验目的通过Matlab编程掌握语音信号的预处理方法,包括对信号进行分帧、预加重,加窗处理。2实验原理由于语音信号从整体上来看是一个非平稳过程,但是在一个短的时间内,其特性保持相对不变,所以语音信号具有短时平稳性,对语音信号的分析和处理必须建立在“短时”的基础上,将信号分为一段一段来分析其特征参数。人发音时存在口唇的辐射效应,口唇的辐射模型相当于一阶高通滤波器,所以在对实际信号进行分析处理时,常用“预加重技术”,目的提升信号的高频部分,使信号的频谱更加平坦,方便信号的分析。3实验过程1)读语音数wavread2)听语音sou
2、nd3)写语音wavwrite4)对语音信号进行分帧处理5)对语音信号进行预加重−1Hz()10.96=−z6)加汉明窗⎧0.420.5*cos(2−+ππkM/)0.08*cos(2kM/)0≤kM≤wk()=⎨⎩0其他2πkw(k)=0.5[1−cos()],1≤k≤MM+14实验结果实验一程序所用函数wavread、sound、wavwrite、length、fix、y=x(m:n)、subplot、plot、figure、xlabel、ylabel、title选取c:windowsmedia目录下.wav文件作为读取的声音文件。读[x,
3、fs,bits]=wavread('c:windowsmediadig.wav');听sound(x,fs)写wavwrite(x,fs,bits,'c:windowsmediadig.wav')分帧处理流程1读语音数据。2求语音长度。3确定帧长和帧移。4确定可以分多少帧5for循环实现各帧信号的取出。先确定各帧信号的起点和终点坐标,然后利用矩阵操作函数将各帧信号取出。[x,fs,bits]=wavread('c:windowsmediadig.wav');x=x(:,1);x=x';len=length(x);N=256;M=1
4、28;Fn=fix((len-N)/M+1);y=[];fori=1:Fndown=1+(i-1)*M;up=down+N-1;temp=x(down:up);y=[y;temp];end加窗取出一帧信号和窗函数相乘预加重Z域−1Hz()10.96=−zy=filter([1-0.96],1,x);时域表达:y(k)=x(k)-x(k-1)程序:[x,fs,bits]=wavread('c:windowsmediadig.wav');x=x(:,1);y=x(10101:10612);figure(1)plot(y)L=length(y);k
5、=1:L;w=0.42-0.5*cos(2*pi*k/L)+0.08*cos(4*pi*k/L);z=y.*w’;figure(2)plot(z)forr=2:Lp(r)=y(r)-y(r-1);endfigure(3)plot(p)实验二语音信号的时域分析1实验目的通过Matlab编程实现语音信号的时域波形图,并观察清音、浊音信号的时域特点。掌握语音信号的时域分析技术,如短时平均能量、短时平均幅度、短时平均过零率分析、短时平均自相关、短时平均幅度差。2实验原理语音信号的时域分析就是分析和提取语音信号的时域参数。时域分析通常用于最基本的参数分析及应
6、用,此方法表示语音信号比较直观,物理意义明确,实现起来比较简单,运算量少。3实验过程1)观察浊音信号波形图2)观察清音信号波形图3)计算语音信号的短时能量、短时平均幅度并画图N−12Exnn=∑()mm=0N−1Mnn=∑
7、()
8、xmm=04)计算信号的短时平均过零率并画图N−11Zn=−{∑
9、sgn[()]sgn[(xmnnxm−1)]
10、}2m=05)计算语音信号的短时自相关函数并画图Nk−−1Rnn()kx=+∑()(mxnmk)m=06)计算语音信号的短时平均幅度差函数并画图Nk−−1Fknn()=−∑
11、()xmxmkn(+)
12、m=04实验结
13、果实验二程序%短时能量[x,fs,bits]=wavread('c:WINDOWSMediachimes.wav');x=x(:,1);x=x';len=length(x);N=256;M=128;Fn=fix((len-N)/M+1);y=[];fori=1:Fndown=1+(i-1)*M;up=down+N-1;temp=x(down:up);y=[y;temp];end%K=100;E=[];fori=1:Fntemp=sum(y(i,:).^2,2);E=[E,temp];endplot(E)%短时平均幅度差[x,fs,bits]=
14、wavread('c:WINDOWSMediachimes.wav');x=x(:,1);x=x';len=leng