您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 语音信号的短时时域分析
1实验2 语音信号的短时时域分析 一、实验目的语音信号是一种非平稳的时变信号,它携带着各种信息。在语音编码、语音合成、语音识别和语音增强等语音处理中都需要提取语音中包含的各种信息。语音处理的目的是对语音信号进行分析,提取特征参数,用于后续处理;加工语音信号。总之,语音信号分析的目的就在于方便有效的提取并表示语音信号所携带的信息。根据所分析的参数类型,语音信号分析可以分成时域分析和变换域(频域、倒谱域)分析。其中时域分析方法是最简单、最直观的方法,它直接对语音信号的时域波形进行分析,提取的特征参数主要有语音的短时能量和平均幅度、短时平均过零率、短时自相关函数和短时平均幅度差函数等。二、实验要求本实验要求掌握语音信号的短时时域分析方法,会利用已学的知识,编写程序计算语音的短时能量和平均幅度、短时平均过零率、短时自相关函数和短时平均幅度差函数等。三、实验设备PC微机一台四、实验原理1语音信号的预处理 在对语音信号进行数字处理之前,首先要将模拟语音信号s(t)离散化为s(n).实际中获得数字语音的途径一般有两种,正式的和非正式的。正式的是指大公司或语音研究机构发布的被大家认可的语音数据库,非正式的则是研究者个人用录音软件或硬件电路加麦克风随时随地录制的一些发音或语句。语音信号的频率范围通常是300~3400Hz,一般情况下取采样2率为8kHz即可。本实验的数字语音处理对象为语音数据文件,是已经数字化了的语音。有了语音数据文件后,对语音的预处理包括:预加重、加窗分帧等。1.1语音信号的预加重处理 预加重目的:为了对语音的高频部分进行加重,去除口唇辐射的影响,增加语音的高频分辨率。可通过一阶FIR高通数字滤波器来实现:1()1Hzz设n时刻的语音采样值为x(n),经过预加重处理后的结果为:()()(1)ynxnxn高通滤波器的幅频特性和相频特性如下:图1预加重前和预加重后的一段语音信号时域波形:3图2预加重前和预加重后的一段语音信号频谱:图3例一:语音信号预加重clearall;fid=fopen('voice2.txt','rt')%打开文件e=fscanf(fid,'%f');%读数据ee=e(200:455);%选取原始文件e的第200到455点的语音,也可选其他样点r=fft(ee,1024);%对信号ee进行1024点傅立叶变换4r1=abs(r);%对r取绝对值r1表示频谱的幅度值pinlv=(0:1:255)*8000/512%点和频率的对应关系yuanlai=20*log10(r1)%对幅值取对数signal(1:256)=yuanlai(1:256);%取256个点,目的是画图的时候,维数一致[h1,f1]=freqz([1,-0.98],[1],256,4000);%高通滤波器pha=angle(h1);%高通滤波器的相位H1=abs(h1);%高通滤波器的幅值r2(1:256)=r(1:256)u=r2.*h1'%将信号频域与高通滤波器频域相乘相当于在时域的卷积u2=abs(u)%取幅度绝对值u3=20*log10(u2)%对幅值取对数un=filter([1,-0.98],[1],ee)%un为经过高频提升后的时域信号figure(1);subplot(211);plot(f1,H1);title('高通滤波器的幅频响应');xlabel('频率/Hz');ylabel('幅度');subplot(212);plot(pha);title('高通滤波器的相位响应');xlabel('频率/Hz');ylabel('角度/radians');figure(2);subplot(211);plot(ee);title('原始语音信号');xlabel('样点数');ylabel('幅度');axis([0256-3*10^42*10^4]);subplot(212);plot(real(un));title('经高通滤波后的语音信号');xlabel('样点数');ylabel('幅度');axis([0256-1*10^41*10^4]);figure(3);subplot(211);plot(pinlv,signal);title('原始语音信号频谱');xlabel('频率/Hz');ylabel('幅度/dB');subplot(212);plot(pinlv,u3);title('经高通滤波后的语音信号频谱');xlabel('频率/Hz');ylabel('幅度/dB');1.2语音信号的加窗处理 由于发音器官的惯性运动,可以认为在一小段时间里(一般为10ms~30ms)语音信号近似不变,即语音信号具有短时平稳性。这样,可以把语音信号分为一些短段(称为分析帧)来进行处理。语音信号的分帧实现方法采用可移动的有限长度窗口进行加权的方法来实现的。一般每5秒的帧数约为33~100帧。分帧一般采用交叠分段的方法,这是为了使帧与帧之间平滑过渡,保持其连续性。前一帧和后一帧的交叠部分称为帧移,帧移与帧长的比值一般取为0~1/2。下图给出了帧移与帧长示意图:图4加窗常用的两种方法——矩形窗与汉明(Hamming)窗。矩形窗的时域表达式分别如下:矩形窗表达式、时域图形及其频谱如下:101()0nNwn其它图5汉明(Hamming)窗表达式、时域图形及其频谱如下:0.540.46cos2π/10()0nNnNwn其它,6图6加窗方法示意图:图7窗长一般选取100~200。原因如下:当窗较宽时,平滑作用大,能量变化不大,故反映不出能量的变化。当窗较窄时,没有平滑作用,反映了能量的快变细节,而看不出包络的变化。语音信号的分帧处理,实际上就是对各帧进行某种变换或运算。设这种变换或运算用T[]表示,x(n)为输入语音信号,w(n)为窗序列,h(n)是与w(n)有关的滤波器,则各帧经处理后的输出可以表示为:[()]()nmQTxmhnm例二:矩形窗x=linspace(0,100,10001);%在0~100的横坐标间取10001个值h=zeros(10001,1);%为矩阵h赋0值h(1:2001)=0;%前2000个值取为0值h(2002:8003)=1;%窗长,窗内值取为1h(8004:10001)=0;%后2000个值取为0值figure(1);%定义图号subplot(1,2,1)%画第一个子图plot(x,h,'k');%画波形,横坐标为x,纵坐标为h,k表示7黑色title('矩形窗时域波形');%图标题xlabel('样点数');%横坐标名称ylabel('幅度');%纵坐标名称axis([0,100,-0.5,1.5])%限定横、纵坐标范围line([0,100],[0,0])%画出x轴w1=linspace(0,61,61);%取窗长内的61个点w1(1:61)=1;%赋值1,相当于矩形窗w2=fft(w1,1024);%对时域信号进行1024点的傅立叶变换w3=w2/w2(1)%幅度归一化w4=20*log10(abs(w3));%对归一化幅度取对数w=2*[0:1023]/1024;%频率归一化subplot(1,2,2);%画第二个子图plot(w,w4,'k')%画幅度特性图axis([0,1,-100,0])%限定横、纵坐标范围title('矩形窗幅度特性');%图标题xlabel('归一化频率f/fs');%横坐标名称ylabel('幅度/dB');%纵坐标名称例三:Hanming窗x=linspace(20,80,61);%在20~80的横坐标间取61个值作为横坐标h=hamming(61);%取61个点的哈明窗值为纵坐标值figure(1);%画图subplot(1,2,1);%第一个子图plot(x,h,'k');%横坐标为x,纵坐标为h,k表示黑色title('Hamming窗时域波形');%图标题xlabel('样点数');%横坐标名称ylabel('幅度');%纵坐标名称w1=linspace(0,61,61);%取窗长内的61个点w1(1:61)=hamming(61);%加哈明窗w2=fft(w1,1024);%对时域信号进行1024点傅立叶变换w3=w2/w2(1);%幅度归一化w4=20*log10(abs(w3))%对归一化幅度取对数w=2*[0:1023]/1024;%频率归一化subplot(1,2,2)%画第二个子图plot(w,w4,'k')%画幅度特性图axis([0,1,-100,0])%限定横、纵坐标范围title('Hamming窗幅度特性');%图标题xlabel('归一化频率f/fs');%横坐标名称ylabel('幅度/dB');%纵坐标名称82 短时平均能量 短时平均能量的定义为,n时刻某语音信号的短时平均能量En为:22(1)[()()][()()]nnmmnNExmwnmxmwnm当窗函数为矩形窗时,有:2(1)()nnmnNExm若令:2()()hnwn,则短时平均能量可以写成:22()()()()nmExmhnmxnhnEn反映语音信号的幅度或能量随时间缓慢变化的规律。窗的长短对于能否由短时能量反映语音信号的幅度变化,起着决定性影响。如果窗选得很长,En不能反映语音信号幅度变化。窗选得太窄,En将不够平滑。通常,当取样频率为10kHz时,选择窗宽度N=100~200是比较合适的。不同矩形窗长N时的短时能量函数如下:9图9短时平均能量的主要用途如下:可以作为区分清音和浊音的特征参数。在信噪比较高的情况下,短时能量还可以作为区分有声和无声的依据。可以作为辅助的特征参数用于语音识别中。例四:短时能量fid=fopen('zqq.txt','rt');%读入语音文件x=fscanf(fid,'%f');fclose(fid);%计算N=50,帧移=50时的语音能量s=fra(50,50,x)s2=s.^2;%一帧内各样点的能量energy=sum(s2,2)%求一帧能量subplot(2,2,1)%定义画图数量和布局plot(energy)%画N=50时的语音能量图xlabel('帧数')%横坐标ylabel('短时能量E')%纵坐标legend('N=50')%曲线标识axis([0,1500,0,2*10^10])%定义横纵坐标范围%计算N=100,帧移=100时的语音能量s=fra(100,100,x)10s2=s.^2;energy=sum(s2,2)subplot(2,2,2)plot(energy)%画N=100时的语音能量图xlabel('帧数')ylabel('短时能量E')legend('N=100')axis([0,750,0,4*10^10])%定义横纵坐标范围%计算N=400,帧移=400时的语音能量s=fra(400,400,x)s2=s.^2;energy=sum(s2,2)subplot(2,2,3)plot(energy)%画N=400时的语音能量图xlabel('帧数')ylabel('短时能量E')legend('N=400')axis([0,190,0,1.5*10^11])%定义横纵坐标范围%计算N=800,帧移=800时的语音能量s=fra(800,800,x)s2=s.^2;energy=sum(s2,2)subplot(2,2,4)plot(energy)%画N=800时的语音能量图xlabel('帧数')ylabel('短时能量E')legend('N=800')axis([0,95,0,3*10^11])%定义横纵坐标范围3 短时平均幅度函数 为了克服短时能量函数计算x2(m)的缺点,定义了短时平均幅度函数:|()|()nmMxmwnmMn与En的比较:Mn能较好地反映清音范围内的幅度变化;11Mn所能反映幅度变化的动态范围比En好
本文标题:语音信号的短时时域分析
链接地址:https://www.777doc.com/doc-1821883 .html