第3章-MATLAB编程与接口

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3.1.1 脚本(Scripts)
• 脚本是最简单的M-文件,它没有入口和出口参 数变量。可以自动执行一系列MATLAB 命令, 诸如重复命令等。 • 脚本(Scripts)是对工作空间(workspace)中 的现有数据操作,或创建一个新数据,而且脚 本所创建的任一变量在脚本运行完都保留在工 作空间中以便进一步使用。 • 脚本可以直接在命令窗口用文件名直接调用。
– 数据型态为双位元格式 (binary format) 的 MAT-file,可让电脑在读入/出(input/output) c–ascii
– 格式为 ASCII码。ASCII-file是以可辨识的字 元储存,但会降低电脑在读入/出的速率, 其格式为test.dat。
• 使用MATLAB提供的11条调试命令。
• 使用MATLAB Editor/Debugger调试函数,通过在M文 件命令行设置和清除断点来进入函数运行工作空间, 以检查可能的错误所在。
3.2 流程控制(Flow control)
流程控制在程序中是不可或缺的。四种基本的 控制流程功能: if,else,elseif: 根据逻辑条件执行一系列运算 switch,case,otherwise: 根据条件值来选择执行的项目 While 根据逻辑条件来决定循环的执行次数 for 执行固定次数的循环
MAT数据格式
• MAT数据格式是MATLAB的数据存储的标准 格式。一个MAT文件中可以存储一个或多个矩 阵的数据,矩阵顺序地存在一片连续的磁盘空 间上。在每个矩阵的开始处,有一个固定长度 的矩阵信息头。这个信息头完整地描述该矩阵 的全部特征信息,信息头之后是矩阵的数据部 分,数据占用的磁盘空间由字节长度信息给出。 整个这样的结构就构成MAT文件中的一个矩阵。
使用MATLAB Editor/Debugger 进行程序调试(演示)
function Xk= mydft(x,N) %mydft.m – DFT of a digital signal sequence % Xk=mydft (x,N); %x=input digital signal sequence % k=[0:1:N-1]; % k的行向量 WNk=exp(-j*2*pi/N).^k; Xk=0; for n=N-1:-1:0, Xk=x(n+1)+Xk.*WNk %此处设置了一个小错误! End
使用save命令的注意事项
• 当save生成MAT文档时,所储存的是变量本身, 而非直接储存变量的数据;而当save生成的文 档是ASCII文档时,则是直接储存变量的数值。 • 在储存及读取数据时,MAT-file或是ASCII-file 文档最好为矩阵型态,否则可能在读取时有困 难。数据储存成矩阵的大小可以为m×n,其中 m是列的数目,n则为行的数目。
储存及读取数据: save命令和load命令
• 「储存」和「读取」的指令分别是save及load, 对应于数据的输出与输入。 • save命令可以将MATLAB系统内部数据写为 MAT文件; • load命令可以将磁盘上的MAT文件正确地读入 到MATLAB系统中。
save命令的说明
• save命令把工作空间中的全部变量值存入磁盘。 如果不指定变量名,其默认的文件名为 matlab.mat。再次用save命令,就会将先前形成 的matlab.mat文件中的数据给冲掉了。
• save命令的存档格式有两种:双位元格式 和 ASCII码。如果数据只是在MATLAB中产生及 被使用,以使用MAT-file为宜。如数据文档要 被其它不是MATLAB的应用软件所读取时,必 须用ASCII-file。
例:把a,b,c三个变量保存在test.mat的 文件中
• save test a b c
• •
• •
1.循环语句(for语句和while语句)
• for语句格式如下: for 循环变量=起步值:步长:终止值 循环体语句 end (注:for语句可以嵌套执行) • while 语句格式如下: while 循环变量=起始值:步长:终止值 循环体语句 end
例3-4 for语句使用
function X=dtft(x,w) %dtft.m DTFT of a signal at a frequency vector w % X=dtft(x,w); %x=row vector of time samples %w=row vector of frequencies in rads/sample %X=row vector of DTFT values % 程序没有采用例3-2中所用 [L1,L] = size(x); 的向量点乘,来实现逐项相 z=exp(-j*w); 乘后的连加演算,而是从 X=0; DTFT的定义出发使用了for 语句实现了算法。 for n=L-1:-1:0, X=x(n+1)+z.*X; End
nk x(n)WN
式中 WN e j 2 / N 称为旋转因子,k=0,1,…,N-1。为 此在程序中设置一个 含n和k值的N×N维矩阵: nk n'k ,则DFT矩阵为WNnk=WN.^nk ,因此输 入序列和DFT矩阵的向量点乘就包含了此序列的N 点离散时间傅立叶变换定义式中的逐项相乘后的连 加演算。
例3-3 函数idft.m
function [xn] = idft(Xk,N) % idft求序列X(k)的N点IDFT % n=[0:1:N-1]; % n的行向量 k=[0:1:N-1]; % k的行向量 WN=exp(-j*2*pi/N); % 旋转因子 nk=n’*k; % 产生一个含nk值的N×N维矩阵 WNnk=WN.^(-nk); % IDFT矩阵 xn =(Xk *WNnk)/N; % IDFT系数的行向量
3.3.2 MATLAB的数据输入
• • • • • • 直接列表键入输入数据 创建一个数据M文件输入 装载一个已经存在的ASCII码数据文件(load 命令) 低层I/O函数 使用MEX文件输入数据 开发一个专门的数据转换程序
3.3.3 MATLAB的数据输出
• • • • • 使用diary命令生成diary文件输出数据 使用save命令用ASCII码输出数据 低层I/O函数 使用MEX文件输出数据 开发一个专门的数据转换程序
第3章 MATLAB编程与接口
• 本章主要内容如下: 3.1 脚本与函数(Scripts and Functions)
3.2 流程控制(Flow control)
3.3 数据接口 3.4 文件I/O操作
3.1 脚本与函数
M -文件分为两种:
• 脚本文件(scripts):也称命令文件,是由用户 为解决特定的问题而编制的; • 函数文件(functions):也可由用户编写,但它 必须由其他M-文件来调用
• 句法错误:这类错误是指程序语句发生句法上 的错误,例如函数名称拼写错了。MATLAB会 自动检查出大部分的句法错误,并且在命令窗 口中高亮显示错误信息,提示错误出现所在的 命令行序号。
• 运行错误:这类错误指由程序中的算法错误引 起的程序执行后的错误,例如使用了错误的变 量或操作符从而执行了不正确的计算。
有一个固定长度332matlab的数据输入?直接列表键入输入数据创建一个数据m文件输入装载一个已经存在的ascii码数据文件load装载一个已经存在的命令低层io函数使用mex文件输入数据开发一个专门的数据转换程序??码数据文件???333matlab的数据输出?使用diary命令生成diary文件输出数据?使用save命令用ascii码输出数据?低层io函数低层函数?使用mex文件输出数据?开发一个专门的数据转换程序储存及读取数据
程序调试措施(教材p40)
• 把某些分号改为逗号,将中间结果显示在屏幕上,作 为判断差错的依据。 • 在子程序中适当部位加keyboard命令。系统会在此处暂 停而等待用户键入命令,而这时子程序中的变量还存 在于工作空间中,可以对它们进行检查。 • 将函数文件的第一行前加%号,称它为程序文件,进 行初步调试。调试时,第一行中的输入变元,可改用 input或赋值语句来输入,调试好后再改回函数文件。
3.1.2 函数(Functions)
• 函数(Functions)是接受入口参数返回出口参 数的 M-文件,程序在自己的工作空间中操作 变量,与工作空间分开,无法访问。 • 函数文件编写与脚本文件编写不同。函数文件 编写时,必须由function起头,后跟的函数名必 须与文件名相同。函数文件具有输入输出变元 (变量),可进行变量传递。
3.1.3
M文件的调试
• MATLAB的脚本M文件程序是比较容易调试的, 因为MATLAB的差错调试能力很强,配上工作 空间中变量的保存和显示功能,不需要用专门 的调试命令,调试也可以很方便地进行。
• 需要使用调试命令的主要是函数程序。因为在 函数程序出错而停机时,其变量不被工作空间 保留。
M文件调试时遇到的错误
3.3 数据接口
MATLAB支持两种数据接口 (Importing and Exporting Data)功能, 使得用户可以十分方便地与其它的 应用程序交换数据和信息。
3.3.1 MATLAB的数据接口
• MATLAB与其他应用程序交换只接受两种数据 形式,为:
① ASCII码的文本数据文件; ② MATLAB 定 义 的 MAT 型 数 据 , 即 所 谓 的 MAT文件。 • 数 据 结 构 包 含 : 变 量 名 (NAME) 、 变 量 的 维 数 (Dimensions)、变量的类型(ClassName)、变量 的实数或复数类型、变量的存储属性(Storage)。
例3-2(续) 函数dft.m
function [Xk] = dft(xn,N) % dft求序列x(n)的N点DFT n=[0:1:N-1]; % n的行向量 k=[0:1:N-1]; % k的行向量 WN=exp(-j*2*pi/N); % 旋转因子 nk=n′*k; % 产生一个含nk值的N×N维矩阵 WNnk=WN.^nk; % DFT矩阵,旋转因子矩阵 Xk=xn*WNnk; % DFT系数的行向量,计算N点DFT
函数的基本结构
• 从上述例子可见,函数文件的第一条语句定义 了函数名、输入变元以及输出变元。没有这条 语句,该文件就成为脚本文件而不再是函数文 件。函数文件中,输入变元和输出变元都可以 有若干个,但必须在第一条语句中明确列出。 • 程序中的最前几条带%的字符行是对函数的注 解说明行,以作为对函数文件的说明。这种注 释方法同样适用前述的脚本M文件。 • 总之,函数的基本结构包含如下成份: 函数定义行;函数主体;函数说明;注解
2. 选择结构语句: if 语句
• if 语句的格式如下: if (逻辑表达式) 语句 1 elseif(逻辑表达式) 语句 2 …… else 语句n end
2. 选择结构语句:switch 语句
• 选择语句switch语句的格式如下: switch 表达式(表量或字符串) case 1 值1 语句1 case 2 值2 语句 2 …… otherwise 语句 n end
例3-2 一个简单的MATLAB函数
• 例3-2:编写一个对序列 x(n)作N点离散傅立叶变换 (DFT)的MATLAB函数。 • 分析:有限长序列x(n),长度为n=0,1,…N-1,对其作 N点离散傅立叶变换,即得:
X (k )

N 1
n 0
x(n)e
2jnk / N


N 1
n 0
脚本M文件格式特征
• 一般用clear、close all等语句开始,可清除掉工 作空间中原有的变量和图形,以避免其他已执 行的残留数据对本程序的影响。 • M文件是MATLAB程序的主体。如果文件中有 全局变量,即在子程序中与主程序共用的变量, 应在程序的起始部分注明。其语句是: global 变量名1 变量名2 ……
例3-1 一个最简单的脚本
• 例3-1: xa (t ) e t u(t ) ,现以采样率20Hz进行采 已知一模拟信号 x(n) e 0.05n u(n) , 用MATLAB对 样,得到一个数字序列: 上述操作编程并绘出 x(n)R N (n) 序列。其中RN(n)为矩形 窗,其中N=20。 把M-文件以 ex3_1.m : ex3_1.m 保存, 然后在命令窗 % An M-file script to produce 口键入ex3_1, % plot x(n)RN(n) 取N=20 执行文件,就 N = 20; n=0:N-1;L=200;n1=0:L-1 可看到序列图 形。 xn=exp(-0.05*n);xn1=[xn,zeros(1,L-N)]; stem(n1,xn1);title(‘x(n)RN(n),N=20’)
相关文档
最新文档