MATLAB实验报告

更新时间:2023-11-26 04:12:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

MATLAB程序设计语言

实 验 报 告

专业及班级 姓 名 学 号 日 期 2013 电子信息工程

王伟

1107050322

年6月20日

实验一 MATLAB的基本使用

【一】 实验目的

1.了解MATALB程序设计语言的基本特点,熟悉MATLAB软件的运行环境; 2.掌握变量、函数等有关概念,掌握M文件的创建、保存、打开的方法,初步具备将一般数学问题转化为对应计算机模型处理的能力;

3.掌握二维图形绘制的方法,并能用这些方法实现计算结果的可视化。

【二】 MATLAB的基础知识

通过本课程的学习,应基本掌握以下的基础知识: 一. MATLAB简介 二. MATLAB的启动和退出 三. MATLAB使用界面简介 四. 帮助信息的获取

五. MATLAB的数值计算功能

六. 程序流程控制 七. M文件

八. 函数文件

九. MATLAB的可视化 【三】上机练习

1. 仔细预习第二部分内容,关于MATLAB的基础知识。

2. 熟悉MATLAB环境,将第二部分所有的例子在计算机上练习一遍

3.

?123??987?????已知矩阵A?456,B?654。求A*B,A .* B,比较二者???????789???321??结果是否相同。并利用MATLAB的内部函数求矩阵A的大小、元素和、长度以

及最大值。

程序代码:

>> A=[1 2 3;4 5 6;7 8 9]; >> B=[9 8 7;6 5 4;3 2 1]; >> A*B ans =

30 24 18 84 69 54 138 114 90 >> A.*B ans =

9 16 21 24 25 24

21 16 9 同

>> [m,n]=size(A) m =

3 n =

3 >> b=sum(A) b =

12 15 18 >> a=length(A) a = 3 >>max(A) ans =

两者结果不

7 8 9 运行结果:

4. Fibonacci数组的元素满足Fibonacci规则:ak?2且a11) 在命令窗口中完成; 2) 利用M文件完成;

3) 自己定义一个函数文件,并在命令窗口中调用该函数完成。

?ak?ak?1,(k?1,2,?);

?a2?1。现要求该数组中第一个大于10000的元素。

程序代码:

解:(1)>> a1=1;

>> a2=1; >> b=0;

>> while b<10000 b=a1+a2; a1=a2; a2=b; end >> b b =

10946

(2)function Fibonacci (x,y,z)

a1=x; a2=y; b=0;

while b

将此函数定义为M文件。 >> Fibonacci (1,1,1000)

>> b =

10946

5. 在同一个图形窗口的两个子窗口中分别画出cos(?4x)(红色、虚线)和

cos(x)(蓝色、星号)的波形。要求有标题,x、y轴有标注。

?8程序代码:>> x=-10:0.1:10;

y1=cos((pi/4)*x);

subplot(2,2,1),plot(x,y1,'r:') xlabel('x1')

ylabel('y1=cos((pi/4)*x)') title('余弦函数') >> x=-10:0.1:10; y2=cos((pi/8)*x);

subplot(2,2,2),plot(x,y1,'b-.p') xlabel('x2')

ylabel('y2=cos((pi/8)*x)') title('余弦函数')

【四】思考题

1. 在语句末加分号“;”和不加分号有什么区别?

2. M文件和函数文件有什么异同之处?

3. 矩阵乘(*)和数组乘(.*)有何不同?

实验二 信号的表示及可视化

【一】实验目的

1. 掌握连续信号的MATLAB表示方法(表达式及图形描述); 2. 掌握离散序列的MATLAB表示方法(表达式及图形描述);

【二】实验原理

在MATLAB中通常用两种方法来表示信号,一种是向量表示信号,另一种则是用符号运算的方法来表示信号。用适当的MATLAB语句表示出信号后,我们就可以利用MATLAB的绘图命令绘出直观的信号波形。 一. 连续时间信号的表示及可视化

从严格意义上来讲,MATLAB并不能处理连续信号,在MATLAB中,是用连续信号

在等时间间隔点的样值来近似地表示连续信号的,当取样时间间隔足够小时,这些离散的样值就能较好的近似出连续信号。

1. 向量表示法

对于连续时间信号f(t),我们可以用两个行向量f和t来表示,其中t向量是形如t=t1:p:t2

的MATLAB命令定义的时间范围向量,t1为信号起始时间,t2为终止时间,p为时间间隔。向量f为连续信号f(t)在向量t所定义的时间点上的样值。

2. 符号运算表示法

