MATLAB程序设计软件
实
验
报
告
专业及班级 ____通信 中兴131_______
姓 名 ____魏增_______________
学 号 _____6102213869________
日 期 _____2015.6.15_________
南昌大学实验报告
学生姓名: 魏增ofc 学 号: 6102213869 班级: 中兴131班
实验类型:□ 验证 □ 综合 ■ 设计 □ 创新 实验日期: 实验成绩:
实验一 MATLAB的基本使用
一、 实验目的
1.了解MATALB程序设计语言的基本特点,熟悉MATLAB软件的运行环境;
2.掌握变量、函数等有关概念,掌握M文件的创建、保存、打开的方法,初步具备将一般数学问题转化为对应计算机模型处理的能力;
3.掌握二维图形绘制的方法,并能用这些方法实现计算结果的可视化。
二、 MATLAB的基础知识
通过本课程的学习,应基本掌握以下的基础知识:
一. MATLAB简介
二. MATLAB的启动和退出
三. MATLAB使用界面简介
四. 帮助信息的获取
五. MATLAB的数值计算功能
六. 程序流程控制
七. M文件
八. 函数文件
九. MATLAB的可视化
三、上机练习
1. 仔细预习第二部分内容,关于MATLAB的基础知识。
2. 熟悉MATLAB环境,将第二部分所有的例子在计算机上练习一遍
3、已知矩阵。求A*B,A .* B,比较二者结果是否相同。并利用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规则:;且。现要求该数组中第一个大于10000的元素。
1) 在命令窗口中完成;
2) 利用M文件完成;
3) 自己定义一个函数文件,并在命令窗口中调用该函数完成。
解
>> a1=1;
巴斯大学>> a2=1;
阶梯英语学校>> b=0;
>> while b<10000
b=a1+a2;
a1=a2;
a2=b;
end
>> b
b =
10946
5.在同一个图形窗口的两个子窗口中分别画出(红色、虚线)和(蓝色、星号)的波形。要求有标题,x、y轴有标注。
解:>> 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表示方法(表达式及图形描述);
2、实验原理
在MATLAB中通常用两种方法来表示信号,一种是向量表示信号,另一种则是用符号运算的方法来表示信号。用适当的MATLAB语句表示出信号后,我们就可以利用MATLAB的绘图命令绘出直观的信号波形。
(一.) 连续时间信号的表示及可视化
1. 向量表示法:对于连续时间信号f(t),我们可以用两个行向量f和t来表示,其中t向量是形如t=t1:p:tjetion2的MATLAB命令定义的时间范围向量,t1为信号起始时间,t2为终止时间,p为时间间隔。向量f为连续信号f(t)在向量t所定义的时间点上的样值。
2. 符号运算表示法:如果信号可以用一个符号表达式来表示它,则我们可用ezplot命令绘
制出信号的波形。
3.常用连续信号的表示
1)单位阶跃信号
单位阶跃信号的定义为:
一种得到单位阶跃信号的方法是在MATLAB的Symbolic Math Toolbox中调用单位阶跃函数Heaviside,这样可方便地表示出单位阶跃信号。但是,在用函数 ezplot实现其可视化时,就出现一个问题:函数ezplot只能画出既存在于Symbolic Math工具箱中,又存在于总MATLAB工具箱中的函数,而Heaviside函数仅存在Symbolic Math Toolbox中,因此,就需要在自己的工作目录work下创建Heaviside的M文件,该文件如下:
function f=Heaviside(t)
f=(t>0); %t>0时f为1,否则为0回赠
正确定义出该函数并保存运行后,就可调用该函数了。
(二.) 离散时间信号的表示及可视化
1.一般离散信号的表示:一般说来,离散时间信号用f(k)表示,其中变量k为整数,代表离散的采样时间点。在MATLAB中,用一个向量f即可表示一个有限长度的序列。但是,这样的向量并没有包含其对应的时间序号信息。所以,要完整地表示离散信号需要用两个向量。
2.典型离散序列的表示
1)单位序列δ(k)
单位序列的定义为
function dwxulie(k1,k2,k0)
k=k1:k2;
n=length(k)
f=zeros(1,n)
f(1,-k0-k1+1)=1 %在k0时刻,信号赋值为1
quoted printable
stem(k,f,'filled')
axis([k1,k2,0,1.5])
title('单位序列δ(k)')
2)单位阶跃序列
单位阶跃序列
与单位序列类似,下面给出绘制单位阶跃序列ε(k+k0)的MATLAB子程序:
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('单位阶跃序列')
三.上机练习
1.认真预习实验原理的内容,将所有例题在计算机上练习一遍。
2. 用MATLAB命令绘制单边指数信号e -1.5 tε(t)在时间0<t<3区间的波形。要求有标题,在(3.1,0.05)处标注’t’,利用axis调整坐标轴在一个合适的范围,便于观察波形。
头文件:function f=Heaviside(t)
f=(t>0);
调用:
>> y=sym('exp(-1.5*t)*Heaviside(t)');ezplot(y)
>> text(3.1,exp(-1.5*3.1)*Heaviside(3.1),'\leftarrowexp(-1.5*t)*Heaviside(t)=0.05')
>> axis([0 5 -1 1])
3. 绘制δ(t-2),-1<t<5的波形。
头文件:
function chongji(t1,t2,t0)
crucial
dt=0.01;
t=t1:dt:t2;
n=length(t);decisionmaking
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)在线广播是周期的。周期为fraud12
代码
>> 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)')