1、第一章 MATLAB基本知识MATLAB是一种面向科学和工程计算的高级语言,包含的几十个工具箱,覆盖了通信、自动控制、信号处理、图像处理、生命科学等科技领域,现已成为国际公认的最优秀的科技界应用软件。该软件的特点是:强大的计算功能、计算结果和编程可视化及极高的转换效率。 本章目的是帮助新用户在领略MATLAB非凡能力的同时能轻松跨越MATLAB的门槛。 1.1 MATLAB 语言的基本使用环境 一MATLAB的安装MATLAB5.3 版本仅有一张光盘,运行其上的安装文件setup.exe,则可以按提示安装整个 MATLAB 系统。MATLAB6.1 版本有两张光盘,将其中的程序盘插入驱动器,运
2、行其上的安装文件setup.exe,则可以按提示安装整个 MATLAB 系统。 MATLAB6.x与以前的版本相比,在界面上的变化是很大的,以前的版本只给出一个又一个命令窗口, MATLAB6.1的程序界面,除了其右侧的 Command Window (命令窗口)之外,还有 Launch Pad (程序调用板) 和 Command History (命令的历史记录)两个子窗口,以及Workspace (工作空间管理程序) 和 Current Directory (当前目录管理程序)等,使 MATLAB 的操作更容易、方便了。 二MATLAB5.3的操作步骤 由于实验室安装的是 MATLAB5.
3、3,下面我们介绍 MATLAB5.3 的操作步骤。双击桌面的MATLAB5.3 的图标,如图 1-1,将进入MATLAB5.3的Command Window (命令窗口),如图1-2。 1帮助Help选项 Help Windows 打开分类帮助窗 Help Tips 打开函数文件命令帮助窗 Help Desk 打开以超文本形式存储的帮助文件主页 Examples and Demos 打开演示窗主页 About MATLAB 注册图标、版本、制造商和用户信息 选择Help中不同的类别,用户可以从相关的帮助信息得到帮助。 2用户目录的设置 (1). 必须建立用户自己的工作目录 MATLAB完成各种
4、复杂运算、仿真的能力是在严格的目录结构及其驻留文件保证下获得的。因此应该建立自己的工作目录,用于存放用户自己创建的各种文件和数据。 (2). 在路径浏览器中加入用户自己的路径 可以在命令窗中选中File: Set Path菜单项,在Path窗中选中 Add to path , 点击Browse, 在出现的目录中选定所需的目录,便完成设置,退出此菜单前保存。 也可以在命令窗口选择 Path Broser图标,在弹出的 Path Broser窗口中选择 Path,在Add to Path下选中需要加入的目录,如图 1-3,完成设置,退出此菜单前保存。3建立M脚本文件 所谓M脚本文件,指文件的扩展名
5、是. m的文件。 对于比较简单的问题和一次性的问题,通过Command Window(命令窗)直接输入一组指令去求解,也许比较简单快捷。但要解决问题所需的指令增多或所用指令结构复杂时,直接在命令窗输入指令的方法就显得繁琐。设计M脚本文件来解决此矛盾。 (1). 在命令窗File下拉菜单中选择 New 选项中的 M-File 子项,如图 1-4,就会出现 M 文件编辑器,如图1-5所示。 (2). 把指令全部写在 M 文件编辑器中,选择Save as存入到用户的目录下,例如选择文件名为myfile1。 (3). 运行M脚本文件。在Command Window (命令窗) 中键入myfile1,就
6、能运行该文件,结果显示在命令窗。 4建立M函数文件 函数文件的目的是扩展MATLAB功能,即利用MATLAB语言构造了一个新的MATLAB 函数,而且该函数的使用同 MATLAB 本身提供的库函数是一样的。 例如,函数文件mean.m, 用来计算一组向量的平均值。 function y=mean (x) % mean average or mean value m=length(x); y=sum(x)/m; 例如在M文件输入: z=1:99; m=mean(z) 运行程序结果为: m=50 关于函数文件的几点说明: (1) 文件的第一行说明了该函数的名称、输入参数、输出参数。这一行的有无是区
7、别脚本文件与函数文件的一个重要标志。 (2) 函数的文件名与函数名是相同的。 1.2 数值数组的创建 一一维数组的创建和寻访 1. 一维数组的创建 (1). 逐个元素输入法 这是最简单,但又最通用的构造方法。 例:x = 2 pi/2 sqrt(3) 3+5*j x= 2.0000 1.5708 1.7321 3.0000+5.0000i (2). 冒号生成法 这是通过“步长”设定,生成一维“行”数组的方法。该方法通用格式为: x = a : inc : b 说明: a 是数组的第一个元素;inc 是采样点之间的间隔,即步长;若 (b-a)是 inc 的整数倍,则生成数组的最后一个元素等于 b
8、,否则小于b。 inc可以省略,省略时,默认其取值为 1,即inc=1; inc 可以取正数或负数,若 inc取正时,要保证ab。 2. 一维数组的寻访x = rand (1,5) % 产生(15)(即:1行5列)的均匀分布随即数组 x = ones (1,5) % 产生(15)(即:1 行5 列)的数值全部为 1的数组 x = zeros (1,5) % 产生(15)(即:1行5列)的数值全部为 0的数组 x (3) % 寻访数组x的第三个元素 x (1:3) %寻访数组x的前三个元素 x ( 1 2 5 ) %寻访数组x的第一、二、五个元素组成的子数组 x (find (x0.5) ) %
9、 寻访由大于0.5的元素构成的子数组 二二维数组的创建和寻访 1. 直接输入法 (1) 整个输入数组必须以 为其首尾 (2) 数组的行与行之间必须用分号“;”或回车键Enter隔离 (3) 数组元素必须由逗号“,”或空格分隔 例:c = 1 , 2 , 5 ; 7 , 4 , 9 c = 1 2 5 7 4 9 2. 二维数组的标识 “全下标”标识 A(3,5)表示二维数组A 的“第3 行第5列”的元素1.3 数值数组的运算 数值数组及数组运算始终是 Matlab 的核心内容。Matlab 精心设计的数值数组及其运算目的在于使计算程序简单、易读、程序指令更接近教科书上的数学计算公式。 1.4
10、控制流语句 1. for 循环语句 其功能是重复执行一条或一组语句的固定次数。(也可以是零次) 格式: for expression(表达式) statement (描述) end 循环可以嵌套。 例: for I=1;5 for j = 1:4 a(i,j) = i+j-1; end end 2. while 循环语句 其功能是重复执行一条或一组语句的次数,重复次数由某个逻辑条件控制,一般来说其执行次数是不能预先确知的。 格式: while expression(表达式) statement (描述) end 3. if 和break语句 if条件语句的功能是:如果满足某个条件则执行一条或一
11、组语句,否则就不执行其内部语句,或者执行else后面的语句。 if条件语句的一般格式有两种: 格式一: if condition statement end 格式二: if condition statement 1 else statement 2 end Break语句一般出现在循环语句中,它表示跳出循环体,即结束循环。 1.5 绘图 用于绘图函数中常用的主要包括以下几种: 1绘图 (1). Plot plot函数用来绘制二维线性坐标曲线,它的调用格式: plot(y):若y为实数向量,将以 y为纵坐标,y中对应元素的下标为横坐标来绘制曲线;若y为复数,将以实部为横坐标、虚部为纵坐标来绘制
12、曲线。 plot(x1,y1,):该格式将绘制 x1为横坐标、yn 为纵坐标的曲线。 (2).stem stem函数用来绘制二维离散序列的杆状图,它的调用格式: stem (y):以 y中对应元素的下标为横坐标来绘制杆状图。 stem (x, y):该格式将绘制x为横坐标、y为纵坐标的杆状图。 2设置坐标轴属性 axis 函数用于设置当前图形的坐标轴属性,它的调用格式: axis(xmin xmax ymin ymax):分别设置x 轴、y轴刻度的最小值和最大值。 3分割图形窗口 subplot函数可以将图形窗口分割,以满足用户对图形显示的要求,它的调用格式: subplot(m,n,p):将
13、当前的窗口中的坐标轴分割成 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) :
14、在点(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
15、(abs(h): 对系统函数的的频率响应h取绝对值得到幅频响应h(分贝) angle(h): 是对系统函数的的频率响应h求取相频响应 四实验内容 1 熟悉Matlab的主要操作命令 例1:求矩阵的特征相量和特征值。 程序如下: A=0 1 0;1 0 3;5 2 1; % 矩阵的写法,每行结束用;表示 X D=eig(A) % eig(A)是求解 A矩阵的特征相量和特征值 运行结果: X = -0.3887 + 0.0965i -0.3887 - 0.0965i -0.1674 0.4191 - 0.6436i 0.4191 + 0.6436i -0.6371 0.2142 + 0.4515i
16、 0.2142 - 0.4515i -0.7524 D = -1.4029 + 1.3078i 0 0 0 -1.4029 - 1.3078i 0 0 0 3.8058 例2:编写函数,可对信号移位和反折。 编写一名为sigshift.m的函数文件 functiony,n=sigshift(x,m,n0) % Implements y(n)=x(n-n0) n=m+n0;y=x; 编写一名为sigshift.m的函数文件。 % Implements y(n)=x(-n) functiony,n=sigfold(x,n) y=fliplr(x);n=-fliplr(n); % fliplr(x)
17、是将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轴的范围是-7070,y轴的范围是01 title(x(n) % 图像的题名是x(n) grid on % 在图像上显现网格 subplot(2,2,2) h2,n2=sigshift(h,n,20)
18、; % 调用前面编辑的sigshift函数(信号移位) stem(n2,h2); axis(-70,70,0,1) title(sigshift:x(n-20) grid on subplot(2,2,3) h3,n3=sigshift(h,n,-20); stem(n3,h3); axis(-70,70,0,1) title(sigshift:x(n+20) grid on subplot(2,2,4) h1,n1=sigfold(h,n); % 调用前面编辑的sigfold函数(信号反折) stem(n1,h1); axis(-70,70,0,1) title(sigfold:x(-n)
19、grid on 例 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(Am
20、plitude) ph=angle(h); % angle(h)是对系统函数的的频率响应h求取相频响应 subplot(2,1,2) plot(w,ph) % 在0 范围内连续画出系统函数相位响应ph的曲线 title(Phase) 结果如下: 2上机实验内容 (1) 数组的加、减、乘、除和乘方运算。 输入A=1 2 3 4, B=3 4 5 6, 求 C=A+B, D=A-B, E= A.*B, F=A./B , G=A.B, 用 stem语句画出A,B,C,D,E,F,G。A=1 2 3 4;B=3 4 5 6;stem(A)stem(B)C=A+B;stem(C)D=A-B;stem(D
21、)E= A.*B; stem(E)F=A./B ;stem(F)G=A.B;stem(G)A BCDEFG(2) 用Matlab实现下列序列: n=0:15; x=(0.8.n);stem(n,x)n=0:15x=(exp(0.2+3j)*n)stem(n,x) n=0:15x=(3*cos(0.125*pi*n+0.2*pi)+2*sin(0.25*pi*n+0.1*pi)stem(n,x)n=0:63x=(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=1fs=10t=10n=0:(fs*t) x=(sin(2*pi*f/fs*n); plot(n,x); xlable(time:n);ylable(x(t);五.实验思考题 1. 在 MATLAB 命令窗里运行 demo 指令,运行其中样例程序,体会 MATLAB 强大功能。编辑 MATLAB 的库函数要点是什么? 本文是通过网络收集,如有侵权请告知,我会第一时间处理。 .