如果信号可以用一个符号表达式来表示它,则我们可用ezplot命令绘制出信号的波形。 3.常用连续信号的表示 1)单位阶跃信号

单位阶跃信号的定义为:?(t)?1t?0

???0t?0单位阶跃信号是信号分析的基本信号之一,在信号与系统分析中有着十分重要的作用,常用于简化信号的时域表示。根据单位阶跃信号的特性,我们可以用它来表示时限信号和单边信号(因果信号)。

2)单位冲激信号

????(t)dt?1单位冲激信号的定义为???

??(t)?0,t?0δ(t)的定义表明,该信号除原点以外,处处为零,且信号面积为一。即设有矩形脉冲

pn(t) pn(t),则由δ(t)的定义可得?(t)?limn?0二. 离散时间信号的表示及可视化

1.一般离散信号的表示

一般说来,离散时间信号用f(k)表示,其中变量k为整数,代表离散的采样时间点。 在MATLAB中,用一个向量f即可表示一个有限长度的序列。但是,这样的向量并没有包含其对应的时间序号信息。所以,要完整地表示离散信号需要用两个向量。

2.典型离散序列的表示

下面通过一些典型的离散信号来说明如何用MATLAB实现离散序列的表示和可视化。

1)单位序列δ(k) 单位序列的定义为?(k)?1k?0

???0k?0

由单位序列定义知,只有在k=0时,δ(k)的值为1,而其它时刻为0,因此,用MATLAB来表示单位序列及绘制其波形非常简单。

2)单位阶跃序列 单位阶跃序列?(k)??3)正弦序列

正弦序列的表达式为:

?1k?0

?0k?0f(k)?Acos(k???)

式中k为无量纲的整数,?和?以弧度为单位,?称为正弦序列的数字角频率,?为初相位。

需要注意的是:并非所有的正弦序列都是周期的。这是因为离散时间信号的自变量和周期序列的周期都必须是整数,在正弦序列中并非对任意?都能找到正整数的周期N.现在我们就来讨论正弦序列为周期序列的条件。

【三】上机练习

1.认真预习实验原理的内容,将所有例题在计算机上练习一遍。 2. 用MATLAB命令绘制单边指数信号e

-1.5 t

ε(t)在时间0

题,在(3.1,0.05)处标注’t’,利用axis调整坐标轴在一个合适的范围,便于观察波形。

程序代码:

>> t=0:0.01:3;

>> y=exp(-1.5*t)*; >> plot(t,y)

>> text(3.1,0.05,'t') >> title('函数')

>>axis([-0.1 3.5 0 1.1])

运行结果:

3. 绘制δ(t-2),-1

程序代码:

function chongji(t1,t2,t0) dt=0.01; t=t1:dt:t2; n=length(t); x=zeros(1,n);

x(1,(-t0-t1)/dt+1)=1/dt; stairs(t,x);

axis([t1,t2,0,1.2/dt]) title('单位冲激信号')

调用:

chongji(-1,5,-2) 运行结果:

4. 绘制ε(k-3),-1≤k≤5及ε(k+1),-5≤k≤2。

程序代码:

function jyxulie(k1,k2,k0) k=k1:-k0-1; kk=-k0:k2; n=length(k); nn=length(kk);

u=zeros(1,n); %k0前信号赋值为零 uu=ones(1,nn); %k0后信号赋值为一 stem(kk,uu,'filled') hold on

stem(k,u,'filled') hold off

axis([k1,k2,0,1.5]) title('单位阶跃序列') 调用

jyxulie(-1,5,-3) 运行结果:

jyxulie(-5,2,1)

5. 考虑下面3个信号:

f1(n)=cos(2πn/N)+2cos(3πn/N) f2(n)=2cos(2n/N)+2cos(3n/N) f3(n)=cos(2πn/N)+3cos(5πn/N)

假设对每个信号N=6。试确定上述信号是否是周期的。如果是,则确定信号的周期,并画图表示出该信号的两个周期;如果不是周期的,在[0,4N]的范围内画出该信号,并说明原因。

答:f1(n)=cos(2πn/N)+2cos(3πn/N)是周期的。周期为12 代码 程序代码: >> n=0:24; >> subplot(2,2,1)

>> stem(n,cos(n*2*pi/6)+2*cos(n*3*pi/6),'filled')

运行结果:

f2(n)=2cos(2n/N)+2cos(3n/N) 非周期序列

f3(n)=cos(2πn/N)+3cos(5πn/N)周期序列 周期为60 代码 >> n=0:24; >> subplot(2,1,1)

