《MATLAB课程设计》报告.DOC.pdf

上传人:tbuqq 文档编号:4974051 上传时间:2020-01-22 格式:PDF 页数:17 大小:373KB
返回 下载 相关 举报
《MATLAB课程设计》报告.DOC.pdf_第1页
第1页 / 共17页
《MATLAB课程设计》报告.DOC.pdf_第2页
第2页 / 共17页
《MATLAB课程设计》报告.DOC.pdf_第3页
第3页 / 共17页
《MATLAB课程设计》报告.DOC.pdf_第4页
第4页 / 共17页
《MATLAB课程设计》报告.DOC.pdf_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《《MATLAB课程设计》报告.DOC.pdf》由会员分享,可在线阅读,更多相关《《MATLAB课程设计》报告.DOC.pdf(17页珍藏版)》请在三一文库上搜索。

1、MATLAB 课程设计报告 设计题目 :基于 MATLAB 的语音信号采集与处理 学生姓名 : 学生学号 :20100546 专业班级 :光信息科学与技术 答辩时间 :2013年 12 月 指导教师 :冯明库 广东技术师范学院 电子与信息学院 一、设计目的及意义 1. MATLAB 软件功能简介 MATLAB 的名称源自 Matrix Laboratory,1984年由美国 Mathworks 公司推向 市场。它是一种科学计算软件,专门以矩阵的形式处理数据。MATLAB 将高性能的 数值计算和可视化集成在一起,并提供了大量的内置函数,从而被广泛的应用于 科学计算、控制系统和信息处理等领域的分析

2、、仿真和设计工作。 MATLAB 软件包括五大通用功能,数值计算功能(Nemeric) 、符号运算功能 (Symbolic ) 、 数据可视化功能(Graphic ) 、 数字图形文字统一处理功能 (Notebook) 和建模仿真可视化功能 (Simulink ) 。 其中, 符号运算功能的实现是通过请求MAPLE 内核计算并将结果返回到MATLAB 命令窗口。该软件有三大特点,一是功能强大; 二是界面友善、语言自然;三是开放性强。目前,Mathworks 公司已推出 30多个 应用工具箱。 MATLAB 在线性代数、矩阵分析、数值及优化、数值统计和随机信号 分析、电路与系统、 系统动力学、

3、次那好和图像处理、 控制理论分析和系统设计、 过程控制、建模和仿真、通信系统以及财政金融等众多领域的理论研究和工程设 计中得到了广泛应用。 MATLAB 在信号与系统中的应用主要包括符号运算和数值计算仿真分析。由于 信号与系统课程的许多内容都是基于公式演算,而 MATLAB 借助符号数学工具箱提 供的符号运算功能,能基本满足信号与系统课程的需求。例如解微分方程、傅里 叶正反变换、 拉普拉斯正反变换和z 正反变换等。 MATLAB 在信号与系统中的另一 主要应用是数值计算与仿真分析,主要包括函数波形绘制、函数运算、冲击响应 与阶跃响应仿真分析、信号的时域分析、信号的频谱分析、系统的S域分析和零

4、极点图绘制等内容。数值计算仿真分析可以帮助学生更深入地理解理论知识,并 为将来使用 MATLAB 进行信号处理领域的各种分析和实际应用打下基础。 2. 本题目的意义 本次课程设计的课题为基于MATLAB 的语音信号采集与处理,学会运 用MATLAB 的信号处理功能,采集语音信号,并对语音信号进行滤波及变换处 理,观察其时域和频域特性,加深对信号处理理论的理解,并为今后熟练使 用MATLAB 进行系统的分析仿真和设计奠定基础。 此次实习课程主要是为了进一步熟悉对matlab 软件的使用,以及学会利用 matlab 对声音信号这种实际问题进行处理,将理论应用于实际, 加深对它的理解。 二、设计任务

5、及指标 利用 MATLAB 对语音信号进行分析和处理,采集语音信号后, 利用 MATLAB 软件平台进行频谱分析;并对所采集的语音信号加入干扰噪声,对加入噪声 的信号进行频谱分析,设计合适的滤波器滤除噪声,恢复原信号。语音信号的 “ 短时谱” 对于非平稳信号 , 它是非周期的 , 频谱随时间连续变化 , 因此由傅里 叶变换得到的频谱无法获知其在各个时刻的频谱特性。如果利用加窗的方法从语 音流中取出其中一个短断 , 再进行傅里叶变换 , 就可以得到该语音的短时谱。 。 三、设计过程 (1). 语音信号的采集及分析 基于声卡进行数字信号的采集。 将话筒插入计算机的语音输入插口上, 启动录 音机。按

