MATLAB课程设计报告

时间:2024.3.4

 

MATLAB课程设计报告书

20##年 5月 31日

 

基于MATLAB的语音信号采集与处理

一、实践的目的和要求

1. MATLAB软件功能简介

MATLAB的名称源自Matrix Laboratory,1984年由美国Mathworks公司推向市场。它是一种科学计算软件,专门以矩阵的形式处理数据。MATLAB将高性能的数值计算和可视化集成在一起,并提供了大量的内置函数,从而被广泛的应用于科学计算、控制系统和信息处理等领域的分析、仿真和设计工作。

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

MATLAB在信号与系统中的应用主要包括符号运算和数值计算仿真分析。由于信号与系统课程的许多内容都是基于公式演算,而MATLAB借助符号数学工具箱提供的符号运算功能,能基本满足信号与系统课程的需求。例如解微分方程、傅里叶正反变换、拉普拉斯正反变换和z正反变换等。MATLAB在信号与系统中的另一主要应用是数值计算与仿真分析,主要包括函数波形绘制、函数运算、冲击响应与阶跃响应仿真分析、信号的时域分析、信号的频谱分析、系统的S域分析和零极点图绘制等内容。数值计算仿真分析可以帮助学生更深入地理解理论知识,并为将来使用MATLAB进行信号处理领域的各种分析和实际应用打下基础。

2. 本题目的意义

本次课程设计的课题为《基于MATLAB的语音信号采集与处理》,学会运用MATLAB的信号处理功能,采集语音信号,并对语音信号进行滤波及变换处理,观察其时域和频域特性,加深对信号处理理论的理解,并为今后熟练使用MATLAB进行系统的分析仿真和设计奠定基础。

 此次实习课程主要是为了进一步熟悉对matlab软件的使用,以及学会利用matlab对声音信号这种实际问题进行处理,将理论应用于实际,加深对它的理解。

二、实践原理:

1.理论原理

利用MATLAB对语音信号进行分析和处理,采集语音信号后,利用MATLAB软件平台进行频谱分析;并对所采集的语音信号加入干扰噪声,对加入噪声的信号进行频谱分析,设计合适的滤波器滤除噪声,恢复原信号。语音信号的“ 短时谱”对于非平稳信号, 它是非周期的, 频谱随时间连续变化, 因此由傅里叶变换得到的频谱无法获知其在各个时刻的频谱特性。如果利用加窗的方法从语音流中取出其中一个短断, 再进行傅里叶变换, 就可以得到该语音的短时谱。

2. 具体流程

(1). 语音信号的采集及分析

基于声卡进行数字信号的采集。将话筒插入计算机的语音输入插口上,启动录音机。按下录音按钮,对话筒说话,说完后停止录音。要保存文件时,利用了计算机上的A/D转换器,把模拟的声音信号变成了离散的量化了的数字信号,放音时,它又通过D/A转换器,把保存的数字数据恢复为原来的模拟的声音信号。在 Matlab软件平台下可以利用函数wavread对语音信号进行采样,得到了声音数据变量x1,同时把x1的采样频率fs=22050Hz和数据位Nbits=16Bit放进了MATALB的工作空间。图figure 1为原始语音信号的时域图形。从图中可以看出在时域环境下,信号呈现出6不规则的信号峰值。通过freqz函数绘制原始语音信号的频率响应图figure 2 。然后对语音信号进行频谱分析,在Matlab中可以利用函数fft对信号行快速傅里叶变换,得到信号的频谱图figure 3,从图中可以看出对各个频点上的随机信号在频域进行抽样 ,抽样频率为 22050Hz。

(2). 给原始信号加上一个高频噪声

在Matlab中人为设计一个固定频率5500Hz的噪声干扰信号。噪声信号通常为随机序列,在本设计中用正弦序列代替,干扰信号构建命令函数为d=[Au*sin(2*pi*5500*t)]',给出的干扰信号为一个正弦信号,针对上面的语音信号 ,采集了其中一段。再对噪音信号进行频谱变换得到其频谱图,从图中可以看出干扰信号,在4000Hz和 6000Hz频点处有一高峰 ,其中 5500Hz 正是本设计所要利用的。

(3). 设计一个滤波器,滤除高频噪声

