资源描述
(完整word版)武汉大学MATLAB报告
Matlab实训任务书
学生姓名: 好人 专业班级: …………班
指导教师: 好老师 工作单位: 信息工程学院
题 目: 离散时间信号和系统时域分析及MATLAB实现
课题要求:
深入研究离散时间信号和系统时域分析的理论知识。利用MATLAB强大的图形处理功能、符号运算功能以及数值计算功能,实现离散时间信号和系统时域分析的仿真波形。
课题内容:
一、用MATLAB绘制常用信号的时域波形(通过改变参数分析其时域特性)
1、单位序列,2、单位阶跃序列,3、正弦序列,4、离散时间实指数序列,5、离散时间虚指数序列,6、离散时间复指数序列。
二、用MATLAB实现信号的时域运算
1、相加,2、相乘,3、数乘。
三、用MATLAB实现信号的时域变换(参数变化,分析波形的变化)
1、反转,2、时移(超时,延时),3、展缩,4、倒相。
四、用MATLAB实现离散时间系统卷积和仿真波形
给出几个典型例子,对每个例子要求画出e(k),h(k),e(i),h(i),h(-i),Rzs(k)波形。
五、用MATLAB实现离散时间系统的单位响应,阶跃响应的仿真波形
给出几个典型例子,四中调用格式。
六、用MATLAB实现离散时间系统对实指数序列信号的零状态响应的仿真波形
给出几个典型例子,要求可以改变激励的参数,分析波形的变化。
指导教师签名: 2013年 1 月 24 日
系主任(或责任教师)签名: 2012年 1 月 24 日
目录
摘要 I
Abstract II
1 绪论 1
2 MATLAB简介 2
3 MATLAB实验内容 3
3.1用MATLAB绘制常用信号的时域波形 3
3.1.1单位序列 3
3.1.2单位阶跃序列标 4
3.1.3正弦序列 4
3.1.4 离散时间实指数序列 5
3.1.5离散时间虚指数序列 6
3.1.6离散时间复指数序列 7
3.2用MATLAB实现信号的时域运算 8
3.2.1 相加 8
3.2.2 相乘 8
3.2.3数乘 9
3.3用MATLAB实现信号的时域变换 11
3.4用MATLAB实现离散时间系统卷积和仿真波形 12
3.5 实现离散时间系统的单位响应,阶跃响应的仿真波形 13
3.6实现离散时间系统对实指数序列信号的零状态响应的仿真波形 16
4实验小结 17
5参考文献 18
摘要
随着计算机软硬件技术的飞速发展,集成电路被广泛应用,电路越来越复杂,集成电路越来越高,加之元器件层出不穷,使得越来越多的工作已经无法依靠手工来完成。以往在电气自动化专业学生进行毕业设计过程中,常常需要进行大量的数学运算。在当今计算机时代,通常的做法是借助高级语言Basic、Fortran或C语言等编制计算程序,输入计算机做近似计算。但是这需要熟练的掌握所运用的语法规则与编制程序的相关规定,而且编制程序不容易,费时费力。
目前,比较流行的控制系统仿真软件是MATLAB。1980年美国的Cleve Moler 博士研制的MATLAB环境(语言)对控制系统的理论及计算机辅助设计技术起到了巨大的推动作用。由于MATLAB的使用极其容易,不要求使用者具备高深的数学与程序语言的知识,不需要使用者深刻了解算法与编程技巧,且提供了丰富的矩阵处理功能,因此控制理论领域的研究人员很快注意到了这样的特点。尤其MATLAB应用在电厂自动化专业的毕业设计的计算机仿真上,更体现出它巨大的优越性和简易性。
本文介绍了MATLAB软件在自动控制理论学习中的应用,并结合具体实例,分析了利用MATLAB的图形化和交互功能,使抽象的理论变得生动形象,易于接受。
Abstract
With the rapid development of computer software and hardware technology, integrated circuit is widely used, circuit more and more complex, integrated circuit more and more high, together with components emerge in endlessly, more and more work has been unable to depend on hand to finish. In the past while the professional students of electric automation carry on the graduation project, often need to carry on a large amount of mathematical operation. In current computer era, the common method is to work out the calculation procedure through high-level language Basic, Fortran or C language,etc., input the computer and do approximate calculation.
But this rule of grammer of grasping and using skillfully and relevant regulations of the establishment procedure, and it is difficult, time-consuming and strenuous to work out the procedure. At present, more popular artificial software of control system is MATLAB. MATLAB environment which Dr. Cleve Moler of U.S.A. developed of 1980 (language) assist designing technique to play an enormous role to theory and computer of the control system. Because the use of MATLAB is extremely easy, do not require user's knowledge with advanced mathematics and procedure language, do not need users to understand the algorithm and programming skill deeply, and offer abundant matrix to handle the function, so the researchers of the control theory field have noticed such a characteristic quickly. Especially MATLAB applies to the computer emulation of the specialized graduation project of automation of power plant, embody its enormous superiority and simple and easy even more.
This text introduces application in automatically controlled theory study of MATLAB software, combine the concrete embodiment, analyze figure and mutual function to utilize MATLAB, make the abstract theory vivid, easy to accept.
18
1 绪论
MATLAB是主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB和Mathematica、Maple、MathCAD并称为四大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连
接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。
MATLAB由一系列工具组成。这些工具方便用户使用MATLAB的函数和文件,其中许多工具采用的是图形用户界面。包括MATLAB桌面和命令窗口、历史命令窗口、编辑器和调试器、路径搜索和用于用户浏览帮助、工作空间、文件的浏览器。随着MATLAB的商业化以及软件本身的不断升级,MATLAB的用户界面也越来越精致,更加接近Windows的标准界面,人机交互性更强,操作更简单。而且新版本的MATLAB提供了完整的联机查询、帮助系统,极大的方便了用户的使用。
2 Matlab 简介
matlab是由美国MathWorks公司推出的用于数值计算和图形处理计算系统环境,除了具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能.matlab的基本数据单位是矩阵,它的指令表达式与数学,工程中常用的形式十分相似,故用matlab来解算问题要比用C,FORTRAN等语言简捷得多.matlab是国际公认的优秀数学应用软件之一.
概括地讲,整个matlab系统由两部分组成,即matlab内核及辅助工具箱,两者的调用构成了matlab的强大功能.matlab语言以数组为基本数据单位,包括控制流语句,函数,数据结构,输入输出及面向对象等特点的高级语言,它具有以下主要特点:
1)运算符和库函数极其丰富,语言简洁,编程效率高,matlab除了提供和C语言一样的运算符号外,还提供广泛的矩阵和向量运算符.利用其运算符号和库函数可使其程序相当简短,两三行语句就可实现几十行甚至几百行C或FORTRAN的程序功能.
2)既具有结构化的控制语句(如for循环,while循环,break语句,if语句和switch语句),又有面向对象的编程特性.
3)图形功能强大 它既包括对二维和三维数据可视化,图像处理,动画制作等高层次的绘图命令,也包括可以修改图形及编制完整图形界面的,低层次的绘图命令.
4)功能强大的工具箱 工具箱可分为两类:功能性工具箱和学科性工具箱.功能性工具箱主要用来扩充其符号计算功能,图示建模仿真功能,文字处理功能以及与硬件实时交互的功能.而学科性工具箱是专业性比较强的,如优化工具箱,统计工具箱,控制工具箱,小波工具箱,图象处理工具箱,通信工具箱等。
3 MATLAB实验内容
3.1用MATLAB绘制常用信号的时域波形
3.1.1单位序列
题目%x1(n)=δ(n)
clear;
clc;
n=-3:3;
x=(n==0);
stem(n,x);
xlabel('Time index n');
ylabel('f(n)');
title('离散时间冲激信号');
图1单位序列信号
3.1.2 单位阶跃序列
题目%x1(n)=u(n) (-5≤n≤15)
%x2(n)=u(n-5) (-5≤n≤15)
clear all; close all; clc;
n=-5:15;
x1=[zeros(1,5) ones(1,16)];
x2=[(n-5)>=0];
subplot(121);
stem(n,x1);grid;
xlabel('n');ylabel('x1(n)');title('u(n)的线图');
axis([-1 16 -0.1 1.1]);
subplot(122);
stem(n,x2);grid;
xlabel('n');ylabel('x2(n)');title('u(n-5)的线图');
axis([-1 16 -0.1 1.1]);
set(gcf,'color','w');
图2单位阶跃信号
3.1.3正弦序列
题目2sin(0.2πn+2π/5)
clear all; close all; clc;
n=-16:16; x=2*sin(0.2*pi*n+2*pi/5);
n1=-24:0.1:24; x1=2*sin(0.2*pi*n1+2*pi/5);
stem(n,x,'.');hold on;plot(n1,x1,'--');
xlabel('n');ylabel('x(n)');title('2sin(0.2\pin+2\pi/5)的线图');
axis([-18 18 -2.1 2.1]);
set(gcf,'color','w');
图3正弦序列信号
3.1.4. 离散时间实指数序列
clear all;
close all;
clc;n=0:8;x=(0.9).^n;
stem(n,x);xlabel('n');
ylabel('x(n)');
title('x(n)=(0.9)^n的线图');
图4离散时间实指数信号
3.1.5 离散时间虚指数序列
题目离散时间x=f0+A*(w*n+q0)
f0=1;A=3;w=pi/4;q0=pi/4;
n=-4:4;
x=f0+A*exp(w*n+q0);
stem(n,x);
xlabel('Time index n');
ylabel('f(n)');
title('离散时间虚指数');
图5离散时间实指数
3.1.6离散时间复指数序列
题目对x=exp((0.05+j*pi/4)*n)实现复指数序列变化
clear all; close all; clc;
n=-20:20;
x=exp((0.05+j*pi/4)*n);
xr=real(x);
xi=imag(x);
xamp=abs(x);
xpha=angle(x);
subplot(221);
stem(n,xr,'.');axis([-23 23 -3 3]);
xlabel('n');ylabel('xr');title('e^(^0^.^0^5^+^j^\pi^/^4^)^n的实部');
subplot(222);
stem(n,xi,'.');axis([-23 23 -3 3]);
xlabel('n');ylabel('xi');title('e^(^0^.^0^5^+^j^\pi^/^4^)^n的虚部');
subplot(223);
stem(n,xamp,'.');axis([-23 23 -0.1 3]);
xlabel('n');ylabel('xamp');title('e^(^0^.^0^5^+^j^\pi^/^4^)^n的幅值');
subplot(224);
stem(n,xpha,'.');axis([-23 23 -4 4]);
xlabel('n');ylabel('xpha');title('e^(^0^.^0^5^+^j^\pi^/^4^)^n的相位');
set(gcf,'color','w');
图6离散时间复指数序列图
3.2用MATLAB实现信号的时域运算
3.2.1相加
3.2.2相乘
clear all; close all; clc;
n1=-2:2;x1=[-1 2 -3 1 4];
n2=0:3;x2=[2 -3 2 -3];
n=min(min(n1),min(n2)):max(max(n1),max(n2));
x11=zeros(1,length(n));x22=zeros(1,length(n));
x11(find((n>=min(n1))&(n<=max(n1))))=x1;
x22(find((n>=min(n2))&(n<=max(n2))))=x2;
xa=x11+x22;xm=x11.*x22;
subplot(221);
stem(n,x11);axis([-3 4 -4 5]);
xlabel('n');ylabel('x11(n)');title('x1(n)的扩展序列');
subplot(222);
stem(n,xa);axis([-3 4 -4 7]);
xlabel('n');ylabel('x1(n)+x2(n)');title('x1(n)和x2(n)的和');
subplot(223);
stem(n,x22);axis([-3 4 -4 3]);
xlabel('n');ylabel('x22(n)');title('x2(n)的扩展序列');
subplot(224);
stem(n,xm);axis([-3 4 -7 9]);
xlabel('n');ylabel('x1(n)*x2(n)');title('x1(n)和x2(n)的乘积');
set(gcf,'color','w');
图7相乘相加序列
3.2.3数乘
题目将两个信号进行相乘
A=3;w=pi/4;a=2;
n=-8:0.001:8;
f1=A*sin(w*n+pi/6);
f=a*f1;
plot(n,f1,n,f);
图8 数乘信号
3.3用MATLAB实现信号的时域变换
题目%{(y_1 (n)=x(2n)@y_2 (n)=x(n/2) )和{(y_3 (n)=x(3n)@y_4 (n)=x(n/3) )的时域变换
syms t;
a=2;
f=sym('(t/2+1)*(heaviside(t+2)-heaviside(t-2))');
subplot(231),ezplot(f,[-5,5]);
xlabel('Time(sec)');
ylabel('f');
title('原函数');
f1=subs(f,t,-t);
subplot(232),ezplot(f1,[-5,5]);
xlabel('Time(sec)');
ylabel('f1');
title('反摺');
f2=subs(f,t,t-1);
subplot(233),ezplot(f2,[-5,5]);
xlabel('Time(sec)');
ylabel('f2');
title('时移');
f3=a*f;
subplot(234),ezplot(f3,[-5,5]);
xlabel('Time(sec)');
ylabel('f3');
title('幅值展缩');
f4=-f1;
subplot(235),ezplot(f4,[-5,5]);
xlabel('Time(sec)');
ylabel('f4');
title('倒相');
f5=subs(f,t,a*t);
subplot(236),ezplot(f5,[-2,2]);
xlabel('Time(sec)');
ylabel('f5');
title('时间展缩');
图8 对信号各种变换图
3.4用MATLAB实现离散时间系统卷积和仿真波形
题目对例子e=[5 4 3 2 1];h=[1,1,1,1]卷积及其仿真
clear;
e=[5 4 3 2 1];h=[1,1,1,1];
r=conv(e,h);kr=length(r);
figure(3);%待卷积信号
subplot(2,1,1);stem(e,'.');
title('e(k)的波形');axis([0,6,0,5]);
subplot(2,1,2);stem(h,'.');
title('h(k)的波形');axis([0,6,0,5]);
set(gcf,'color','w');
figure(4);%卷积过程
subplot(2,2,1);stem(e,'.');
axis([-length(h),kr+1,0,5]);title('e(i)的波形');
subplot(2,2,2);stem(h,'.');
axis([-length(h),kr+1,0,5]);title('h(i)的波形');
subplot(2,2,3);stem(-(1:length(h)),h,'.');
title('h(-i)的波形');axis([-length(h),kr+1,0,5]);
subplot(2,2,4);stem(2:1+kr,r,'.');
title('Rzs(k)的波形');axis([-length(h),kr+1,0,15]);
set(gcf,'color','w');
图9 MATLAB实现离散时间系统卷积和仿真波形
图10离散时间系统的单位响应,阶跃响应的仿真波形
3.5实现离散时间系统的单位响应,阶跃响应的仿真波形
%示例一:系统为y[k]+y[k-1]+y[k-2]=f[k]
clear all;close all;clc;
n=10;a=[1,1,1];b=[1];
u=ones(1,10);h=impz(b,a,n)';
Ru=stepz(b,a,n)';r=conv(u,h);
figure(1);
subplot(2,1,1);stem(h,'.');
title('单位响应波形');axis([1,10,-2,2]);
subplot(2,1,2);stem(Ru,'.');
title('阶跃响应波形');axis([1,10,-2,2]);
set(gcf,'color','w');
%示例二:系统为y[k]-1y[k-1]+2y[k-2]=f[k]
clear;
n=10;a=[1,-1,2];b=[1];
u=ones(1,10);h=impz(b,a,n)';
Ru=stepz(b,a,n)';r=conv(u,h);
figure(2);
subplot(2,1,1);stem(h,'.');
title('单位响应的波形');axis([1,10,-20,20]);
subplot(2,1,2);stem(Ru,'.');
title('阶跃响应的波形');axis([1,10,-30,30]);
set(gcf,'color','w');
图11离散时间系统的单位响应,阶跃响应的仿真波形
图12离散时间系统的单位响应,阶跃响应的仿真波形
3.6实现离散时间系统对实指数序列信号的零状态响应的仿真波形
题目系统函数为 y[k]+2y[k-1]+3y[k-2]=f[k];clear all;close all;clc;
a=[1,2,3];b=[1];%此参数可以调整
n=10;k=0:n;
m=1;%可变参数
imp=[1,zeros(1,n)];
e=exp(m*k);
h=filter(b,a,imp);
figure(1);
stem(k,h,'.');title('单位响应波形');
r=filter(b,a,e);
set(gcf,'color','w');
figure(2);
stem(r,'.');title('实指数零状态响应波形');
set(gcf,'color','w');
图13零状态响应的仿真波形
4实验小结
matlab软件功能强大,学习起来也比较麻烦,但运用的时候却很方便。本设计是运用matlab求解电路题目,这只是它的一个简单的应用,matlab还在多方面有应用,如数学和计算算术发展模型;模拟仿真和原型;数据分析,开发和可视化;科学和工程图形;应用发展包括图形用户界面设计等方面。
simulink是matlab软件的扩展,它是实现动态系统建模和仿真的一个软件包,它使用户可以把更多的精力投入到系统模型的构建,而非编程上。
matlab语言是一种简单,高效,功能极强的高级语言,且具有强大的矩阵运算能力和极高的编程效率,这一方面使得matlab程序可以被高度向量化,另一方面使得程序易读易写。matlab在科学计算领域已变得非常普及。
此次基础强化训练,运用matlab解决电路分析中的简单问题,从而学习如何应用matlab软件来对复杂电路进行分析和计算。该方法不仅可以节约计算时间、方便地调试电路参数,而且还可以非常直观地观察和测量电路中的电压、电流和功率等物理量。结论表明,matlab提供了高效简洁的编程方法, 其强大而简易的绘图功能、矩阵和数组运算能力以及很强的扩充性,能充分满足基本电路分析、计算的需要,从而可以大大地提高计算精度和工作效率,在电路理论学科研究与工程实践中具有很好的应用价值。
这几天一直在学如何用matlab软件来分析电路,由于软件功能比较强大,所以学起来也并不轻松,在图书馆借了一些这方面的书籍,也在网上找了一些资料,但掌握的并不好。这款软件功能比较强大,以后用到的地方还很多,这几天学了一些,今后还会进一步学习运用。
参考文献:
[1]梁虹. 信号与系统分析及MATLAB实现 电子工业出版社 2002.02第12章
[2]王立宁等.MATLAB与通信仿真.北京:高等教育出版社.2000.4
[3]刘泉等.数字信号处理与实现.北京:电子工业出版社.2005.6
[4]薛定宇.控制系统计算机辅助设计---matlab语言及应用.清华大学出版社,1996年
[5]龚剑.matlab 入门与提高.清华大学出版社,2000年
[6] 楼顺天.基于matlab的系统分析与设计.西安电子科大,1999年
[7] 张志涌.精通matlab6.5.上海交大,2002年
[8]刘泉。江雪梅.信号与系统.北京:高等教育出版社.2006.2
[9]陈亚勇.MATLAB信号处理详解 北京:人民邮电出版社.2001.09
展开阅读全文