数字信号处理上机指导 - 1dl 联系客服

发布时间 : 星期三 文章数字信号处理上机指导 - 1dl更新完毕开始阅读a620bd4b852458fb770b56fc

plot(x,sin(x)); %画图 title('正弦线'); %給图形加标题 subplot(2,2,2); %在第二个窗口中作图 plot(x,sin(x),'r') ; %画一正弦波红色 xlabel('X'); %给x轴加说明 ylabel('SIN(X)'); %给y轴加说明 subplot(2,2,3); %在第三个窗口中作图 plot(x,sin(x),'--',x,cos(x),'-.m*');% 用破折线画一正弦波

%用紫色点划.星线画一余弦波

legend('SIN(X)','COS(X)'); %给图形加图例标注 subplot(2,2,4); %在第四个窗口中作图 plot(x,sin(x),'r+--'); %用红色破折线画一正弦波 text(4,0,'注记');

以上内容以文件名fun0.m存盘,在MATLAB命令窗口中执行

>> fun0↙

或将以上内容直接在MATLAB命令窗口中键入并↙,得到结果如下:

Fig.1

第4章 MATLAB程序设计

MATLAB作为一种高级计算语言,它不仅可以如前面所介绍的那样,以人机交互命令行的方式工作,还可以像BASIC、FORTRAN、C等其它高级计算机语言一样进行控制流的程序设计,即编制一种以 .m 为扩展名的文件,简称为M文件。而且, M文件的编写具有语法简单、可读性强、调试容易、调用方便等许多优点。 §4-1 M文件介绍

1. M文件的特点与形式

MATLAB实质上是一种解释性语言,就MATLAB本身说,它并不能做任何事情,它就像DOS操作系统一样,本身没有实现功能而只对用户发出的指令起解释执行的作用,即命令先送到MATLAB系统内解释,再运行得到结果。因此用户可以把所要实现的指令罗列编制成文件,再统一送入MATLAB系统中解释运行,这就是以.m 为扩展名的M文件。用户可以使用任何字处理软件对其进行编写或修改。正是M文件的这个特点造就了MATLAB强大的

- 8 -

可开发性和可扩展性,Mathworks公司推出的一系列工具箱就是证明。

由于商用的MATLAB软件用C语言编写而成,因此,M文件的语法与C语言的十分相似。对广大的C语言爱好者来说,M文件的编写是相当容易的。 M文件有两种形式,即命令式和函数式。并且要注意:

·文件扩展名一定为.m 。

·标点符号的运用要恰到好处,建立好的书写风格,保持程序的可读性。 ·以符号%引导的行为注释行,不可执行,可供help命令查询; ·不需要用end语句作为M文件的结束标志;

·在运行此文件之前,需要把它所在目录加到MATLAB的搜索路径上去,或将文件所在目录设为当前目录。 2.命令式文件

命令式文件就是命令行的简单叠加,MATLAB会自动按顺序执行文件中的命令,其运行相当于在命令窗口中逐行输入并运行命令,因此,用户在编制此类文件时,只需把所要执行的命令按行编辑到指定的文件中,且变量不需预先定义,也不存在文件名对应问题,也可以访问存在于整个工作空间内的数据。但要注意:

命令式文件在运行中所产生的所有变量均为全局变量。也就是说,这些变量一旦生成,就一直保存在内存中,直到用户执行clear或quit命令为止。 例 打开Medit窗口,编写如下程序 x=[1,3,4,7];

y=sum(x)/length(x);

以aver.m为文件名存盘。在命令窗口键入aver并回车即可运行该程序。 3.函数式文件

为了实现计算中的参数传递,需要用到函数式文件。函数式文件在MALTAB中应用十分广泛,MALTAB所提供的绝大多数功能函数都是由函数式文件实现的,这足以说明函数式文件的重要性。函数式文件的结构为:

function 输出参数= 函数名(输入参数) 函数体 % 注释

例 编制一个求几个数平均值的函数。

打开Medit窗口,编写如下程序

function y=lianxi(x)

n=length(x); % 确定向量x的维数 if n==1 y=x;

end if n>=2

y=sum(x)/n;

end

编写完毕后,以lianxi.m存盘。

