ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

matlab练习程序(离散系统辨识与响应)

2022-04-30 12:04:44  阅读:187  来源: 互联网

标签:20 离散系统 idsys 响应 matlab sysd 辨识


上一篇熟悉了连续系统辨识与响应,这一篇熟悉一下离散系统辨识与响应。

计算机通常处理的系统为离散系统,这里我们先将连续系统转换为离散系统,然后再进行处理。

流程上还是先构造离散系统并根据控制量得到响应,然后用子空间迭代算法(以后会单独实现一次)求出状态空间。

再用识别得到的状态空间和原始控制量生成新的响应,并比较结果。

最后再比较一下阶跃和冲击响应。

matlab代码如下:

clear all;close all;clc;

load dryer2
warning off;

A = [-1.5,-2;1,0];
B = [0.5;0];
C = [0,1];
D = 0;
sys = ss(A,B,C,D);              %状态方程
sysd = c2d(sys,1);              %转为离散
sysd_tf = tf(sysd);             %传递函数

u = u2(1:100);                  %控制量
x = [0;0];                      %系统初始状态
for i = 1:100
    x(:,i+1) = sysd.A * x(:,i) + sysd.B * u(i);
    y(i) = sysd.C*x(:,i) + sysd.D*u(i);
end
plot(y,'r-*');

%%%%%%%%%%%%%%%%%%%%%%%%离散系统辨识%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
idata = iddata(y',u);            %构造辨识结构体
idsys = n4sid(idata);            %系统辨识得到状态方程(离散)
idsys_tf = idtf(idsys);

x = [0;0];                       %系统初始状态
for i = 1:100
    x(:,i+1) = idsys.A * x(:,i) + idsys.B * u(i);
    y(i) = idsys.C*x(:,i) + idsys.D*u(i);
end
hold on;
plot(y,'go')

%%%%%%%%%%%%%%%%%%%%%%%%离散系统状态空间转传递函数%%%%%%%%%%%%%%%%%%%%%%%%%%
syms z;
Gz = sysd.C*inv(z*eye(2) - sysd.A)*sysd.B+sysd.D;
digits(5)

GGz= vpa(Gz);
GGz = simplify(GGz);

%三种方法求出的传递函数
sysd_tf
idsys_tf
GGz

%%%%%%%%%%%%%%%%%%%%%%%%离散系统阶跃响应%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
x = [0;0];                      %系统初始状态
u = ones(20,1);
y = zeros(20,1);
for i = 1:20
    x(:,i+1) = idsys.A * x(:,i) + idsys.B*u(i);
    y(i) = idsys.C*x(:,i) + idsys.D*u(i);
end
figure;

subplot(2,2,1);
stairs((1:20)-1,y);
subplot(2,2,2);
[r,t] = step(idsys);
stairs(t,r);

%%%%%%%%%%%%%%%%%%%%%%%%离散系统冲击响应%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
x = [0;0];                      
u = zeros(20,1);
y = zeros(20,1);
u(1) = 1;
for i = 1:20
    x(:,i+1) = idsys.A * x(:,i) + idsys.B*u(i);
    y(i) = idsys.C*x(:,i) + idsys.D*u(i);
end
subplot(2,2,3);
stem((1:20)-1,y);
subplot(2,2,4);
[r,t] = impulse(idsys);
stem(t,r);

结果如下:

用原控制量与辨识结果生成响应:

 

阶跃与冲击响应:

标签:20,离散系统,idsys,响应,matlab,sysd,辨识
来源: https://www.cnblogs.com/tiandsp/p/16209806.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有