基于MATLAB的语音信号滤波处理和程序设计.docx
《基于MATLAB的语音信号滤波处理和程序设计.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的语音信号滤波处理和程序设计.docx(15页珍藏版)》请在冰豆网上搜索。
基于MATLAB的语音信号滤波处理和程序设计
郑州轻工业学院
课程设计说明书
题目:
基于MATLAB的语音信号滤波处理和程序设计
姓名:
院(系):
专业班级:
学号:
指导教师:
成绩:
时间:
2014年6月09日至2014年6月13日
基于MATLAB的语音信号滤波处理和程序设计
摘要
MATLAB语言是一种数据分析和处理功能十分强大的计算机应用软件,它可以将声音文件变换为离散的数据文件,然后利用其强大的矩阵运算能力处理数据,如数字滤波、傅里叶变换、时域和频域分析、声音回放以及各种图的呈现等,信号处理是MATLAB重要应用的领域之一。
本课程设计介绍了基于Matlab的对语音信号采集、处理及滤波器的设计,并使之实现的过程。
理解与掌握课程中的基本概念、基本原理、基本分析方法,用Matlab进行数字语音信号处理,并阐述了课程设计的具体方法、步骤和内容。
综合运用本课程的理论知识进行频谱分析以及滤波器设计,通过理论推导得出相应结论,并利用MATLAB作为工具进行实现,从而复习巩固课堂所学的理论知识,提高对所学知识的综合应用能力,并从实践上初步实现对数字信号的处理。
关键词:
MATLAB工具/信号语音采集/滤波
目录
摘要I
目录II
1设计目的、要求和背景1
1.1语音信号处理简介1
1.2语音信号处理的背景和意义1
1.3设计目的2
2整体设计过程3
2.1原理分析3
2.2语音信号的获取4
2.3语音信号的时域频域分析4
2.4干扰信号的构建5
3信号变化分析5
3.1原始语音信号的程序实现和时域频域图5
3.2干扰信号在MATLAB软件中的实现7
3.3对原始语音信号加入干扰信号8
心得体会13
致谢14
1设计目的、要求和背景
1.1语音信号处理简介
信号处理是现代信息处理的基本内容,数字信号的处理更是重中之重。
数字信号处理的研究内容主要是语音信号和图像信号,而研究语音信号对于现代语音通信有着积极的意义。
研究语音信号又分为时域和频域两个方面。
(1)语音信号的时域分析处理:
语音信号的时域分析就是分析和提取语音信号的时域参数。
进行语音分析时,最先接触到并且也是最直观的是它的时域波形。
语音信号本身就是时域信号,因而时域分析是最早使用,也是应用最广泛的一种分析方法,这种方法直接利用语音信号的时域波形。
时域分析通常用于最基本的参数分析及应用,如语音的分割、预处理、大分类等。
这种分析方法的特点是:
①表示语音信号比较直观、物理意义明确。
②实现起来比较简单、运算且少。
③可以得到语音的一些重要的参数。
④只使用示波器等通用设备,使用较为简单等。
(2)语音信号的频谱分析处理:
语音信号的频域分析就是分析语音信号的频域持征。
从广义上讲,语音信号的频域分析包括语音信号的频谱、功率谱、倒频谱、频谱包络分析等,而常用的频域分析方法有带通滤波器组法、傅里叶变换法等几种。
本文介绍的是语音信号的傅里叶分析法。
因为语音波是一个非平稳过程,因此适用于周期、瞬变或平稳随机信号的标准傅里叶变换不能用来直接表示语音信号,而应该用短时傅里叶变换对语音信号的频谱进行分析,相应的频谱称为“短时谱 ”。
本设计是用MATLAB仿真软件设计滤波器对受干扰的语音信号进行滤波处理,并对各部分进行频谱分析。
1.2语音信号处理的背景和意义
语音信号处理是一门研究用数字信号处理技术对语音信号进行处理的学科,处理的目的是用于得到的某些参数以便高效传输和存储;或者应用于人工合成、语音识别和语音增强等。
同时也是以生理学、心理学、语言学以及声学等学科为基础,以信息论、控制论、系统论的理论做指导,通过应用信号处理、统计分析、模式识别等现代技术手段而发展起来的一门综合性学科。
它与语音学、语言学、声学,认知科学、心理学、心理学、数理统计学等许多学科也有着非常密切的联系。
它包括语音编码、语音合成、语音识别与理解等三个主要分支。
语音编码的目的是将模拟的语音信号用尽可能少的比特实现数字化,使被编码和压缩后的信更有效地在网络中传输或记录在存储器中语音合成的目的是让机器生成人类的自然语言语音识别的目的是使机器能识别人类的语言,从而能够按用户的语音指令完成有关的动作或提供有关的信息服务。
语言是从千百万人的言语中历史地概括总结出来的规律符号系统,使人们用以进行思维、交际的形式。
人的思考常常是用语言来进行,语言是人类特有的功能,它创造和记载了几千年的人类文明历史。
语音是声音和意义的结合体,也是信息的载体,是把语言表述出来的物理形式,是人类最重要、最有效、最常用和最方便的交换信息的形式。
当今世界正处于信息时代,计算机技术、通信技术和电子技术的高速发展,推动人类社会进入了信息社会。
因特网和移动通信的普及、电子购物的兴起、多媒体通信及其应用的蓬勃发展,改变了人类生活、工作、娱乐的方式。
自计算机诞生以来,通过语音与计算机交互一直是人类的梦想,随着计算机软硬件和信息技术的飞速发展,这不仅对语音信号数字处理提出了越来越高越来越迫切的需求,如实现用语音输入代替键盘输入实现人工智能和交互,同时也为语音信号处理提供了高效软硬件实现的可能性。
简而言之,语音信号处理的任务是实现人一人、人一机器和机器一人的通信,是现代通信领域的重要环节。
1.3设计目的
1.了解语音信号的产生、采集,能绘制语音信号的频率响应曲线及频谱图;
2.学会用MATLAB对语音信号进行分析和处理;
3.掌握用滤波器去除语音信号噪声的方法,观察去噪前后的语音信号。
1.4设计要求
1.掌握在Windows环境下的语音信号录制的方法
2.掌握在MATLAB环境下语音信号的采集
3.构建的干扰信号为f(t)=10sin(4000πt)
4.掌握数字信号的处理的基本概念、基本理论和基本方法
5.利用MATLAB设计滤波器对干扰的语音信号进行滤波
6.掌握MATLAB的程序设计方法
1.5设计步骤
1.利用windows下的录音机,录制一段自己的话音“大家好”
2.利用MATLAB对所录制的信号进行时域和频域的分析
3.构建一个干扰信号,把语音信号和干扰信号叠加,并且利用MATLAB对干扰后的语音信号进行时域和频域的分析
4.对干扰后的信号进行滤波,画出滤波后的信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化.
2整体设计过程
2.1原理分析
本设计主要是对语音信号的时频进行分析,并对语音信号加噪后设计滤波器对其进行滤波处理,对话音信号加噪声前后的频谱进行比较分析,对合成语音信号滤波前后进行频谱的分析比较。
首先用PC机WINDOWS下的录音机录制一段语音信号,并保存入MATLAB软件的根目录下,再运行MATLAB仿真软件把录制好的语音信号用wavread函数加载入MATLAB仿真软件的工作环境中,输入命令对语音信号进行时域,频谱变换。
利用正弦信号产生噪声信号,模拟信号sint经过采样,并且采样的长度必须要和原始语音信号长度一样长,才可以实现噪声信号与原始语音信号的叠加。
把噪声信号加入到录制的语音信号中,用命令可以得到其频谱图。
对该段合成的语音信号,用命令在MATLAB中设计一个恰当的滤波器对其进行滤波处理,此处用低通滤波器对其进行滤波,滤波后用命令可以绘制出其频谱图,回放语音信号。
对原始语音信号、合成的语音信号和经过滤波器处理的语音信号进行频谱的比较分析。
2.2语音信号的获取
利用PC机上的硬件和WINDOWS操作系统可以很方便地进行数字信号的采样。
打开电脑Windows窗口菜单中的附录子菜单里的录音机软件,录音机界面如图
图
(1)
所示。
使用录音机录制一小段声音片段“大家好”,然后保存文件名为“lgh.wav”,如下图2。
图
(2)
在Matlab中,[y,fs,bits]=wavread('Blip',[N1 N2]);用于读取语音,采样值放在向量y中,fs表示采样频率(Hz),bits表示采样位数。
[N1 N2]表示读取从N1点到N2点的值(若只有一个N的点则表示读取前N点的采样值)。
sound(x,fs,bits);用于对声音的回放。
向量y则就代表了一个信号(也即一个复杂的函数表达式”)也就是说可以像处理一个信号表达式一样处理这个声音信号。
2.3语音信号的时域频域分析
在Matlab软件平台下可以利用函数wavread对语音信号进行采样,得到了声音数据变量y,同时把y的采样频率Fs=8000Hz和数据位Nbits=8Bit放进了MATALB的工作空间。
上述程序是在Matlab软件中画出语音信号的时域波形(图3),回放录入声音。
从图中可以看出在时域环境下,信号呈现出3个不规则的信号峰值。
然后对语音信号进行频谱分析,在Matlab中可以利用函数fft对信号行快速傅里叶变换,得到信号的频谱图如图3所示。
2.4干扰信号的构建
在Matlab中人为设计一固定频率的噪声干扰信号。
在本设计中用正弦序作为干扰信号。
干扰信号为:
f(t)=10sin(4000πt)。
2.5信号合成
在Matlab中把语音信号与噪声信号进行叠加。
对其进行播放,并画出其频谱图如图5所示,从图中可以看出,在该语音信号的12000Hz处有一高峰,这正是干扰所造成的。
2.6数字滤波的设计并对加噪信号进行滤波处理
数字滤波器分为FIR数字滤波器和IIR数字滤波器两种,可以用硬件和软件来设计实现。
软件设计主要有脉冲响应不变法、双线性变换法、窗口函数法。
本设计是用窗函数法设计FIR低通滤波器。
针对以上语音信号设定滤波器的性能指标用kaiser窗设计低通滤波器。
用设计好的带阻滤波器对含噪语音信号进行滤波,在Matlab中FIR滤波器利用函数fftfilt对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波。
在一个窗口同时画出滤波前后的波形及频谱如图7所示。
3信号变化分析
3.1原始语音信号的程序实现和时域频域图
在matlab软件平台下,利用wavread函数对语音信号进行采样,记住采样频率和采样点数。
通过使用wavread函数,理解采样频率、采样位数等概念。
wavread函数调用格式
y=wavread(file),读取file所规定的wav文件,返回采样值放在向量y中。
[y,fs,nbits]=wavread(file),采样值放在向量y中,fs表示采样频率(hz),nbits表示采样位数。
y=wavread(file,N),读取钱N点的采样值放在向量y中。
y=wavread(file,[N1,N2]),读取从N1到N2点的采样值放在向量y中。
对语音信号“lgh.wav”进行采样其程序如下:
[y,fs,bits]=wavread('E:
\MATLAB7\work\lgh.wav');
sound(y,fs)
n=length(y)
y_p=fft(y,n);
f=fs*(0:
n/2-1)/n;
figure
(1)
subplot(2,1,1);
plot(y);
title('原始语音信号时域波形');
xlabel('时间轴(s)')
ylabel('幅度(A)')
subplot(2,1,2);
plot(f,abs(y_p(1:
n/2)));
axis([02000002000]);
title('原始语音信号频谱图');
xlabel('频率HZ');
ylabel('频率幅度');
图(3)原始信号时域、频域图
从上图可看出,在时域内,语音信号具有短时性的特点,而在频域内,语音信号的频谱分量主要集中在0-4000HZ的范围内。
3.2干扰信号在MATLAB软件中的实现
我们对原始信号加入的干扰信号是f(t)=10sin(4000πt)如图4,其程序如下:
[y,fs,bits]=wavread('E:
\MATLAB7\work\lgh.wav');
n=1000
t=(0:
n-1)/100000;
f=fs*(0:
n/2-1)/n;
y1=10*sin(2*pi*2000*t);
y2=fft(y1,n);
subplot(2,1,1);
plot(y1)%噪音信号的时域波形图
title('噪声信号时域波形图');
xlabel('时间轴(s)')
ylabel('幅度(A)')
subplot(2,1,2);
plot(f,abs(y2(1:
n/2)));
title('噪音信号频谱图');
xlabel('频率(HZ)');
ylabel('频率幅度(A)');
图(4)噪声信号时域、频域图
3.3对原始语音信号加入干扰信号
加入噪声后回放的声音与原始的语音信号有明显的不同,其伴随较尖锐的干扰啸叫声。
从含噪语音信号的频谱图中可以看出是含噪的语音信号的频谱,在1000Hz处有上高峰,这正是干扰所造成的。
程序如下:
L=length(y)%计算音频信号的长度
t=(0:
L-1)/8000;
A=10;
f=4000;
d=[A*sin(f*pi*t)]';%产生等长度的正弦噪声信号
y_z=y+[dd];%将两个信号叠加成一个新的信号
sound(y_z,fs);%对加噪后的语音信号进行分析
n=length(y);%选取变换的点数
y_zp=fft(y_z,n);%对n点进行傅里叶变换到频域
f=fs*(0:
n/2-1)/n;%对应点的频率
figure
(2)
subplot(2,1,1);
plot(y_z);%加噪语音信号的时域波形图
axis([0130-1515]);
title('加噪语音信号的时域波形图');
xlabel('时间轴')
ylabel('幅度(A)')
subplot(2,1,2);
plot(f,abs(y_zp(1:
n/2)));%加噪语音信号的频谱图
axis([02000002000]);
title('加噪语音信号频谱图');
xlabel('频率(HZ)');
ylabel('频率幅度');
图(5)加噪语音信号时域、频域图
3.4用低通滤波器对加噪语音信号进行滤波处理
当用低通滤波器(如图6)滤波后的含噪声语音信号,从图上可看出,干扰信号被成功滤除了。
具体程序如下:
fp=1500;fc=1700;As=100;Ap=1;%(以上为低通滤波器的性能指标)
wc=2*pi*fc/fs;wp=2*pi*fp/fs;
wdel=wc-wp;
beta=0.112*(As-8.7);
N=ceil((As-8)/2.285/wdel);
wn=kaiser(N+1,beta);
ws=(wp+wc)/2/pi;
b=fir1(N,ws,wn);
figure(3);
freqz(b,1);
%(此前为低通滤波器设计阶段)——接下来为去除噪声信号的程序
x=fftfilt(b,y,z);
X=fft(x,n);
figure(4);
subplot(2,2,1);
plot(f,abs(y_zp(1:
n/2)));
axis([02000002000]);
title('滤波前信号的频谱');
subplot(2,2,2);
plot(f,abs(X(1:
n/2)));
axis([02000002000]);
title('滤波后信号频谱');
subplot(2,2,3);
plot(y_z);
title('滤波前信号的波形')
axis([0200000-1515]);
subplot(2,2,4);
plot(x);
axis([0200000-11]);
title('滤波后信号的波形')
图(6)数字滤波
图(7)滤波前后的时域、频域比较
心得体会
为期一周的课程设计结束了,我从中学到了很多东西,通过这次课程设计让我对MATLAB软件有了更清楚熟练度的了解和认识,并熟练掌握了一些MATLAB的基本知识,并使我对语音信号有了全面的认识,对数字信号处理的知识又有了深刻的理解,在之前数字信号与处理的学习以及完成数字信号处理实验的过程中,已经使用过MATLAB,对其有了一些基础的了解和认识。
学会了信号和绘制信号的基本命令和一些基础编程语言。
这次课程设计让我的思维方式得到了进一步加强,提高了解决问题的办法,对于进一步掌握MATLAB软件的使用,会让我在以后的工作中受益匪浅。
致谢
这次课程设计,无论在知识还是能力方面,我从中受益匪浅,使我们真正地学会了如何正确地使用各种电子元器件,并在完成之后,进行验证设计是否合格,并一步一步地检测调试直至测试程序能够正常运行,各种功能得以实现。
同时九人一组,也增强了我们的团队协作能力,是我们认识到团队精神是成功的必不可缺的法宝。
在此我要向帮助我的指导老师表示衷心的感谢!
课程设计中,有不懂的地方您总能不厌其烦、和蔼可亲地讲解,让我感受到您们的敬业和对学生们的关爱。
同时要感谢同学们的帮助!
他们的帮助让我的这次课程设计进行的相当顺利,并从中获益颇多。
最后再次感谢老师的悉心指导!
使我掌握到了焊接设计、调试等方面的本领,并再次感谢帮助过我的同学,使我感到了他们的对人无私帮助的温暖。
参考文献
[1]张文.基于MATLAB的语音信号的滤波域实现.山西电子技术.2008.2
[2]陈后金.信号与系统(第1版).高等教育出版社.2007.12
[3]陈怀琛.MATLAB及在电子信息课程中的应用.北京电子工业出版社.2008.1
[4]徐靖涛.基于MATLAB的语音信号分析与处理.重庆科技学院学报.2008.1
[5]程佩青.数字信号处理教程(第三版).清华大学出版社.2007.2