语音信号.docx
《语音信号.docx》由会员分享,可在线阅读,更多相关《语音信号.docx(9页珍藏版)》请在冰豆网上搜索。
语音信号
目录
1前言1
2语音信号的采集和双线性法滤波器2
2.1语音信号的采集2
2.2双线性法滤波器的设计2
3时域和频域分析5
3.1原始信号的波形和频谱及滤波后的波形和频谱5
3.2时域分析5
3.3频域分析6
4总结9
参考文献10
1前言
语音(speech)它由人的发音器官发出,负载着一定的语言意义,由音高、音强、音长、音色构成。
语音信号在现实生活中有着广泛的应用,而matlab这个软件可对语音信号进行分析和处理,方便人们对所用到的语音信号更好的应用。
本次课程设计先在MATLAB中采集语音信号,语音信号来自Windows自带的“WindowsXP关机.wav”或Windows自带的其他语音信号。
再用双线性变换法设计了巴特沃斯型低通数字滤波器滤除了采集到的信号的高频成分。
然后画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化。
2语音信号的采集和双线性法滤波器
2.1语音信号的采集
因本次课程设计用的是windows自带的.wav格式的语音,当然,也可以用现有的工具如MP3,MP4,MP5或用电脑录制一段.wav格式的语音。
在matlab中读入所采集的语音信号时需要调用wavread函数
调用格式为:
[x,Fs,bits]=wavread('filename');
其功能为把数据文件的声音数据赋值给变量x,同时把x的采样频率Fs和数据的位数bits放进matlab工作空间。
还可以用sound函数听一下读入的声音,调用格式为:
sound(x,Fs,bits);需注意,当sound(x)时也可以听到声音,但由于没读入频率Fs和位数bits,会失真,与读入matlab之前的声音不一样。
2.2双线性法滤波器的设计
因模拟滤波器设计技术已经非常成熟,可以得到闭合形式的解,关于模拟滤波器的设计有大量程序和表格可以利用,所以在设计IIR滤波器时,采用模拟滤波器来设计数字滤波器。
IIR滤波器的设计就是在给定滤波器的指标后,确定滤波器的阶数N和和系数。
利用双线性变换实现频率响应S域到Z域的变换法设计了巴特沃斯低通数字IIR滤波器
参数:
wp=0.25pi,ws=0.4pi,Rp=1dB,As=15dB,采样频率Fs=6000Hz
幅度响应如图2-1所示:
图2-1
Matlab程序为:
%数字滤波器指标:
wp=0.25*pi;ws=0.4*pi;
Rp=1;%passbandrippleindB
As=15;%stopbandattenuationindB
ripple=10^(-Rp/20);Attn=10^(-As/20);
%转换为模拟滤波器指标:
Fs=6000;T=1/Fs;
Omgp=(2/T)*tan(wp/2);
Omgs=(2/T)*tan(ws/2);
%模拟原型滤波器计算
[N,Omgc]=buttord(Omgp,Omgs,Rp,As,'s')
[bal,aal]=butter(N,Omgc,'s');
%用双线性变换法计算数字滤波器系数
[bd,ad]=bilinear(bal,aal,Fs)
[sos,g]=tf2sos(bd,ad)
%求数字系统的频率特性
[H,w]=freqz(bd,ad);
dbH=20*log10((abs(H)+eps)/max(abs(H)));
subplot(2,1,1),plot(w/pi,abs(H));xlabel('频率/\pi');
ylabel('|H|');title('幅度响应');axis([0,1,0,1.1]);
set(gca,'XTickMode','manual','XTick',[0,0.25,0.4,1]);
set(gca,'YTickMode','manual','YTick',[0,Attn,ripple,1]);grid
subplot(2,1,2),plot(w/pi,dbH);xlabel('频率/\pi');
ylabel('dB');title('幅度响应(dB)');axis([0,1,-40,5]);
set(gca,'XTickMode','manual','XTick',[0,0.25,0.4,1]);
set(gca,'YTickMode','manual','YTick',[-50,-15,-1,]);grid
3时域和频域分析
3.1原始信号的波形和频谱及滤波后的波形和频谱
如图3-1所示,为原始信号的波形和频谱及滤波后的波形和频谱
图3-1
3.2时域分析
因为时域分析具有:
表示语音信号比较直观、物理意义明确;实现起来比较简单、运算且少;可以得到语音的一些重要的参数;只使用示波器等通用设备,使用较为简单等特点。
所以在对语音信号分析时经常用到。
在对语音信号进行时域分析时,最先接触到也是最直观的就是它的时域波形。
由图3-1可以看到原始语音信号的波形和滤波后的波形大致形状相同,只是,滤波后的波形变化稍缓慢一些且有些地方的幅值被滤波器滤掉而消失了。
在时间域变化不明显。
3.3频域分析
语音信号的频域分析包括语音信号的频谱、功率谱、倒频谱、频谱包络分析等,这里主要用傅里叶变换法分析语音信号的频谱。
因为语音波是一个非平稳过程,因此适用于周期、瞬变或平稳随机信号的标准傅里叶变换不能用来直接表示语音信号,而应该用短时傅里叶变换对语音信号的频谱进行分析,相应的频谱称为“短时谱”
由图3-1可以看出,由fft快速傅里叶变换所得到的频谱,经过所设计的低通滤波器后部分高频成分被滤除了。
Matlab程序为:
%利用双线性变换实现频率响应S域到Z域的变换法设计了巴特沃斯低通数字IIR滤波器
%要求:
wp=0.25pi,ws=0.4pi,Rp=1dB,As=15dB,采样频率Fs=6000Hz
[x,Fs,bits]=wavread('Windows.wav');
%sound(x,Fs,bits);
X=fft(x,4096);
X1=fftshift(X);
%数字滤波器指标:
wp=0.25*pi;
ws=0.4*pi;
Rp=1;%passbandrippleindB
As=15;%stopbandattenuationindB
ripple=10^(-Rp/20);Attn=10^(-As/20);
%转换为模拟滤波器指标:
Fs=6000;T=1/Fs;
Omgp=(2/T)*tan(wp/2);
Omgs=(2/T)*tan(ws/2);
%模拟原型滤波器计算
[N,Omgc]=buttord(Omgp,Omgs,Rp,As,'s')
[bal,aal]=butter(N,Omgc,'s');
%用双线性变换法计算数字滤波器系数
[bd,ad]=bilinear(bal,aal,Fs)
[sos,g]=tf2sos(bd,ad)
%求数字系统的频率特性
[H,w]=freqz(bd,ad);
dbH=20*log10((abs(H)+eps)/max(abs(H)));
subplot(2,1,1),plot(w/pi,abs(H));xlabel('频率/\pi');
ylabel('|H|');title('幅度响应');axis([0,1,0,1.1]);
set(gca,'XTickMode','manual','XTick',[0,0.25,0.4,1]);
set(gca,'YTickMode','manual','YTick',[0,Attn,ripple,1]);grid
subplot(2,1,2),plot(w/pi,dbH);xlabel('频率/\pi');
ylabel('dB');title('幅度响应(dB)');axis([0,1,-40,5]);
set(gca,'XTickMode','manual','XTick',[0,0.25,0.4,1]);
set(gca,'YTickMode','manual','YTick',[-50,-15,-1,]);grid
y=filter(bd,ad,x);
sound(y,Fs,bits);
Y=fft(y,4096);
Y1=fftshift(Y);
subplot(2,2,1);plot(x);title('原始信号波形');
subplot(2,2,2);plot(abs(X1));title('原始信号频谱');
xlabel('Hz');ylabel('幅度');
subplot(2,2,3);plot(y);title('滤波后的波形');
subplot(2,2,4);plot(abs(Y1));title('滤波后的频谱');
xlabel('Hz');ylabel('幅度');
运行后,得到:
N=5
bd=0.00720.03620.07250.07250.03620.0072
ad=1.0000-1.94341.9680-1.07020.3166-0.0392
4总结
一个星期的课程设计终于圆满的画上了句号。
做过这次课程设计之后感觉收获不小,最重要的是我得到了一种忧患意识,对所学过的基础课程和相关专业课知识掌握不牢固,在以后学习中还得经常回顾,经常运用。
在最初拿到题目的时候感到没有思路,不知道从哪下手。
但是经过老师的指导并查阅了一些相关资料后,思路逐渐的清晰起来,然后就很快按着已经有的思路展开工作。
先用matlab读入了语音信号,画出原始语音信号的时域波形和频谱图,然后设计了滤波器,画出了滤波器的幅度响应,又对原始语音信号进行滤波处理,并比较了滤波前后的时域和频谱。
在设计过程中出现了一些困难,自己通过上网和在图书馆查资料,还有和同学讨论和请教老师,问题大都解决了。
虽然其中走了很多的弯路,但是我在这一周的时间里是充实的,在这一周里使我对matlab的课程知识有了更深一步的了解和掌握。
不仅丰富了课本的理论知识,而且锻炼了自己的实践能力。
这次的课程设计,是一次理论与实践的结合,也可以说让我们平时的积累得到了一次施展,让我加深了对信号与系统和数字信号处理的理解,明白了所学知识的重要性和自己理论知识的欠缺,增加了自己对所学课程的兴趣。
将理论和实践相结合使自己的能力有了很大的提高。
课程设计是本科生教学不可缺少的部分,通过本课程设计的练习过程,使我提高了应用matlab软件处理语音信号的能力,这些东西在课本上是没办法学到的,也知道了matlab的更多功能。
同时我查阅相关的资料,丰富的我的知识面,锻炼了自己的动手操作能力。
这次课程设计提高了我的动手操作matlab软件的能力,加深了知识点的学习,在合作中增强了同学之间的了解,加深了同学之间的友谊。
同时在请教老师的过程中不仅解决了在课程设计中遇到的困难,也在和老师的接触中学到了分析问题,解决问题的方法,以及老师待人处事的方法和兢兢业业,无私奉献的精神。
同时这次课程设计有答辩环节,这也是毕业答辩前的一次演练,从而使我们了解了答辩流程,答辩方法,为毕业答辩做好充分的准备。
顺利完成这次课程设计,不仅要感谢同学的热心帮助,更要感激老师的耐心指导,是老师的指导才让我的这次设计更加顺利和得到更好的设计效果,并让我从中学到很多实践知识。
总之,收获很多。
参考文献
1、张文.基于MATLAB的语音信号的滤波与实现[J].山西电子技术.2008,2
2、徐靖涛.基于MATLAB的语音信号分析与处理[J].重庆科技学院学报2008,1
3、刘舒帆等.数字信号处理与实验(MATLAB版).西安电子科技大学出版社2008,5
4、陈后金.数字信号处理.高等教育出版社.2004,7
5、程佩青.数字信号处理教程(第二版).北京:
清华大学出版社.2001,8