惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
DataBreaches.Net
Microsoft Security Blog
Microsoft Security Blog
大猫的无限游戏
大猫的无限游戏
B
Blog RSS Feed
MyScale Blog
MyScale Blog
博客园_首页
S
SegmentFault 最新的问题
WordPress大学
WordPress大学
小众软件
小众软件
V
Visual Studio Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Vercel News
Vercel News
Hugging Face - Blog
Hugging Face - Blog
The GitHub Blog
The GitHub Blog
D
Docker
宝玉的分享
宝玉的分享
博客园 - 【当耐特】
F
Fortinet All Blogs
V
V2EX
Last Week in AI
Last Week in AI
Blog — PlanetScale
Blog — PlanetScale
Microsoft Azure Blog
Microsoft Azure Blog
IT之家
IT之家
雷峰网
雷峰网
博客园 - 叶小钗
月光博客
月光博客
J
Java Code Geeks
量子位
爱范儿
爱范儿
阮一峰的网络日志
阮一峰的网络日志
Martin Fowler
Martin Fowler
H
Help Net Security
酷 壳 – CoolShell
酷 壳 – CoolShell
腾讯CDC
Latest news
Latest news
Recent Announcements
Recent Announcements
Google DeepMind News
Google DeepMind News
美团技术团队
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
The Blog of Author Tim Ferriss
T
Troy Hunt's Blog
B
Blog
T
Tenable Blog
S
Schneier on Security
L
LangChain Blog
L
LINUX DO - 热门话题
博客园 - 司徒正美
I
InfoQ
P
Privacy International News Feed
P
Privacy & Cybersecurity Law Blog

辛未羊的网络日志

丙午五月纪事:多灾之月 俄语字母与发音 阿森纳重夺英超冠军 时间敏感网络简介 愉快的2026年春节 业余无线电QSL卡片设计 愿2026年一切顺利 写字这件小事 MATLAB求解根轨迹与虚轴交点 业余无线电台执照和呼号 高中母校的回礼 业余无线电操作证考试 连收两张高速超速罚单 南宁城区FM调频广播实测 四旋翼飞行器的建模 电脑仰卧起坐抢救记 再次入手「Smith电子学」 反馈系统的稳定性 系统的输入输出稳定性 系统的无源性 桂林城区FM调频广播实测
H无穷大状态观测器设计与仿真
辛未羊 · 2024-10-18 · via 辛未羊的网络日志

相比于标准状态空间模型,还考虑了扰动信号的影响。是测量输出,可看成是传感器系统模型,是系统输出。目标是设计一个全阶状态观测器,使得扰动信号对状态估计误差的影响足够小。

最后通过仿真验证状态观测器对扰动信号的抑制能力。最好将矩阵的求解、观测器设计和控制器设计的代码放到同一个文件中,这样就能使用最精确的矩阵。MATLAB的默认输出精度是小数点后4位,根据我的经验,的舍入误差对观测器性能影响较大。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95

n = 3;
l = 2;
m = 2;
p = 1;
r = 2;


A = [2.8982, -3.1606, 0.6816;
6.3595, -4.2055, 4.5423;
3.2046, -3.1761, -3.8142];
if ~isequal(size(A), [n, n])
fprintf('Dimension of A is wrong!!\n');
end

B1 = [2.0310, 1.2164;
0.4084, 0.2794;
-0.7775, -0.3307];
if ~isequal(size(B1), [n, r])
fprintf('Dimension of B1 is wrong!!\n');
end

B2 = [-0.0785;
-0.0853;
-0.0986];
if ~isequal(size(B2), [n, p])
fprintf('Dimension of B2 is wrong!!\n');
end

C1 = [-0.8778, -4.9442, -4.5084;
4.0161, -2.0259, 1.9318];
if ~isequal(size(C1), [l, n])
fprintf('Dimension of C1 is wrong!!\n');
end

D1 = [0.6004, 0.2107;
1.9320, -0.3997];
if ~isequal(size(D1), [l, r])
fprintf('Dimension of D1 is wrong!!\n');
end

D2 = [0.0330;
-0.0414];
if ~isequal(size(D2), [l, p])
fprintf('Dimension of D2 is wrong!!\n');
end

C2 = [0.9607, 1.5600, 2.8558;
-2.4371, 1.3634, 0.0095];
if ~isequal(size(C2), [m, n])
fprintf('Dimension of C2 is wrong!!\n');
end


yalmip('clear')

gamma = 1e-8;
P = sdpvar(n, n);
W = sdpvar(n, l, 'full');
M = [A'*P+C1'*W'+P*A+W*C1, P*B2+W*D2, C2';
(P*B2+W*D2)', -gamma*eye(p), zeros(p, m);
C2, zeros(m, p), -gamma*eye(m)];

Constraints = [P >= 0; M <= 0];
Objective = [];
options = sdpsettings('verbose', 0);
sol = optimize(Constraints, Objective, options);

if sol.problem == 0
L = value(P)\value(W);
else
disp('Hmm, something went wrong!');
sol.info
yalmiperror(sol.problem)
end



poles = [-5; -7+7j; -7-7j];
K = place(A, -B1, poles);

Aco = [A+B1*K, B1*K;
zeros(size(A)), A+L*C1];
Bco = [B2; B2+L*D2];
Cco = [zeros(size(C2)), C2]; Dco = 0;
sys_co = ss(Aco, Bco, Cco, Dco);

t = 0:0.01:4;
xe0 = zeros(6, 1);
w = wgn(1, length(t), 100, 'real');
[zt, t, xe] = lsim(sys_co, w, t, xe0);

subplot(311); plot(t, w, 'LineWidth', 1); grid on
subplot(312); plot(t, xe(:, 4:6), 'LineWidth', 1); grid on
subplot(313); plot(t, zt(:, 1:2), 'LineWidth', 1); grid on