二阶状态轨迹的显示
电子信息学院 专业 通信工程 2011年 11 月16 日 实验名称 二阶状态轨迹的显示 指导教师 姓名 年级 学号 成绩 一、 预习部分 1. 实验目的 2. 实验基本原理 3. 主要仪器设备(含必要的元器件、工具) 一.实验目的 1. 熟悉二阶连续时间系统状态轨迹的概念。 2. 掌握连续时间系统冲激响应、阶跃响应的求解方法。 3. 观察过阻尼,欠阻尼,临界阻尼情况下,RLC 电路的状态轨迹。 二.实验原理 (系统数学模型的描述方法有输入输出描述法和状态变量分析法。在输入输出 描述法中,主要建立系统的输入(激励)与系统的输出(响应)之间的关系,不 关心系统内部的变化情况。在状态变量分析法中,需在先确定状态变量后,建立 描述系统状态变量与输入之间的关系(状态方程),以及建立系统输出变量与系 统状态变量及系统输入之间的关系(输出方程),这种分析法不仅能反映输入与 输出的关系,而且能了解系统内部的变化过程。 在状态变量分析法中,状态变量是建立状态方程和输出方程的关键变量,是 能描述系统动态特性的一组独立完备的变量。对于一个二阶系统,则可以用两个 状态变量来描述系统的动态特性,这两个状态变量构成的列矢量称为状态矢量, 以这两个状态变量为坐标轴而形成的空间称为二维状态空间。在状态空间中状态 矢量端点随时间变化而描述出的路径为状态轨迹。因此状态轨迹对应系统在不同 时刻,不同条件下的状态,知道了某段时间内的状态轨迹,则系统在该时间内的 变化过程也就知道了,所以二阶状态轨迹的描述方法是一种在几何平面上研究系 统动态性能(包括稳定性在内)的方法。用计算机模拟二阶状态轨迹的显示,方 法简单直观,且能很方便观察电路参数变化时,状态轨迹的变化规律。 三.涉及的MATLAB 相关内容 1. MATLAB 图形用户界面(GUI)设计 利用MATLAB 图形用户界面工具设计修改RLC 电路参数及显示RLC 电路二阶 状态轨迹的界面;并用程序控制界面中的控件,显示RLC 电路的二阶状态轨迹。 2. ss 函数 功能:建立系统状态空间模型。 调用格式:sys = ss(a,b,c,d) 其中,a,b,c,d 为状态方程和输出方程的矩阵,sys 为建立的状态空间模 型。 3. step 函数 功能:求线性时不变系统的阶跃响应。 调用格式:y = step(sys,t) 其中,y 为系统的阶跃响应,sys 为系统的状态空间模型。 4. axes 函数 功能:设置当前轴。 调用格式:axes(h) 其中,h 为已存在轴的句柄 二、 实验操作部分 1. 实验数据、表格及数据处理 2. 实验操作过程(可用图表示) 3. 实验结论 四、 实验内容与方法 1.验证性实验 图1 所示为RLC 电路,可看作一个二阶连续时间系统。对于该二阶系统,若要用状态变量分析来描述该系统的数学模型,可选用i (t) L 和v (t) c 作为状态变量,这两个状态变量所形成的空间称为状态空间。在状态空间中,状态矢[iL(t);vc(t)] L随时间变化而描出的路径叫状态轨迹。 图1 RLC 电路 本实验将利用计算机模拟该系统的状态轨迹,实验步骤如下: (a) 在MATLAB 命令窗口重输入“guide”,启动GUI (b) 利用GUI界面,并将其保存为trace.fig 文件。图2 修改RLC 电路参数及显示RLC 电路二阶状态轨迹的界面 (c) 运行GUI,并生成trace.m 文件。 (d) 选中图2 所示界面中“显示状态轨迹”按钮,点击右键选择菜单上的View Callbacks,选择Callback,MATLAB Editor 会自动调到该按钮对用的Callback Function 上,可以直接在那里填写代码,编程控制GUI。其中“显示状态轨迹”按钮Callback Function 的程序代码如下: function pushbutton1_Callback(hObject, eventdata, handles) t = 0:0.1:100; %从界面上获取电路参数 R = str2num(get(handles.edit1,'string')); L = str2num(get(handles.edit2,'string')); C = str2num(get(handles.edit3,'string')); %若系统以i(t) L ,v (t) c 为响应,伊e(t)为激励 %确定系统状态方程和输出方程中的a,b,c,d 矩阵 a = [-R/L -1/L;1/C 0]; b = [1/L;0]; c = [1 0;0 1]; d = [0]; sys = ss(a,b,c,d); %建立系统状态空间模型 Response = step(sys,t); %求系统的阶跃响应 axes(handles.axes1); plot(t,Response(:,1),'b-','linewidth',3); %显示i (t) L ylabel('il(t)','fontsize',14) axes(handles.axes2); plot(t,Response(:,2),'r-','linewidth',3); %显示v (t) c ylabel('vc(t)','fontsize',14) axes(handles.axes3); plot(Response(:,2),Response(:,1),'linewidth',3); %显示状态轨迹 xlabel('vc(t)','fontsize',14) ylabel('il(t)','fontsize',14) %判断系统的阻尼状态 alph = R/(2*L); omega = 1/sqrt(L*C); if (R==0) str = '无阻尼'; else if(alph>omega) str = '¹过阻尼'; end if(alph==omega) str = '临界阻尼'; end if(alph 因篇幅问题不能全部显示,请点此查看更多更全内容