由模拟滤波器变换为数字滤波器时,采用的是双线性变换法, 它保留的是从模拟到数字域的系统函数表示。在滤波器的选取时, 由于设计方法的侧重点不同, 作出比较是困难的。如果FIR滤波器情况下,最优的设计将是椭圆滤波器。用双线性变换法设计低通滤波器。的本设计是用双线性变换法设计BW带阻型滤波器。在 MATLAB中 ,可以利用函数 butterworth,设计FIR滤波器,利用 MATLAB 中的函数freqz 画出各滤波器的频率响应。用设计好的带阻滤波器对含噪语音信号进行滤波,在Matlab中 FIR滤波器利用函数fftfilt对信号进行滤波,FIR滤波器利用函数filter对信号进行滤波。在一个窗口同时画出滤波前后的波形及频谱。从图中可以看出 ,5500Hz看到的高峰消失了 ,语音信号与开始的一样 ,滤波器成功的滤除了干扰信号。利用MATLAB对语音信号进行分析和处理,采集语音信号后,利用MATLAB软件平台进行频谱分析;并对所采集的语音信号加入干扰噪声,对加入噪声的信号进行频谱分析,设计合适的滤波器滤除噪声,恢复原信号。

三、实践步骤

1.用MATLAB对原始语音信号进行分析,画出它的时域波形和频谱

程序:

fs=22050;                   %语音信号采样频率为22050

x1=wavread('C:\Documents and Settings\Administrator\桌面\声音文件.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('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:512)));      %abs是绝对值,plot是直角坐标下线性刻度曲线

title('原始语音信号频谱')

xlabel('Hz');

ylabel('幅值');

时域波形和频谱:

                               图1   原始语音信号

                     图2    语音信号频率响应图

                      图3   原始语音信号FFT与信号频谱

2. 给原始的语音信号加上一个高频余弦噪声,频率为5500hz。对加噪后的语音进行分析,并画出其信号时域和频谱图。

程序:

fs=22050;