>> stem(n,2*cos(n*2/6)+2*cos(n*3/6),'filled') >> title('2*cos(n*2/6)+2*cos(n*3/6)') >> n=0:120; >> subplot(2,1,2)

>> stem(n,cos(n*2*pi/6)+3*cos(pi*n*5/6),'filled') >> title('cos(n*2*pi/6)+3*cos(pi*n*5/6)')

【四】 思考题

1. 观察例2-1的执行结果,当把时间间隔p取得更小(例如为0.02)时,观察执行结果,比较两结果用何不同,为什么?

2.例2-3中的hold on和hole off命令的作用是什么?

实验三

信号的时域运算、时域变换及MATLAB实现

【一】实验目的

1. 掌握信号时域运算的MATLAB实现方法 2. 掌握信号时域变换的MATLAB实现方法

【二】实验原理

信号的时域运算包括信号的相加、相乘,信号的时域变换包括信号的平移、反折、倒相及信号的尺度变换。下面就分别介绍连续时间信号和离散时间信号的各种时域运算、变换及MATLAB是实现。

一. 连续信号的时域运算与时域变换

如前所述,MATLAB可以有两种方法来表示连续信号。用这两种方法均可实现连续信号的时域运算和变换,但用符号运算的方法则较为简便。

1. 相加

s=symadd(f1,f2)或s=f1+f2 ezplot(s) 2. 相乘

w=symmul(f1,f2)或w=f1*f2 ezplot(w) 3. 移位 y=subs(f,t,t-t0); ezplot(y) 4.反折 y=subs(f,t,-t); ezplot(y) 5. 尺度变换 y=subs(f,t,a*t); ezplot(y)

二. 离散序列的时域运算及时域变化

对于离散序列来说,序列相加、相乘是将两序列对应时间序号的值逐项相加或相乘,平移、反折及倒相变化与连续信号的定义完全相同,这里就不再赘述。但需要注意,与连续信号不同的是,在MATLAB中,离散序列的时域运算和变换不能用符号运算来实现,而必须用向量表示的方法,即在MATLAB中离散序列的相加、相乘需表示成两个向量的相加、相乘,因而参加运算的两序列向量必须具有相同的维数。 1. 离散序列相加及其结果可视化的实现

在该函数中,将要进行相加运算的二序列向量通过补零的方式成为同维数的二序列向量,因而在调用该函数时,要进行相加运算的二序列向量维数可以不同。

2. 离散序列相乘及其结果可视化的实现

与离散序列的相加类似,离散序列的相乘用以下函数实现: function[f,k]=lsxc(f1,f2,k1,k2)

k=min(min(k1),min(k2)):max(max(k1),max(k2));

s1=zeros(1,length(k));s2=s1;

s1(find((k>=min(k1))&(k<=max(k1))==1))=f1; s2(find((k>=min(k2))&(k<=max(k2))==1))=f2; f=s1.*s2;

stem(k,f,’filled’)

axis([(min(min(k1),min(k2))-1),(max(max(k1),max(k2))+1),(min(f)-0.5),(max(f)+0.5)]) 3. 离散序列的反折

向量的反折,即是将表示离散序列的两向量以零时刻的取值为基准点,以纵轴为对称轴反折,向量的反折可用MATLAB中的fliplr函数来实现.

4. 离散序列的平移

离散序列的平移可看作时间离散序列的时间序号向量平移,而表示对应时间序号点的序列样值不变,当序列向左移动k0个单位时,所有时间序号向量都减少k0个单位,反之则增加k0个单位。

【三】 上机练习

1. 将实验原理中提到的例子在计算机上全部练习一遍;

?1?4(t?1)?4?t?0?2. 已知信号

f(t)??10?t?2,画出f(t)及f(?2t?4)的波形;

?0其它??程序代码:

运行结果:

3. 已知两个连续信号

f1(t)??t,0?t?1,f2(t)?sin(2?t),用

MATLAB

绘出下列信号的波形: 1)

f3(t)?f1(?t)?f1(t) 2)f4(t)??[f1(?t)?f1(t)]

3)

f5(t)?f2(t)?f3(t) 4)f6(t)?f1(t)?f2(t)

程序代码:

运行结果:

4. 已知离散序列

f(k)?{?,0,1,2,3,3,3,3,0,?},用MATLAB绘出下

?列序列的波形。 1)3)

f(k?2)?(k) 2)f(?k)

f(?k?2) 4)f(k?2)?(k?2)

程序代码:

解:(1)

(2)

(3)

(4)

运行结果: (1)

本文来源:https://www.bwwdw.com/article/hsnt.html

Top