离散相似法仿真
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验名称:将传递函数为
s s 2612 的环节与单位反馈组成系统,将其离散化
1.实验原理
1 )离散相似法 所谓离散相似法,就是将一个连续系统进行离散化处理,从而得到等价的系统离散模型,此种方法按系统的动态结构图建立仿真模型。在计算过程中,按各典型环节离散相似模型,根据环节的输入来计算环节的输出。
2) 环节的离散化模型
将连续系统按下图所示对其进行离散化处理,在系统的输入、输出端加上虚拟采样开关,T 为采样周期。为保证输入信号复现原信号,在输入端加上一个保持器。
使用零阶保持器,可得到离散化状态方程的解:
3) 仿真算法实现过程
当给定连续系统的动态结构图后,将其等效为各典型环节的组合,按前面讨论的典型环节离散系数 表达式,经程序处理,事先将各环节的类型、参数、初始条件、各环节连接关系矩阵、输入输出连接矩阵等参量送入程序中,既可通过离散相似的模型求出在特定信号作用下,系统中各环节输出变量的变化情况,从而得到系统的仿真结果。
3.实验方案
1)连续系统的结构图
这是一个单位反馈的二阶系统。
2)引入采样开关将其离散
Zero-Order (零阶保持器)及采样开关对系统进行离散化,采用状态转移法进行离散化
3)将传递函数转化成状态方程并对其进行离散化
传递函数 1261)()()(2++==
s s s U s Y s G 变形得)()()(2)(62s U s Y s sY s Y s =++
假设其为零状态响应取Laplace 反变换得
u y y y =+''+''26
将其转变成状态方程有
u x x ⎥⎦⎤⎢⎣⎡+⎥⎥⎦⎤⎢⎢⎣⎡--=10016131
x y ]01[=
通过求矩阵指数及相关变化将状态方程离散化得
)(]01[)()
()()1(k u k y k Bu k x A k x =+=+
由于矩阵A ,B 过于复杂,这里简写,详细表达式见后面程序
4.实验程序
1)由传递函数求状态方程
建立传递函数并转化为状态方程
clear
clc
A = tf2ss([1],[6 2 1]) %建立传递函数模型
%并转化为状态方程
运行结果:
2)将状态方程离散化
对应脚本程序:
A =[-1/3 -1/6;1 0] %
syms s t
B= [s 0;0 s] % SI
D = inv(B-A) %求逆矩阵
AI = ilaplace(D,s,t)%laplace 变换 求A 阵
BI = AI*[0 ;1]
BI =int(BI,'0','t') %积分求B 阵
pretty(AI) %A 转化陈易读形式。
pretty(BI) %B
运行结果:(这里是离散后的A ,B 阵)
AI =
[ (cos((5^(1/2)*t)/6) - (5^(1/2)*sin((5^(1/2)*t)/6))/5)/exp(t/6)
-(5^(1/2)*sin((5^(1/2)*t)/6))/(5*exp(t/6));
(6*5^(1/2)*sin((5^(1/2)*t)/6))/(5*exp(t/6))
(cos((5^(1/2)*t)/6) + (5^(1/2)*sin((5^(1/2)*t)/6))/5)/exp(t/6)]
BI=
[(6*5^(1/2)*(sin((5^(1/2)*t)/6)/6 + (5^(1/2)*cos((5^(1/2)*t)/6))/6))/(5*exp(t/6)) - 1;
(4*5^(1/2)*sin((5^(1/2)*t)/6))/(5*exp(t/6)) - (2*cos((5^(1/2)*t)/6))/exp(t/6) + 2] 3)由离散后的状态仿真求响应,这里以阶跃相应为例(u = 10)
对应脚本程序:
clear %假设为零状态响应
clc
close
t = 0.1 %采样周期0.1s
A =[(cos((5^(1/2)*t)/6) - (5^(1/2)*sin((5^(1/2)*t)/6))/5)/exp(t/6) -(5^(1/2)*sin((5^(1/2)*t)/6))/(5*exp(t/6));
(6*5^(1/2)*sin((5^(1/2)*t)/6))/(5*exp(t/6)) (cos((5^(1/2)*t)/6) + (5^(1/2)*sin((5^(1/2)*t)/6))/5)/exp(t/6)]
B = [1 - (6*5^(1/2)*(sin((5^(1/2)*t)/6)/6 + (5^(1/2)*cos((5^(1/2)*t)/6))/6))/(5*exp(t/6));
(2*cos((5^(1/2)*t)/6))/exp(t/6) - (4*5^(1/2)*sin((5^(1/2)*t)/6))/(5*exp(t/6)) - 2]
y0 = 0 %初值
uN = 50
t = 0.1; %步长0.1
u =0:t:uN;
N = length(u);
x0 = [0;0] %零初始状态
dy = 0
uc = 10; %阶跃输入u = 10
j = 1
yk = 0;
for j = 1:N
% xk = diffsubf(x0,1,t,A,B)
yk = [1 0]*x0;
xk =A*x0 +B*uc;
x0 = xk;
data(j) = yk(1);
end
for j = 1:N %与真实值比较
comparedata(j) =10 - (10*(cos((5^(1/2)*u(j))/6) + (5^(1/2)*sin((5^(1/2)*u(j))/6))/5))/exp(u(j)/6);
end
plot(u,data,'r-',u,comparedata,'bO')
legend('相似法','解析法',4)
grid on
4)运行结果: