Matlab基础介绍 Matlab 简介 Matlab 的安装与启动 Matlab 编程基础 Matlab 在数字信号处理课程中的应用
一 Matlab 简介 Matlab名字是由Matrix和Laboratory两个词的前三个字母组合而成的,是由MathWorks公司于1982年推出的一套高性能的数值计算和可视化数学软件。 Matlab编程运算与人进行科学计算的思路和表达方式完全一致。不象学习其它高级语言如Basic、Fortran和C等那样难于掌握。 其基本元素是矩阵 。 具有强大的数值计算和图示能力。 具有丰富的工具箱(ToolBox)。 在高校中,Matlab以成为数学,信息,控制等诸多学科有关课程的有效教学工具。
Matlab 的安装
Matlab的启动
三 Matlab 编程基础 1 变量 2 数组,向量与矩阵的创建和访问 3 部分特殊变量和常数 4 部分常用运算符 5 Matlab的程序设计 6 m文件的创建,保存 7 基本数学函数和基本绘图函数 8 编程举例
3.1 变量 变量无需定义即可使用。 变量名的大小写是敏感的。 变量的第一个字符必须为英文字母,而且不超过31个字符。 变量名可以包含下连字符、数字,但不能为空格符、标点 。
3.2 数组,向量与矩阵的创建和访问 在Matlab中,这三个概念在创建和显示的时候没有任何区别。 向量的创建 要创建一个向量,在命令窗口下输入: t=0:1:10 屏幕显示: t = 0 1 2 3 4 5 6 7 8 9 10 注意: 向量的第一个元素的下标是1,而不是0。T=0:1:10产生了0~10步长为1的共11个数,保存在t(1),t(2),┉t(11)中。
矩阵的创建 例如:创建一个3×3的矩阵,输入 : a=[1 2 3;4 5 6;7 8 9] 屏幕输出 a = 1 2 3 4 5 6 7 8 9
访问矩阵的某一个元素: a(3,2) ans= 8 访问矩阵某行(列)的所有元素: a(3,:) a(:,2) 注意:这两个符号分别是1*3行向量和3*1列向量
3.3部分特殊变量和常数 ans 最近生成的无名结果 eps 浮点数的相对误差 pi 3.14145926 i 虚数单位 j 虚数单位 Inf 无穷大,如n/0
3.4部分常用运算符 3.4.1 算术运算符 + 加 - 减 * 乘(包括标量乘,矩阵乘,标量与矩阵乘) + 加 - 减 * 乘(包括标量乘,矩阵乘,标量与矩阵乘) / 除(包括标量除,矩阵除标量,数组除标量) ^ 矩阵求幂(矩阵必须为方阵) .* 数组相乘 ./ 数组相除 .^ 数组求幂 注意:.* ./ 表示两个同维数组中的对应元素做乘,除 .^ 表示对数组的每个元素求幂
< 小于 <= 小于等于 > 大于 >= 大于等于 == 等于 ~= 不等于 运算法则:若关系式成立,结果为1; 3.4.2 关系运算符 < 小于 <= 小于等于 > 大于 >= 大于等于 == 等于 ~= 不等于 运算法则:若关系式成立,结果为1; 若关系式不成立,结果为0。
3.4.3 逻辑运算符 & 与 | 或 ~ 非 运算法则: 若逻辑真,结果为1; 若逻辑假,结果为0。
n:s:m 产生n~m,步长为s的序列,s可以为 正或负或者小数,默认值为1。 3.4.4 其他常见符号 = 变量赋值 % 注释符 ‘ 共轭转置符 : 冒号运算符 n:s:m 产生n~m,步长为s的序列,s可以为 正或负或者小数,默认值为1。
3.5 Matlab 程序设计 Matlab的工作方式有二种 1. 交互式的指令操作方式。即用户在命令窗口中输入命令并按下回车键后,系统执行该指令并立即给出运算结果。 2. m文件的编程方式。m文件是由 matlab语句构成的文件,且文件名必须以.m为扩展名,如example.m。用户可以用任何文件编辑器来对M文件进行编辑。
程序流程控制 顺序结构:Matlab 从上到下依次执行各语句,该结构最简单。 循环结构 (1)for-end 循环 用于循环次数事先确定的,格式为 for i=n:s:m 语句体 end s 为步长,可以为正数,负数或小数。
(2)while-end 循环 用于循环次数不能事先确定的,格式为 while 表达式 语句 体 end 只有表达式为真,就执行语句体,表达式为假,终止该循环。
分支结构 (1) if 语句 格式为 if 表达式1 语句体1 elseif 表达式2 语句体2 ……….. else 语句体else end
3.6 m文件的创建,保存 创建 【File】菜单下【New】菜单选项的【M-File】命 令 打开matlab的m文件编辑器窗口。
单击M文件编辑器窗口工具栏中的【 Save】图标, 保存 单击M文件编辑器窗口工具栏中的【 Save】图标, 打开保存对话框
3.7基本数学函数和基本绘图函数 sin cos tan cot exp log :自然对数 log10: 产用对数 Log2:以二为底的对数 abs:取模 conj:取共轭 real:取实部 imag:取虚部
基本绘图指令 Matlab提供了强大的图形绘制功能。在大多数情况下,用户只需要指定绘图的方式,提供绘图数据,利用Matlab提供的丰富的二维,三维图形函数,就可以绘制出所需的图形。 1.绘制二维连续函数 Matlab中最常用的绘图函数是plot,plot的命令格式有以下几种:
(1) plot(y) 当y为一向量时,以y的序号作为x轴,按向量y的值绘制曲线。 (2) plot(x,y) x,y均为向量时,以x向量作为X轴,向量y作为Y轴绘制曲线。 注意:x和y种元素的个数必须相同!
2.绘制二维离散序列 在Matlab用stem命令实现离散序列的绘制。 stem命令的格式有以下几种: (1)stem(y) 以x=1,2,3……为各点数据的x坐标,以y向量的各个对应元素为y坐标,在(X,Y)坐标面画一个空心小圆圈。 (2)stem(x,y,’filled’) 以x向量的各个元素为x坐标,以y向量的各个对应元素为y坐标,在(X,Y)坐标面画一个实心小圆圈,并连接一条线段到X轴。
3.8编程举例 例一:画出衰减震荡曲线 及其包络线 t的取值范围是 程序如下: t=0:pi/50:4*pi; y0=exp(-t/3); y=exp(-t/3).*sin(3*t); plot(t,y,'-r',t,y0,':b',t,-y0,':b')
程序运行结果如下:
例二.用图形表示连续调制波形 及其包络。 程序如下: t=(0:pi/100:pi)' %长度为101的时间采样列向量y1=sin(t)*[1,-1]; %包络线函数值,是(101x2)的矩阵 y2=sin(t).*sin(9*t); %长度为101的调制波列向量 t3=pi*(0:9)/9 y3=sin(t3).*sin(9*t3); plot(t,y1,'r:',t,y2,'b',t3,y3,'bo') axis([0,pi,-1,1]) %控制轴的范围
四 Matlab 在数字信号处理课程中的应用举例 常见连续信号 离散信号 离散卷积 LTI系统
4.1 常见连续信号 周期信号:正弦信号,周期方波 A=2; f=4; phi=pi/6; w0=2*pi*f; t=0:0.01:1; ex1. 产生一个幅度为2,频率为4Hz,相位为 的正弦信号 A=2; f=4; phi=pi/6; w0=2*pi*f; t=0:0.01:1; x=A*sin(w0*t+phi); plot(t,x);
非周期信号:指数信号,阶跃信号,取样函数Sa(x)等 ex2. 产生一个高度为1,宽度为3,延时为2秒的矩形脉冲 信号 t=-2:0.02:6; plot(t,rectpuls(t-2,3)); axis([-2,6,0,1.5]);
ex3 取样函数:用sinc(x)命令 N=1000; t=-10:20/N:10; x=sinc(t/pi); plot(t,x);grid on
随机信号: rand产生均匀分布的白嘈声,randn产生高斯分布的白嘈声 t=0:0.01:1; y=randn(1,length(t)); plot(t,y);grid on;
4.2离散信号 周期序列 A=2; phi=pi/6; omega=2*pi/12; n=-10:10; ex4 产生一个幅度为2,频率为4Hz,相位为 的正弦信号 A=2; phi=pi/6; omega=2*pi/12; n=-10:10; x=A*sin(omega*n+phi); stem(n,x,'fill'); grid on;
单位脉冲序列 和单位阶跃序列u(n) 可以用ones(1,n)和zeros(1,n)来生成单位脉冲序列和单位阶跃序列 ones(1,n)命令产生1行n列的1值 zeros(1,n)命令产生1行n列的0值
ex5 产生单位脉冲序列 和单位阶跃序列u(n-3) x=[zeros(1,5),1,zeros(1,27)]; y=[zeros(1,5),ones(1,28)]; subplot(2,1,1); stem(n,x,'fill');grid on; subplot(2,1,2) stem(n,y,'fill');grid on;
4.3 离散卷积 matlab 中卷积运算的指令是c=conv(a,b),其中a和b是有限长的序列。 ex6:计算下面两个序列的卷积 两个序列的都从0开始的 a=[-2 0 1 -1 3]; b=[1 2 0 -1]; c=conv(a,b); M=length(c)-1; n=0:1:M; stem(n,c,'fill');grid on; xlabel('Time index n');
y=filter(num,den,x) 实现 4.4 LTI系统 因果LTI系统的的零状态响应,在matlab中可以用函数 其中: y-------输出的离散序列,y的长度与x的长度一样
因果LTI系统的的幅频响应和相频响应曲线,在matlab中可以用函数 freqz(num,den,n,Fs) 该函数可以同时作出幅频和相频响应图 其中: num-----系统传递函数分子系数组成的行向量 den------系统传递函数分母系数组成的行向量 n---------是频率响应的点数,最好为2的幂缺省值512 Fs--------采样频率
求系统单位冲激响应h[n],以及h[n]的幅频相频响应图 ex7 已知一个系统的传递函数为 求系统单位冲激响应h[n],以及h[n]的幅频相频响应图 N=64; x=[1 zeros(1,N-1)]; %产生单位冲激函数 num=[0.008 -0.033 0.05 -0.033 0.008]; den=[1 2.37 2.7 1.6 0.41]; y=filter(num,den,x); %计算单位冲激响应 figure(1); n=1:N; stem(n,y,'fill');grid on; title('单位冲激响应'); figure(2) Fs=1024; freqz(num,den,N,Fs);grid on; %做出幅频和相频响应曲线