6、下录音按钮,对话筒说话, 说完后停止录音。要保存文件时, 利用了计算 机上的 A/D 转换器 , 把模拟的声音信号变成了离散的量化了的数字信号, 放音时 , 它又通过D/A 转换器 , 把保存的数字数据恢复为原来的模拟的声音信号。在 Matlab 软件平台下可以利用函数wavread 对语音信号进行采样 , 得到了声音数据 变量 x1, 同时把 x1 的采样频率 fs=22050Hz 和数据位 Nbits=16Bit放进了 MATALB 的工作空间。 图 figure 1 为原始语音信号的时域图形。 从图中可以看出在时域环 境下, 信号呈现出 6 不规则的信号峰值。通过 freqz 函数绘制原

7、始语音信号的频率 响应图 figure 2 。 然后对语音信号进行频谱分析, 在 Matlab 中可以利用函数 fft 对信号行快速傅里叶变换 , 得到信号的频谱图figure 3,从图中可以看出对各个 频点上的随机信号在频域进行抽样 , 抽样频率为 22050Hz。 (2). 给原始信号加上一个高频噪声 在 Matlab 中人为设计一个固定频率5500Hz的噪声干扰信号。噪声信号通常 为 随 机 序 列 , 在 本 设 计 中 用 正 弦 序 列 代 替 , 干 扰 信 号 构 建 命 令 函 数 为 d=Au*sin(2*pi*5500*t),给出的干扰信号为一个正弦信号, 针对上面的语音

8、信 号 , 采集了其中一段。再对噪音信号进行频谱变换得到其频谱图, 从图中可以看出 干扰信号,在 4000Hz和 6000Hz 频点处有一高峰 , 其中 5500Hz 正是本设计所要 利用的。 (3). 设计一个滤波器,滤除高频噪声 由模拟滤波器变换为数字滤波器时, 采用的是双线性变换法, 它保留的是从 模拟到数字域的系统函数表示。 在滤波器的选取时 , 由于设计方法的侧重点不同, 作出比较是困难的。 如果 FIR 滤波器情况下 , 最优的设计将是椭圆滤波器。 用双线 性变换法设计低通滤波器。 的本设计是用双线性变换法设计BW 带阻型滤波器。 在 MATLAB 中 , 可以利用函数 butte

9、rworth,设计 FIR滤波器 , 利用 MATLAB 中的函数 freqz 画出各滤波器的频率响应。用设计好的带阻滤波器对含噪语音信号进行滤 波, 在 Matlab 中 FIR 滤波器利用函数 fftfilt对信号进行滤波 ,FIR 滤波器利用函 数 filter对信号进行滤波。 在一个窗口同时画出滤波前后的波形及频谱。从图中 可以看出 ,5500Hz看到的高峰消失了 , 语音信号与开始的一样 , 滤波器成功的 滤除了干扰信号。 利用 MATLAB 对语音信号进行分析和处理,采集语音信号后, 利用 MATLAB 软件平台进行频谱分析;并对所采集的语音信号加入干扰噪声, 对加入噪声的信号进行

10、频谱分析,设计合适的滤波器滤除噪声,恢复原信号。 四、结论及分析 1用MATLAB 对原始语音信号进行分析,画出它的时域波形和频谱 程序: fs=22050; %语音信号采样频率为22050 x1=wavread(C:Documents and 桌 面声 音 文 件.wav); %读取语音信号的数据,赋给变量x1, sound(x1,22050); %播放语音信号 y1=fft(x1,1024); %对信号做 1024 点 FFT变换 f=fs*(0:511)/1024; %将 0 到 511,步长为 1 的序列的值与 fs 相乘并 除以 1024 的值,赋值给 f figure(1) %创建

