基于Matlab 的数字信号处理实验报告.docx
- 文档编号:23408447
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:25
- 大小:991.39KB
基于Matlab 的数字信号处理实验报告.docx
《基于Matlab 的数字信号处理实验报告.docx》由会员分享,可在线阅读,更多相关《基于Matlab 的数字信号处理实验报告.docx(25页珍藏版)》请在冰豆网上搜索。
基于Matlab的数字信号处理实验报告
第1章MATLAB基本知识
MATLAB是一种面向科学和工程计算的高级语言,包含的几十个工具箱,覆盖了通信、
自动控制、信号处理、图像处理、生命科学等科技领域,现已成为国际公认的最优秀的科技
界应用软件。
该软件的特点是:
强大的计算功能、计算结果和编程可视化及极高的转换效率。
本章目的是帮助新用户在领略MATLAB非凡能力的同时能轻松跨越MATLAB的门槛。
§1.1MATLAB语言的基本使用环境
一.MATLAB的安装MATLAB5.3版本仅有一张光盘,运行其上的安装文件setup.exe,则可以按提示安装整
个MATLAB系统。
MATLAB6.1版本有两张光盘,将其中的程序盘插入驱动器,运行其上
的安装文件setup.exe,则可以按提示安装整个MATLAB系统。
MATLAB6.x与以前的版本相比,在界面上的变化是很大的,以前的版本只给出一个又
一个命令窗口,MATLAB6.1的程序界面,除了其右侧的CommandWindow(命令窗口)之外,
还有LaunchPad(程序调用板)和CommandHistory(命令的历史记录)两个子窗口,以及
Workspace(工作空间管理程序)和CurrentDirectory(当前目录管理程序)等,使MATLAB的
操作更容易、方便了。
二.MATLAB5.3的操作步骤
由于实验室安装的是MATLAB5.3,下面我们介绍MATLAB5.3的操作步骤。
双击桌面
的MATLAB5.3的图标,如图1-1,将进入MATLAB5.3的CommandWindow(命令窗口),
如图1-2。
1.帮助[Help]选项
HelpWindows打开分类帮助窗
HelpTips打开函数文件命令帮助窗
HelpDesk打开以超文本形式存储的帮助文件主页
ExamplesandDemos打开演示窗主页
AboutMATLAB注册图标、版本、制造商和用户信息
选择[Help]中不同的类别,用户可以从相关的帮助信息得到帮助。
2.用户目录的设置
(1).必须建立用户自己的工作目录
MATLAB完成各种复杂运算、仿真的能力是在严格的目录结构及其驻留文件保证下获得的。
因此应该建立自己的工作目录,用于存放用户自己创建的各种文件和数据。
(2).在路径浏览器中加入用户自己的路径
①可以在命令窗中选中[File:
SetPath]菜单项,在[Path]窗中选中[Addtopath],点击Browse,
在出现的目录中选定所需的目录,便完成设置,退出此菜单前保存。
②也可以在命令窗口选择PathBroser图标,在弹出的PathBroser窗口中选择Path,在
AddtoPath下选中需要加入的目录,如图1-3,完成设置,退出此菜单前保存。
3.建立M脚本文件
所谓M脚本文件,指文件的扩展名是.m的文件。
对于比较简单的问题和一次性的问题,通过CommandWindow(命令窗)直接输入一组指令
去求解,也许比较简单快捷。
但要解决问题所需的指令增多或所用指令结构复杂时,直接在
命令窗输入指令的方法就显得繁琐。
设计M脚本文件来解决此矛盾。
(1).在命令窗[File]下拉菜单中选择New选项中的M--File子项,如图1-4,就会出现M文
件编辑器,如图1-5所示。
(2).把指令全部写在M文件编辑器中,选择[Saveas]存入到用户的目录下,例如选择文件名
为myfile1。
(3).运行M脚本文件。
在CommandWindow(命令窗)中键入myfile1,就能运行该文件,
结果显示在命令窗。
4.建立M函数文件
函数文件的目的是扩展MATLAB功能,即利用MATLAB语言构造了一个新的MATLAB
函数,而且该函数的使用同MATLAB本身提供的库函数是一样的。
例如,函数文件mean.m,用来计算一组向量的平均值。
functiony=mean(x)
%meanaverageormeanvalue
m=length(x);
y=sum(x)/m;
例如在M文件输入:
z=1:
99;
m=mean(z)
运行程序结果为:
m=50
关于函数文件的几点说明:
(1)文件的第一行说明了该函数的名称、输入参数、输出参数。
这一行的有无是区别脚本文
件与函数文件的一个重要标志。
(2)函数的文件名与函数名是相同的。
§1.2数值数组的创建
一.一维数组的创建和寻访
1.一维数组的创建
(1).逐个元素输入法
这是最简单,但又最通用的构造方法。
例:
x=[2pi/2sqrt(3)3+5*j]
x=
2.00001.57081.73213.0000+5.0000i
(2).冒号生成法
这是通过“步长”设定,生成一维“行”数组的方法。
该方法通用格式为:
x=a:
inc:
b
说明:
a是数组的第一个元素;inc是采样点之间的间隔,即步长;若(b-a)是inc的整数倍,则生
成数组的最后一个元素等于b,否则小于b。
inc可以省略,省略时,默认其取值为1,即inc=1;inc可以取正数或负数,若inc取正时,
要保证ab。
2.一维数组的寻访
x=rand(1,5)%产生(1×5)(即:
1行5列)的均匀分布随即数组
x=ones(1,5)%产生(1×5)(即:
1行5列)的数值全部为1的数组
x=zeros(1,5)%产生(1×5)(即:
1行5列)的数值全部为0的数组
x(3)%寻访数组x的第三个元素
x(1:
3)%寻访数组x的前三个元素
x([125])%寻访数组x的第一、二、五个元素组成的子数组
x(find(x>0.5))%寻访由大于0.5的元素构成的子数组
二.二维数组的创建和寻访
1.直接输入法
(1)整个输入数组必须以[]为其首尾
(2)数组的行与行之间必须用分号“;”或回车键[Enter]隔离
(3)数组元素必须由逗号“,”或空格分隔
例:
c=[1,2,5;7,4,9]
c=125
749
2.二维数组的标识
“全下标”标识
A(3,5)表示二维数组A的“第3行第5列”的元素
§1.3数值数组的运算
数值数组及数组运算始终是Matlab的核心内容。
Matlab精心设计的数值数组及其运算目的
在于使计算程序简单、易读、程序指令更接近教科书上的数学计算公式。
§1.4控制流语句
1.for循环语句
其功能是重复执行一条或一组语句的固定次数。
(也可以是零次)
格式:
forexpression(表达式)
statement(描述)
end
循环可以嵌套。
例:
forI=1;5
forj=1:
4
a(i,j)=i+j-1;
end
end
2.while循环语句
其功能是重复执行一条或一组语句的次数,重复次数由某个逻辑条件控制,一般来说其执行
次数是不能预先确知的。
格式:
whileexpression(表达式)
statement(描述)
end
3.if和break语句
if条件语句的功能是:
如果满足某个条件则执行一条或一组语句,否则就不执行其内部语句,
或者执行else后面的语句。
if条件语句的一般格式有两种:
格式一:
ifcondition
statement
end
格式二:
ifcondition
statement1
else
statement2
end
Break语句一般出现在循环语句中,它表示跳出循环体,即结束循环。
§1.5绘图
用于绘图函数中常用的主要包括以下几种:
1.绘图
(1).Plot
plot函数用来绘制二维线性坐标曲线,它的调用格式:
plot(y):
若y为实数向量,将以y为纵坐标,y中对应元素的下标为横坐标来绘制曲线;若
y为复数,将以实部为横坐标、虚部为纵坐标来绘制曲线。
plot(x1,y1,„„):
该格式将绘制x1为横坐标、yn为纵坐标的曲线。
(2).stem
stem函数用来绘制二维离散序列的杆状图,它的调用格式:
stem(y):
以y中对应元素的下标为横坐标来绘制杆状图。
stem(x,y):
该格式将绘制x为横坐标、y为纵坐标的杆状图。
2.设置坐标轴属性
axis函数用于设置当前图形的坐标轴属性,它的调用格式:
axis([xminxmaxyminymax]):
分别设置x轴、y轴刻度的最小值和最大值。
3.分割图形窗口
subplot函数可以将图形窗口分割,以满足用户对图形显示的要求,它的调用格式:
subplot(m,n,p):
将当前的窗口中的坐标轴分割成m行、n列的子坐标轴,选定第p个窗口为当前显示窗口。
4.图形标注函数
(1)title函数用来给图形添加标题,其调用格式为:
title(‘string’):
在图形的正上方添加标题。
(2)xlable、ylable、zlable函数用法相同,都是给坐标轴进行标注的函数,它的调用格式:
xlable(‘string’):
在x轴上用指定的字符串标注。
ylable(‘string’):
在y轴上用指定的字符串标注。
zlable(‘string’):
在z轴上用指定的字符串标注。
(3)text:
在曲线某点处标注:
text(x,y,‘string’):
在点(x,y)处显示字符串。
text(x,y,z,‘string’):
在点(x,y,z)处显示字符串。
第二章基于MATLAB的数字信号处理实验
实验一离散系统时域分析与Z域分析
一.实验目的
(1)熟悉Matlab的主要操作命令;
(2)掌握典型离散信号的特性
(3)掌握离散系统的频率响应
三.实验中调用的函数
eig(x):
求解x矩阵的特征相量和特征值。
fliplr(x):
是将x矩阵的列倒序。
[h,w]=freqz(b,a):
系统函数的频率响应h,w表示0~π范围,其中b表示系统函数的
分子系数,按降幂顺序排列,a表示系统函数的分母系数,按降幂
顺序排列。
20*log10(abs(h)):
对系统函数的的频率响应h取绝对值得到幅频响应h(分贝)
angle(h):
是对系统函数的的频率响应h求取相频响应
四.实验内容
1.熟悉Matlab的主要操作命令
例1:
求矩阵的特征相量和特征值。
程序如下:
A=[010;103;521];%矩阵的写法,每行结束用;表示
[XD]=eig(A)%eig(A)是求解A矩阵的特征相量和特征值
运行结果:
X=
-0.3887+0.0965i-0.3887-0.0965i-0.1674
0.4191-0.6436i0.4191+0.6436i-0.6371
0.2142+0.4515i0.2142-0.4515i-0.7524
D=
-1.4029+1.3078i00
0-1.4029-1.3078i0
003.8058
例2:
编写函数,可对信号移位和反折。
编写一名为sigshift.m的函数文件
function[y,n]=sigshift(x,m,n0)
%Implementsy(n)=x(n-n0)
n=m+n0;y=x;
编写一名为sigshift.m的函数文件。
%Implementsy(n)=x(-n)
function[y,n]=sigfold(x,n)
y=fliplr(x);n=-fliplr(n);%fliplr(x)是将x矩阵的列倒序。
调用上述函数的主程序如下:
%h(n)=(0.9)^n*u(n)
n=0:
50;%n的取值范围是0到50,按1递增的。
h=((0.9).^n);
figure
(1)%创建一个新的图像窗口
subplot(2,2,1)%是将当前的图像窗口分割成2行2列,显示第1个图像
stem(n,h);%将h用杆图形式表示
axis([-70,70,0,1])%设定显示图形的x轴的范围是-70~70,y轴的范围是0~1
title('x(n)')%图像的题名是x(n)
gridon%在图像上显现网格
subplot(2,2,2)
[h2,n2]=sigshift(h,n,20);%调用前面编辑的sigshift函数(信号移位)
stem(n2,h2);
axis([-70,70,0,1])
title('sigshift:
x(n-20)')
gridon
subplot(2,2,3)
[h3,n3]=sigshift(h,n,-20);
stem(n3,h3);
axis([-70,70,0,1])
title('sigshift:
x(n+20)')
gridon
subplot(2,2,4)
[h1,n1]=sigfold(h,n);%调用前面编辑的sigfold函数(信号反折)
stem(n1,h1);
axis([-70,70,0,1])
title('sigfold:
x(-n)')
gridon
例3:
给定一因果系统
求出并绘制H(Z)的幅频响应与相
频响应。
程序如下:
%H(z)=(1-z^-1)/(1-sqrt
(2)*z^-1+0.9z^-2)
b=[1,-1];%系统函数H(Z)的分子系数,按降幂顺序
a=[1,-sqrt
(2),0.9];%系统函数H(Z)的分母系数,按降幂顺序
[h,w]=freqz(b,a);%系统函数的频率响应h,w表示0~π
am=20*log10(abs(h));%对系统函数的的频率响应h取绝对值得到幅频响应h(分贝)
subplot(2,1,1);
plot(w,am)%在0~π范围内连续画出系统函数幅频响应h的曲线
title('Amplitude')
ph=angle(h);%angle(h)是对系统函数的的频率响应h求取相频响应
subplot(2,1,2)
plot(w,ph)%在0~π范围内连续画出系统函数相位响应ph的曲线
title('Phase')
结果如下:
2.上机实验内容
(1)数组的加、减、乘、除和乘方运算。
输入A=[1234],B=[3456],求C=A+B,D=A-B,E=A.*B,F=A./B,G=A.^B,用stem语句画出A,B,C,D,E,F,G。
A=[1234];
B=[3456];
stem(A)
stem(B)
C=A+B;
stem(C)
D=A-B;
stem(D)
E=A.*B;
stem(E)
F=A./B;
stem(F)
G=A.^B;
stem(G)
A
B
C
D
E
F
G
(2)用Matlab实现下列序列:
n=0:
15;
x=(0.8.^n);
stem(n,x)
n=0:
15
x=(exp((0.2+3j)*n))
stem(n,x)
n=0:
15
x=(3*cos(0.125*pi*n+0.2*pi)+2*sin(0.25*pi*n+0.1*pi))
stem(n,x)
n=0:
63
x=(3*cos(0.125*pi*n+0.2*pi)+2*sin(0.25*pi*n+0.1*pi))
stem(n,x)
(3)绘出下列时间函数的图形,对x轴、y轴以及图形上方须加适当的标注。
f=1
fs=10
t=10
n=0:
(fs*t)
x=(sin(2*pi*f/fs*n));
plot(n,x);
xlable('time:
n');
ylable('x(t)');
五.实验思考题
1.在MATLAB命令窗里运行demo指令,运行其中样例程序,体会MATLAB强大功能。
编
辑MATLAB的库函数要点是什么?
本文是通过网络收集,如有侵权请告知,我会第一时间处理。
.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于Matlab 的数字信号处理实验报告 基于 Matlab 数字信号 处理 实验 报告