《MATLAB与控制系统仿真》
实验报告
20##-20##学年 第 1 学期
实验三 MATLAB图形系统
一、实验目的:
1.掌握绘制二维图形的常用函数。
2.掌握绘制三维图形的常用函数。
3.熟悉利用图形对象进行绘图操作的方法。
4.掌握绘制图形的辅助操作。
二、实验原理:
1,二维数据曲线图
(1) 绘制单根二维曲线 plot(x,y);
(2) 绘制多根二维曲线 plot(x,y) 当x是向量,y是有一维与x同维的矩阵时,则绘制多根不同颜色的曲线。当x,y是同维矩阵时,则以x,y对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。
(3) 含有多个输入参数的plot函数 plot(x1,y1,x2,y2,…,xn,yn)
(4) 具有两个纵坐标标度的图形 plotyy(x1,y1,x2,y2)
2,图形标注与坐标控制
1)title (图形名称);
2)xlabel(x轴说明)
3)ylabel(y轴说明)
4)text(x,y图形说明)
5)legend(图例1,图例2,…)
6)axis ([xmin xmax ymin ymax zmin zmax])
3, 图形窗口的分割
subplot(m,n,p)
4,三维曲线
plot3(x1,y1,z1,选项1,x2,y2,选项2,…,xn,yn,zn,选项n)
5,三维曲面
mesh(x,y,z,c) 与surf(x,y,z,c)。一般情况下,x,y,z是维数相同的矩阵。X,y是网格坐标矩阵,z是网格点上的高度矩阵,c用于指定在不同高度下的颜色范围。
6,图像处理
1) imread和imwrite函数 这两个函数分别用于将图象文件读入matlab工作空间,以及将图象数据和色图数据一起写入一定格式的图象文件。
2) image和imagesc函数 这两个函数用于图象显示。为了保证图象的显示效果,一般还应使用colormap函数设置图象色图。
三、实验仪器和设备:
计算机一台(带有MATLAB6.5以上的软件环境)。
四、预习要求:
1.复习二维与三维图形的绘图函数。
2.复习图形辅助操作。
五、实验内容及步骤:
1,设,在x=0~2π区间取101点,绘制函数曲线。
2,已知y1=x2,y2=cos(2x),y3=y1*y2,完成下列操作:
(1)在同一坐标系下用不同的颜色和线型绘制三条曲线;
(2)分别用条形图、阶梯图、杆图和填充图绘制三条曲线。
3,已知
在-5<=x<=5区间绘制函数曲线。
4,绘制函数的曲面图和等高线
其中x的21个值均匀分布在[-5,5]范围,y的31个值均匀分布在[0,10],要求使用subplot(2,1,1)和subplot(2,1,2)将产生的曲面图和登高图画在同一个窗口上。
5.画出函数
的曲面及等高线图。
6. 根据绘制平面曲线,并分析参数对其形状的影响。
四、心得体会:
通过这次实验我能熟练掌握二维和三维图以及其他特殊图形的制作,弄清楚了基本的图形操作规则,大大加深了我对matlab的兴趣。
实验二 MATLAB程序设计
一、实验目的
1.掌握利用if语句实现选择结构的方法。
2.掌握利用switch语句实现多分支选择结构的方法。
3.掌握利用for语句实现循环结构的方法。
4.掌握利用while语句实现循环结构的方法。
二、实验设备及条件
计算机一台(带有MATLAB6.5以上的软件环境)。
三、实验内容
1.编写求解方程的根的函数(这个方程不一定为一元二次方程,因的不同取值而定),这里应根据的不同取值分别处理,有输入参数提示,当时应提示“为恒不等式!”。并输入几组典型值加以检验。
clear,clc
a=input('请输入一个数a=');
b=input('请输入一个数b=');
c=input('请输入一个数c=');
m=b^2-4*a*c;
if a==0
if b==0
'为恒不等式'
end
end
m=b^2-4*a*c;
if m>0
x1=(-b+sqrt(m))/(2*a)
x2=(-b-sqrt(m))/(2*a)
elseif m==0
x=(-b)/(2*a)
else
'不存在正实根'
end
2.输入一个百分制成绩,要求输出成绩等级A+、A、B、C、D、E。其中100分为A+,90分~99分为A,80分~89分为B,70分~79分为C,60分~69分为D,60分以下为E。
要求:(1)用switch语句实现。
(2)输入百分制成绩后要判断该成绩的合理性,对不合理的成绩应输出出错信息。
clear,clc
for k=1:10
a(k)={89+k};b(k)={79+k};
c(k)={69+k};d(k)={59+k};
end
A=cell(3,6);
A(1,:)={'a','b','c','d','e','f'};
A(2,:)={85,76,95,100,40,65};
for k=1:6
switch A{2,k}
case 100
r='A+';
case a
r='A';
case b
r='B';
case c
r='C';
case d
r='D';
otherwise
r='E';
end
A(3,k)={r};
end
A
A = 'a' 'b' 'c' 'd' 'e' 'f'
[85] [76] [95] [100] [40] [65]
'B' 'C' 'A' 'A+' 'E' 'D'
3. 利用for循环语句编写计算n!的函数程序,取n分别为-89、0、3、5、10验证其正确性(输入n为负数时输出出错信息)。
clear,clc
n=input('请输入一个正数n=');
if n<0
'输入错误'
elseif n==0
'n!=0'
elseif n==1
'n!=1'
else
y=1;
for i=1:1:n
y=y*i;
i=i+1;
end
y
end
请输入一个正数n=-89 ans =输入错误
请输入一个正数n=0 ans =n!=0
请输入一个正数n=1 ans =n!=1
请输入一个正数n=3 y =6
请输入一个正数n=10 y =3628800
四、实验心得体会:
通过本次实验课,我能熟练运用for循环语句,switch条件语句以及if条件语句的新用法,和在C中的区别。尽管如此,但是在实验中依然容易把for循环跟C语言中的for语句弄混,最后经过不懈努力下,终于弄明白了两者之间的差别,使我能更好的运用这些指令语句。
第二篇:信号分析与处理MATLAB仿真实验报告
信号分析与处理
MATLAB仿真实验报告
2009.12.25
院系:电气工程学院
专业: 自动化
班级:
姓名:
学号:
实验7 离散时间序列的卷积
实验目的:学会用MATLAB实现对离散时间序列的卷积,掌握利用h(n) 与输入x(n)卷积来求系统零状态响应的方法。
实验要求:使用MATLAB中求卷积函数的conv(),并对结果分析总结。
实验内容:LTI系统的单位脉冲响应为h(n)=(0.9)nε(n),输入序列为x(n)=ε(n)- ε(n-10),求系统的输出y(n)。
程序
function [y,ny]=conv_m(x,nx,h,nh);
y=conv(x(5:45),h);
ny=nh;
y=y(1:41);
subplot(3,1,1);stem(nx,x,'filled');axis([-4,40,0,1]);title('x[n]');
subplot(3,1,2);stem(nh,h,'filled');axis([-4,40,0,1]);title('h[n]');
subplot(3,1,3);stem(ny,y,'filled');axis([-4,40,0,8]);title('y[n]');
实验结果:
结果分析:
改变参数以后的程序:
function [y,ny]=conv_m(x,nx,h,nh);
y=conv(x(5:45),h);
ny=nh;
y=y(1:41);
subplot(3,1,1);stem(nx,x,'filled');axis([-4,40,0,1]);title('x[n]');
subplot(3,1,2);stem(nh,h,'filled');axis([-4,40,0,1]);title('h[n]');
subplot(3,1,3);stem(ny,y,'filled');axis([-4,40,0,2]);title('y[n]');
输出结果:
实验8 连续时间信号的卷积
实验目的:学会用MATLAB实现对连续时间信号的卷积,掌握利用卷积的方法求系统零状态响应,并与离散系统比较。
实验要求:使用MATLAB中求卷积函数的conv(),并对结果分析总结。
实验内容:已知某连续系统的单位冲激响应h(t)=e-5t*ε(t),输入信号x(t)= ε(t)- ε(t-1),求解系统的零状态响应y(t)
程序
p=0.01;
t=0:p:2;
x=heaviside(t)-heaviside(t-1);
x(1)=1;x(101)=1;
h=exp(-5*t);
hl=h*p;
y=conv(x,hl);
y=y(1:length(t));
subplot(3,1,1);plot(t,x);axis([-1,2,0,1.2]);title('x(t)');
subplot(3,1,2);plot(t,h);axis([0,2,0,1.2]);title('h(t)');
subplot(3,1,3);plot(t,y);axis([0,2,0,0.22]);title('y(t)');
实验结果
结果分析
改变参数后程序
p=0.01;
t=0:p:2;
x=heaviside(t)-heaviside(t-1);
x(1)=1;x(101)=1;
h=exp(-5*t);
hl=h*p;
y=conv(x,hl);
y=y(1:length(t));
subplot(3,1,1);plot(t,x);axis([-1,2,0,1.0]);title('x(t)');
subplot(3,1,2);plot(t,h);axis([0,2,0,1.0]);title('h(t)');
subplot(3,1,3);plot(t,y);axis([0,2,0,0.5]);title('y(t)');
输出图形
实验18 周期信号的频谱分析
实验目的:学会用MATLAB绘制周期信号的频谱
实验要求:使用MATLAB中的符号积分函数int()
实验内容:对于周期矩形脉冲信号,若A=1,T=5s,г=T/4=1.25s,试求其傅里叶系数Xk,并绘制出频谱图。
程序
syms t k;
T=5;tao=1.25;A=1;
x0=int(A,t,-tao/2,tao/2)/T
x=A*exp(-j*k*2*pi/T*t);
xk=int(x,t,-tao/2,tao/2)/T;
xk=simple(xk)
t=[-2*T:0.01:2*T];
x1=rectpuls(t,tao);
subplot(1,2,1);plot(t,x1)
hold on
x1=rectpuls(t-5,tao);
plot(t,x1)
hold on
x1=rectpuls(t+5,tao);
plot(t,x1)
hold off
title('周期矩形脉冲(tao=T/4)')
xlabel('t')
axis([-8,8,0,1.2])
k=[-20:-1,eps,1:20];
xk=subs(xk,k,'k');
subplot(1,2,2);stem(k,xk,'filled')
line([-20,20],[0,0])
title('周期矩形脉冲的频谱')
xlabel('k')
ylabel('Xk')
实验结果
结果分析
减小脉冲的宽度,令tao=T/4=2.5
则输出图形为
实验21 非周期信号的傅里叶变换
实验目的:学会用MATLAB求解非周期信号的傅里叶变换
实验要求:使用MATLAB中直接求傅里叶变换域逆变换的函数fourier()与ifourier()
实验内容:已知矩形脉冲信号x(t)= ε(t+1)- ε(t-1),将其乘以载波信号cos(10∏t),得到已调信号y(t)=x(t)cos(10∏t),试用MATLAB画出信号x(t),y(t)的波形及其频谱,并观察频谱搬移情况。
程序:
R=0.005;
t=-1.2:R:1.2;
x=Heaviside(t+1)-Heaviside(t-1);
x(41)=1;x(441)=1;
y=x.*cos(10*pi*t);
subplot(2,2,1);plot(t,x)
axis([-2,2,0,1.2])
xlabel('t');ylabel('x(t)');
subplot(2,2,3);plot(t,y)
xlabel('t');ylabel('y(t)=x(t)*cos(10*pi*t)');
W1=40;
N=1000;
k=-N:N;
W=k*W1/N;
X=x*exp(-j*t'*W)*R;
X=real(X);
Y=y*exp(-j*t'*W)*R;
Y=real(Y);
subplot(2,2,2);plot(W,X)
xlabel('w');ylabel('X(w)');
subplot(2,2,4);plot(W,Y)
xlabel('w');ylabel('Y(w)');
输出结果
结果分析
修改采样点数后的输出结果W1=25
实验22 离散时间信号的频谱分析
实验目的:学会用MATLAB求解离散时间福利叶变换
实验要求:已知序列x(n)=(-0.9)n,-5≤n≤5,求其离散时间傅里叶变换X(ejΩ)
程序
n=-5:5;
x=(-0.9).^n;
k=-200:200;
w=(pi/100)*k;
X=x*(exp(-j*pi/100)).^(n'*k);
magX=abs(X);
angX=angle(X);
subplot(2,1,1);plot(w/pi,magX);
axis([-2,2,0,15])
xlabel('\Omega/(\pi)');ylabel('幅度')
subplot(2,1,2);plot(w/pi,angX)/pi;
axis([-2,2,-4,4])
xlabel('\Omega/(\pi)');ylabel('相位/(\pi)')
实验结果
结果分析
改变参数后的程序
n=-5:5;
x=(-0.9).^n;
k=-200:200;
w=(pi/100)*k;
X=x*(exp(-j*pi/100)).^(n'*k);
magX=abs(X);
angX=angle(X);
subplot(2,1,1);plot(w/pi,magX);
axis([-2,1,0,5])
xlabel('\Omega/(\pi)');ylabel('幅度')
subplot(2,1,2);plot(w/pi,angX)/pi;
axis([-2,1,-4,4])
xlabel('\Omega/(\pi)');ylabel('相位/(\pi)')
输出结果