x1=wavread('C:\Documents and Settings\Administrator\桌面\声音文件.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);               %播放语音信号

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(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”

时域波形和频谱:

                    图4  加噪后的信号时域图

图5  原始信号与加噪后信号频谱对比

与原始信号对比,区别:

先原始信号没加噪音之前0到2000有幅值,在4000到6000之间没有幅值,但是在加了噪音之后4000到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,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*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,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');

时域波形和频谱:

           图6  低通滤波器频率响应曲线

图7  滤波前后时域波形图

                 图8  滤波前后频谱图

与原噪音信号对比,区别:

通过对比分析可知,滤波后的输出波形和原始语音加噪声信号的图形发生了一些变化,在3000-6000Hz之间的信号消失,出现0-1000和7000-8000之间的信号。滤波后的输出波形明显在对应时间幅度比原语音加噪声信号的要小,而且滤波的效果也与滤波器的选择有关,可以看出滤波器的性能差异以及参数的调节会对滤波器产生一定的影响,并且通过回放可以发现滤波前后的声音有变化.低通滤波后,已很接近原来的声音,人耳几乎辨别不出 。从频谱图中我们还可以看出声音的能量信号主要集中在低频部分,说明高频语音信号被滤出,滤波器达到既定要求。

四、心得体会

正所谓“纸上得来终觉浅,觉知此事要躬行。”学习任何知识,仅从理论上去求知,而不去实践、探索是不够的。因此在学期末来临之际,我们迎来了MATLAB课程设计。

   通过为期一周半的MATLAB课程设计,我对MATLAB这个仿真软件有了更进一步的认识和了解。在这一周半时间里,我通过自己摸索,查阅资料,并且在指导老师田老师的指导下完成了:语音信号的采集及分析;给原始信号加上一个高频噪声;设计一个滤波器,滤除高频噪声;并最终将课程设计报告总结完毕。

在整个设计过程中我懂得了许多东西,也培养了独立思考和设计的能力,树立了对知识应用的信心,相信会对今后的学习工作和生活有非常大的帮助,并且提高了自己的动手实践操作能力, 使自己充分体会到了在设计过程中的成功喜悦。虽然这个设计做的不怎么好,但是在设计过程中所学到的东西是这次课程设计的最大收获和财富,使我终身受益。

在没有做课程设计以前,觉得课程设计只是对知识的单纯总结,但是通过这次课程设计发现自己的看法有点太片面,课程设计不仅是对前面所学知识的一种检验,也是对自己能力的一种提高,通过这次课程设计使自己明白了原来的那点知识是非常欠缺的,要学习的东西还很多,通过这次课程设计,明白学习是一个长期积累的过程,在以后的工作和生活中都应该不断的学习,努力提高自己的知识和综合素质。希望以后像这样的课程设计在多一点。

参考文献:

1. 姚东.MATLAB及在电子信息课程中的应用[M].第二版.北京:北京电子工业出版社,2000

2. 张智星.MATLAB程序设计与应用.北京:清华大学出版社,2002

3. 陈怀琛.MATLAB及其在理工课程中的应用指南.西安:西安电子科技大学出版社,1999.10 

4. 肖伟、刘忠. MATLAB程序设计与应用[M].北京:清华大学出版社 2005

更多相关推荐:
课程设计报告

1课程设计目的课程设计是船舶设计原理课程重要的实践性教学环节是培养学生掌握船舶设计基本原理和能力的技术基础主尺度论证与总布置设计是船舶总体设计的重要组成部分通过课程设计的训练力求使学生实现从学生到船舶设计师的角...

课程设计报告内容

一设计目的1强化上机动手能力在理论和实践的基础上进一步巩固数据结构课程学习的内容掌握工程化软件设计的基本方法2掌握图的创建和应用3掌握迪杰斯特拉以及Prim等基本算法思想4掌握if语句及switch语句的运用方...

课程设计报告

中国计量学院信息工程学院课程设计报告课程设计名称系统设计与仿真课程计二级学院信息工程学院专业班级10电信2班学姓成绩号名1000301232廖壁波指导老师20xx年12月13日中国计量学院信息工程学院课程设计报...

课程设计报告模板

信息科学与工程学院高级语言程序设计课程设计报告学生成绩管理系统学科专业计算机科学与技术班级1301学号指导教师唐郑熠讲师学生二零年月目录目录1设计任务12需求分析121基础功能122扩展功能13系统概要设计13...

课程设计报告

扬州大学数据结构课程设计报告课题名称姓名学院系科班级指导老师日期自来水管架设问题广陵学院陈宏建1一课程设计的题目自来水管理架设问题问题描述若要在扬州大学的八个居民区A区B区C区D区E区F区G区H区之间架设自来水...

课程设计报告

系统软件课程设计时钟中断与进程调度学号姓名指导教师11070319许明秀金雪云20xx年12月一报告摘要进程调度是操作系统十分重要的一个部分在操作系统的设计过程中进程调度和时钟中断形成了密不可分的关系系统时钟定...

课程设计报告

计算机高级语言课程设计报告班级学号姓名蔡路日期学生成绩管理系统19xx3120xx100031020xx年1月18日一课程设计题目与要求实习题目学生成绩管理系统实习内容C语言面向对象的分析与设计基本要求学生成绩...

JAVA_课程设计报告

JAVA程序设计课程设计报告设计题目学院名称专业班级姓名学号1目录一需求分析3二概要设计3三详细设计331数据库设计332模块及窗体设计3321数据库模块设计3322用户登录识别模块5323用户信息管理模块61...

软件课程设计报告

中南民族大学软件课程设计报告电子信息工程09级题目学生吴雪学号指导教师王锦程电子工程0907100220xx年4月25日简易网络聊天系统摘要计算机网络通信技术已经深入我们的生活并给我们即使通信带来了很大的方随着...

软件课程设计报告

任务书北京信息科技大学计算机软件基础课程设计题目从某个源点到其余各顶点的最短路径学院专业学生姓名班级学号指导老师起止时间任务书1摘要摘要本次课程设计的问题假设西安北京沈阳武汉4个城市构成小型交通网4个城市表示图...

计算机网络课程设计报告

计算机网络课程设计报告一.课程设计的题目、目的及要求.........................................................2二.课程设计的内容(分析和设计).....…

Java课程设计报告模板

Java程序设计课程设计报告20xx20xx年度第1学期Hannio塔专业学生姓名班级学号指导教师完成日期计算机科学技术网络工程马千里B计算机1021010704213徐森20xx年1月8日Hannoi塔目录目...

课程设计报告(33篇)