函数式文件的标志是第一行必为function语句。函数式文件可以有返回值如上例中的y,也可以只执行操作而无返回值,大多数函数式文件有返回值。函数体是函数的主体部分,它包括进行运算和赋值的所有MALTAB程序代码。函数体中可以包括流程控制、输入、输出、计算、赋值、注释以及函数调用和命令文件调用等。在函数体中完成对输出参数的计算。函数式文件执行后,只保留最后结果,不保留任何中间过程,所定义的变量也仅在函数内部起作用,并随调用的结果而被清除。函数的调用过程实际上就是参数的传递过程。

- 9 -

例 调用函数lianxi.m计算20,50,90,100,40的平均值。在命令窗口键入如下命令并回车即可。

x = [20,50,90,100,40]; y = lianxi(x);

该调用过程把变量x传递给了输入参数,然后把函数运算的返回值传给了输出参数y。

在编写函数式文件时,要特别注意:

·只有文件名与函数名一一对应,才能保证调用成功。

·function后的语句定义函数名和输入、输出参数,在函数被调用过程中将按此输入、输出格式执行。

·要养成良好的注释习惯,以方便自己或其它用户的调用。 §4-2 程序控制语句

MALTAB的程序控制语句有循环语句、条件转移语句两种类型。 1.循环语句

MALTAB的循环语句包括for循环和while循环两种类型。 (1)for循环

语法格式:

for 循环变量 = 初始值 :步长 :终止值

循环体

end

初始值和终止值为一整型数,步长可以为整数或小数,省略步长时,默认步长为1。执行for循环时,判定循环变量的值是否大于(步长为负时则判定是否小于)终止值,不大于(步长为负时则不小于)则执行循环体,执行完毕后,再加上步长,这时循环变量的值若大于(步长为负时则小于)终止值后退出循环,否则继续。for循环最大的特点是,在一般情况下,此循环语句的循环次数是预先设定好的。 例 给矩阵a赋值。

function a=chuzhi k=5;

a=zeros(k,k); for m=1:k

for n=1:k

a(m,n)=1/(m+n-1); end end

以chuzhi.m存盘。然后在MALTAB命令窗口中执行以下命令 >> a=chuzhi 得到结果为:

a =

1.0000 0.5000 0.3333 0.2500 0.2000 说明:

0.5000 0.3333 0.2500 0.2000 0.1667 0.3333 0.2500 0.2000 0.2500 0.2000 0.1667 0.2000 0.1667 0.1429 0.1667 0.1429 0.1250 0.1429 0.1250 0.1111

·for语句一定要有end作为结束标志,否则下面的输入都被认为是for循环之内的内容。 ·循环语句中的分号‘;’可防止中间结果的输出。 (2)while循环

语法格式:

while 表达式

循环体

- 10 -

end

其执行方式为:若表达式为真(运算值非0),则执行循环体;若表达式为假(运算结果为0),则退出循环体,执行end后的语句。while循环的特点是循环次数无法预先确定,因此在使用中要谨慎,以防止陷入死循环。 例 >> a=3;b=0;

while a a=a-1; b=b+a; end >> b

b =

3

>> a

a =

0

同for循环比起来,while语句的判断控制可以是一个逻辑判断语句,因此它的适用范围会更广一些。

例 >> a=7;b=1; c=0

while (a>=1)&( b<=4) % a≥1与b≤4同时满足时执行循环体。

a=a-1; b=b+2;

c=3*a+2*b +c; end >> [a,b,c] ans =

5 5 49 2.条件转移语句

MATLAB中的条件转移语句主要由if语句实现,其用法与其它高级语言相类似,基本语法格式如下:

if 表达式

执行语句1 else

执行语句2 end

在执行时,首先计算紧跟在关键字if后的表达式,若结果为真,则执行语句;若结果为假,则执行语句2。且else子句中可以嵌套if语句而形成elseif结构,从而实现多路选择。 x?0,x?20??例 欲实现一分段函数的计算。f(x)??x 0?x?1 。

?1?x?2?2?x function f=pdbsline(x)

if x<0

f=0;

elseif x<1

f=x;

elseif x<2

f=2-x;

else

f=0;

end

以pdbsline.m存盘。然后在MALTAB命令窗口中执行以下命令

>> pdbsline (1.36)

得到结果为:

ans =

0. 6400

- 11 -