11、图形窗 1 plot(x1) %做原始语音信号的时域图形 title(原始语音信号 ); xlabel(time n); %x轴的名字是“ time n ” ylabel(fuzhi n); %y轴的名字是“ fuzhi n” figure(2) freqz(x1) %绘制原始语音信号的频率响应图 title(频率响应图 ) figure(3) subplot(2,1,1); %创建两行一列绘图区间的第1 个绘图区间 plot(abs(y1(1:512) %做原始语音信号的FFT频谱图 title(原始语音信号 FFT频谱) subplot(2,1,2); plot(f,abs(y1(1:51

12、2); %abs是绝对值, plot 是直角坐标下线性刻度曲 线 title(原始语音信号频谱 ) xlabel(Hz); ylabel(幅值); 时域波形和频谱: 图 1 原始语音信号 图 2 语音信号频率响应图 图 3 原始语音信号FFT与信号频谱 2. 给原始的语音信号加上一个高频余弦噪声,频率为5500hz。对加噪后的语音 进行分析,并画出其信号时域和频谱图。 程序: fs=22050; x1=wavread(C:Documents and 桌 面声 音 文 件.wav); %读取语音信号的数据,赋给变量x1 f=fs*(0:511)/1024; %将 0 到 511, 步长为 1的序

13、列的值与 fs 相乘 并除以 1024的值,赋值给 f t=0:1/fs:(length(x1)-1)/fs; %将 0 到 x1 的长度减 1后的值除以 fs 的值, 且步长为 1/fs 的值,的序列的值,赋予t Au=0.03; %噪声幅值 d=Au*sin(2*pi*5500*t); %所加的噪声是正弦信号 x2=x1+d; %将正弦信号噪声加在语音信号上 sound(x2,22050); %播放语音信号 y1=fft(x1,1024); %对信号 y1 做 1024点 FFT变换 y2=fft(x2,1024); %对信号 y2 做 1024点 FFT变换 figure(1); %创建

14、图形窗 1 plot(t,x2); %做加噪后的信号时域图形 (绘出 t 对 x2 的线 性图) title(加噪后的信号 ); xlabel(time n); %x轴的名字是“ time n ” ylabel(fuzhi n); %y轴的名字是“ fuzhi n ” figure(2) %创建图形窗 2 subplot(2,1,1); % 创建两行一列绘图区间的第1 个绘图区间 plot(f,abs(y1(1:512); %做原始语音信号的频谱图 title(原始语音信号频谱 ); xlabel(Hz); %x轴的名字是“ time n ” ylabel(fuzhi); % y轴的名字是“

15、fuzhi ” subplot(2,1,2); %创建两行一列绘图区间的第2 个绘图区间 plot(f,abs(y2(1:512); %做加噪后的语音信号的频谱图 (abs 是绝对 值,plot是直角坐标下线性刻度曲线) title(加噪后的信号频谱 ); xlabel(Hz); %x轴的名字是“ time n ” ylabel(fuzhi); % y轴的名字是“ fuzhi ” 时域波形和频谱: 图 4 加噪后的信号时域图 图 5 原始信号与加噪后信号频谱对比 与原始信号对比,区别: 先原始信号没加噪音之前0 到 2000 有幅值,在 4000到 6000之间没有幅值, 但是在加了噪音之后4

16、000 到 6000 之间出现最大幅值12,超出正常值。 如图 5 原 始信号与加噪后信号频谱对比图所示。 3. 设计合适的滤波器,滤除高频噪声,绘出滤波后的信号频域和时域波形: 程序: % 用双线性变换法设计巴特沃思低通滤波器 wp=0.25*pi; %通带截止频率 ws=0.3*pi; %阻带截止频率 Rp=1; %通带最大衰减( db) Rs=15; %阻带最大衰减( db) Fs=22050; Ts=1/Fs; wp1=2/Ts*tan(wp/2); %将模拟指标转换成数字指标 ws1=2/Ts*tan(ws/2); %将模拟指标转换成数字指标 N,Wn=buttord(wp1,ws1

17、,Rp,Rs,s); %选择滤波器的最小阶数(估算得到 Butterworth低通滤波器的最小阶数 N和 3dB截止频率 Wc ) Z,P,K=buttap(N); %创建 Butterworth低通滤波器原型 Bap,Aap=zp2tf(Z,P,K); %将零极点增益转换为普遍分子,分母 b,a=lp2lp(Bap,Aap,Wn); %将普遍的分子和分母转换为以Wn 为截 止频率 bz,az=bilinear(b,a,Fs); %用双线性变换法实现模拟滤波器到数 字滤波器的转换(模拟转换为数字) H,W=freqz(bz,az); %求频率响应 figure(9) plot(W*Fs/(2*

18、pi),abs(H) %绘制 Butterworth低通滤波器频率响 应曲线 grid %添加图格 xlabel(频率 Hz) ylabel(频率响应幅度 ) title(Butterworth) f1=filter(bz,az,z); %利用上面已做好的滤波器(已bz 和 az 为特征的滤波器) 对 x2 信号进行 滤波,赋值给 f1 figure(10) subplot(2,1,1) %创建两行一列绘图区间的第1 绘图区 间 plot(t,z) %做加噪后的信号时域图形 title(滤波前的时域波形 ); subplot(2,1,2) %创建两行一列绘图区间的第2 绘图区 间 plot(t

19、,f1); title(滤波后的时域波形 ); sound(f1,22050); %播放语音信号 p=length(f1); F0=fft(f1,p); f=0:fs/p:fs*(s-1)/p; figure(11) y2=fft(z,1024); %对信号 y2 做 1024点 FFT变换 subplot(2,1,1); %创建两行一列绘图区间的第1 绘图区 间 plot(f,abs(y4); title(滤波前的频谱 ) xlabel(Hz); %x轴的名字是“ Hz” ylabel(fuzhi); %y轴的名字是“ fuzhi ” subplot(2,1,2) F1=plot(f,abs

20、(F0); title(滤波后的频谱 ) xlabel(Hz); ylabel(fuzhi); 时域波形和频谱: 图 6 低通滤波器频率响应曲线 图 7 滤波前后时域波形图 图 8 滤波前后频谱图 与原噪音信号对比,区别: 通过对比分析可知,滤波后的输出波形和原始语音加噪声信号的 图形发生了一些变化, 在 3000-6000Hz之间的信号消失, 出现 0-1000 和 7000-8000 之间的信号。滤波后的输出波形明显在对应时间幅度比 原语音加噪声信号的要小,而且滤波的效果也与滤波器的选择有关, 可以看出滤波器的性能差异以及参数的调节会对滤波器产生一定的影 响,并且通过回放可以发现滤波前后的

21、声音有变化. 低通滤波后 , 已很 接近原来的声音, 人耳几乎辨别不出。从频谱图中我们还可以看出声 音的能量信号主要集中在低频部分,说明高频语音信号被滤出,滤波 器达到既定要求。 五、设计体会 正所谓“纸上得来终觉浅, 觉知此事要躬行。”学习任何知识, 仅从理论上去 求知,而不去实践、探索是不够的。因此在学期末来临之际,我们迎来了MATLAB 课程设计。 通过为期一周半的MATLAB 课程设计,我对 MATLAB 这个仿真软件有了更进一 步的认识和了解。在这一周半时间里,我通过自己摸索,查阅资料,并且在老师 的指导下完成了:语音信号的采集及分析;给原始信号加上一个高频噪声;设计 一个滤波器,滤

22、除高频噪声;并最终将课程设计报告总结完毕。 在整个设计过程中我懂得了许多东西,也培养了独立思考和设计的能力,树 立了对知识应用的信心,相信会对今后的学习工作和生活有非常大的帮助,并且 提高了自己的动手实践操作能力,使自己充分体会到了在设计过程中的成功喜 悦。虽然这个设计做的不怎么好,但是在设计过程中所学到的东西是这次课程设 计的最大收获和财富,使我终身受益。 在没有做课程设计以前,觉得课程设计只是对知识的单纯总结,但是通过这 次课程设计发现自己的看法有点太片面,课程设计不仅是对前面所学知识的一种 检验,也是对自己能力的一种提高,通过这次课程设计使自己明白了原来的那点 知识是非常欠缺的,要学习的

23、东西还很多,通过这次课程设计,明白学习是一个 长期积累的过程,在以后的工作和生活中都应该不断的学习,努力提高自己的知 识和综合素质。希望以后像这样的课程设计在多一点。 参考文献: 1 姚东.MATLAB 及在电子信息课程中的应用M. 第二版 . 北京:北京电子工业出 版社,2000 2 张智星 .MATLAB 程序设计与应用 . 北京:清华大学出版社,2002 3 陈怀琛 .MATLAB及其在理工课程中的应用指南. 西安:西安电子科技大学出版 社,1999.10 4 肖伟、刘忠 . MATLAB程序设计与应用 M. 北京:清华大学出版社 2005 程序清单: fs=22050; %语音信号采样

24、频率为22050 x1=wavread(C:Documents and 桌 面声 音 文 件.wav); %读取语音信号的数据,赋给变量x1, sound(x1,22050); %播放语音信号 y1=fft(x1,1024); %对信号做 1024 点 FFT变换 f=fs*(0:511)/1024; %将 0 到 511,步长为 1 的序列的值与 fs 相乘并 除以 1024 的值,赋值给 f figure(1) %创建图形窗 1 plot(x1) %做原始语音信号的时域图形 title(原始语音信号 ); xlabel(time n); %x轴的名字是“ time n ” ylabel(f

25、uzhi n); %y轴的名字是“ fuzhi n” figure(2) freqz(x1) %绘制原始语音信号的频率响应图 title(频率响应图 ) figure(3) subplot(2,1,1); %创建两行一列绘图区间的第1 个绘图区间 plot(abs(y1(1:512) %做原始语音信号的FFT频谱图 title(原始语音信号 FFT频谱) subplot(2,1,2); plot(f,abs(y1(1:512); %abs是绝对值, plot 是直角坐标下线性刻度曲 线 title(原始语音信号频谱 ) xlabel(Hz); ylabel(幅值); fs=22050; x1=

26、wavread(C:Documents and 桌 面声 音 文 件.wav); %读取语音信号的数据,赋给变量x1 f=fs*(0:511)/1024; %将 0 到 511, 步长为 1的序列的值与 fs 相乘 并除以 1024的值,赋值给 f t=0:1/fs:(length(x1)-1)/fs; %将 0 到 x1 的长度减 1后的值除以 fs 的值, 且步长为 1/fs 的值,的序列的值,赋予t Au=0.03; %噪声幅值 d=Au*sin(2*pi*5500*t); %所加的噪声是正弦信号 x2=x1+d; %将正弦信号噪声加在语音信号上 sound(x2,22050); %播放

27、语音信号 y1=fft(x1,1024); %对信号 y1 做 1024点 FFT变换 y2=fft(x2,1024); %对信号 y2 做 1024点 FFT变换 figure(1); %创建图形窗 1 plot(t,x2); %做加噪后的信号时域图形 (绘出 t 对 x2 的线 性图) title(加噪后的信号 ); xlabel(time n); %x轴的名字是“ time n ” ylabel(fuzhi n); %y轴的名字是“ fuzhi n ” figure(2) %创建图形窗 2 subplot(2,1,1); % 创建两行一列绘图区间的第1 个绘图区间 plot(f,abs(

28、y1(1:512); %做原始语音信号的频谱图 title(原始语音信号频谱 ); xlabel(Hz); %x轴的名字是“ time n ” ylabel(fuzhi); % y轴的名字是“ fuzhi ” subplot(2,1,2); %创建两行一列绘图区间的第2 个绘图区间 plot(f,abs(y2(1:512); %做加噪后的语音信号的频谱图 (abs 是绝对 值,plot是直角坐标下线性刻度曲线) title(加噪后的信号频谱 ); xlabel(Hz); %x轴的名字是“ time n ” ylabel(fuzhi); % y轴的名字是“ fuzhi ” % 用双线性变换法设计

29、巴特沃思低通滤波器 wp=0.25*pi; %通带截止频率 ws=0.3*pi; %阻带截止频率 Rp=1; %通带最大衰减( db) Rs=15; %阻带最大衰减( db) Fs=22050; Ts=1/Fs; wp1=2/Ts*tan(wp/2); %将模拟指标转换成数字指标 ws1=2/Ts*tan(ws/2); %将模拟指标转换成数字指标 N,Wn=buttord(wp1,ws1,Rp,Rs,s); %选择滤波器的最小阶数(估算得到 Butterworth 低通滤波器的最小阶数N 和 3dB 截止频率 Wc) Z,P,K=buttap(N); %创建 Butterworth 低通滤波器

30、原型 Bap,Aap=zp2tf(Z,P,K); %将零极点增益转换为普遍分子,分母 b,a=lp2lp(Bap,Aap,Wn); %将普遍的分子和分母转换为以Wn 为 截止频率 bz,az=bilinear(b,a,Fs); %用双线性变换法实现模拟滤波器到数 字滤波器的转换(模拟转换为数字) H,W=freqz(bz,az); %求频率响应 figure(9) plot(W*Fs/(2*pi),abs(H)%绘制 Butterworth 低通滤波器频率响应 曲线 grid %添加图格 xlabel(频率 Hz) ylabel(频率响应幅度 ) title(Butterworth) f1=f

31、ilter(bz,az,z); %利用上面已做好的滤波器(已bz 和 az为特征的滤波器) 对 x2 信号进行 滤波,赋值给 f1 figure(10) subplot(2,1,1) %创建两行一列绘图区间的第1 绘图区 间 plot(t,z) %做加噪后的信号时域图形 title(滤波前的时域波形 ); subplot(2,1,2) %创建两行一列绘图区间的第2 绘图区 间 plot(t,f1); title(滤波后的时域波形 ); sound(f1,22050); %播放语音信号 p=length(f1); F0=fft(f1,p); f=0:fs/p:fs*(s-1)/p; figure(11) y2=fft(z,1024); %对信号 y2 做 1024点 FFT变换 subplot(2,1,1); %创建两行一列绘图区间的第1 绘图区 间 plot(f,abs(y4); title(滤波前的频谱 ) xlabel(Hz); %x轴的名字是“ Hz” ylabel(fuzhi); %y轴的名字是“ fuzhi ” subplot(2,1,2) F1=plot(f,abs(F0); title(滤波后的频谱 ) xlabel(Hz); ylabel(fuzhi);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1