状态空间模型

article/2025/9/12 22:21:51

一、状态空间模型简述
状态空间模型是动态时域模型,以隐含着的时间为自变量。状态空间模型包括两个模型:

一是状态方程模型,反映动态系统在输入变量作用下在某时刻所转移到的状态;
二是输出或量测方程模型,它将系统在某时刻的输出和系统的状态及输入变量联系起来。


状态空间模型分类

  状态空间模型按所受影响因素的不同分为:
(1)确定性状态空间模型
(2)随机性状态空间模型

  状态空间模型按数值形式分为:
(1)离散空间状态模型
(2)连续空间状态模型

状态空间模型按所描述的动态系统可以分为:
(1)线性的与非线性的
(2)时变的与时不变的

5.jpg (105.47 KB, 下载次数: 15)

下载附件

2015-6-11 14:22 上传



二、系统的状态空间
离散事件随机性系统的概念是系统理论中最基本的概念。

离散事件随机性系统的状态,是指系统内部的可能运动状态和可能储能状态。系统在k=k0时刻的状态,是在k<k0时以系统内部储能的积累结果,并在k=k0时以系统要素储能的方式表现出来,还将影响系统在k>k0时的外部行为。


用随机向量序列来描述系统在任一时刻的状态向量,称为状态向量法,也称为状态空间法。状态向量表示为:

6.jpg (10.91 KB, 下载次数: 15)

下载附件

2015-6-11 14:24 上传



其中

7.jpg (6.88 KB, 下载次数: 14)

下载附件

2015-6-11 14:24 上传

(k=1,2,1…,n)为第i个状态向量。


三、系统的输入输出

输入输出状态概念

引入状态向量是为了对系统内部结构进行数学描述,但在许多情况下,系统的状态是无法直接量测到的,有时甚至全部不能量测到。在实际工作中,能量测到的量之势系统的输入与输出。

输入输出变量表示
系统的输入也是随时间而变的一组变量,表示为:

8.jpg (9.92 KB, 下载次数: 13)

下载附件

2015-6-11 14:26 上传



称为输入向量,其分量

9.jpg (8.07 KB, 下载次数: 12)

下载附件

2015-6-11 14:27 上传

(i=1,2,…,r)称为输入变量。

系统所受的随机干扰也是随时间而变的一组变量,表示为

10.jpg (11.01 KB, 下载次数: 15)

下载附件

2015-6-11 16:02 上传

称为系统的动态模型噪声,它是系统的一种特殊输入向量。

系统的输出也是随时间而变的一组变量,表示为:

11.jpg (9.29 KB, 下载次数: 11)

下载附件

2015-6-11 16:31 上传

称为输出向量,其分量     (i=1,2,…,m)称为输入变量。

量测系统也会受到随机噪声的污染,表示为:

12.jpg (8.93 KB, 下载次数: 15)

下载附件

2015-6-11 16:32 上传


称为系统的量测噪声。



四、状态空间模型


状态空间模型定义
状态空间模型是描述动态系统的完整模型,它表达了由于输入引起系统内部状态的变化,并由此使输出发生的变化。


状态空间模型的不同形式
如,线性时不变模型的状态方程可表示为:

13.jpg (5.84 KB, 下载次数: 10)

下载附件

2015-6-11 16:34 上传


输出方程为:

14.jpg (3.36 KB, 下载次数: 12)

下载附件

2015-6-11 16:34 上传




五、状态空间模型的建立

• 例 1   
某养鱼场为了反映池塘鱼种的变化,请你帮助建立状态空间模型。

解答:
(1)取状态向量X(k)为k时刻3个鱼种的数量:

15.jpg (19.19 KB, 下载次数: 13)

下载附件

2015-6-11 16:39 上传

输入向量为:

16.jpg (25.87 KB, 下载次数: 14)

下载附件

2015-6-11 16:39 上传



(2)状态转移矩阵

17.jpg (8.44 KB, 下载次数: 15)

下载附件

2015-6-11 16:40 上传

式中: p1,p2,p3为鲫鱼、青鱼和鲤鱼的生长率,这里为p1=0.1,p2=0.13,p3=0.08。

(3)输入矩阵仍定为常阵

18.jpg (8.26 KB, 下载次数: 11)

下载附件

2015-6-11 16:40 上传



(4)输出矩阵或预测矩阵C为3×3维单位阵,这样输出向量或量测向量就等同于状态向量,状态空间模型:

19.jpg (7.91 KB, 下载次数: 13)

下载附件

2015-6-11 16:42 上传


即:

20.jpg (33.42 KB, 下载次数: 12)

下载附件

2015-6-11 16:42 上传



21.jpg (4.77 KB, 下载次数: 14)

下载附件

2015-6-11 16:42 上传



22.jpg (13.19 KB, 下载次数: 11)

下载附件

2015-6-11 16:42 上传





Kalman滤波简介

Kalman滤波是一种线性滤波与预测方法,原文为:A New Approach to Linear Filtering and Prediction Problems。文章推导很复杂,看了一半就看不下去了,既然不能透彻理解其原理,但总可以通过实验来理解其具体的使用方法。


Kalman滤波分为2个步骤,预测(predict)和校正(correct)。预测是基于上一时刻状态估计当前时刻状态,而校正则是综合当前时刻的估计状态与观测状态,估计出最优的状态。预测与校正的过程如下:


预测:

1.png (6.58 KB, 下载次数: 12)

下载附件

2015-6-11 13:48 上传

校正:

2.png (11.75 KB, 下载次数: 15)

下载附件

2015-6-11 13:48 上传


公式1是状态预测,公式2是误差矩阵预测,公式3是kalman增益计算,公式4是状态校正,其输出即是最终的kalman滤波结果,公式5是误差矩阵更新。各变量说明如下表:


4.jpg (120.25 KB, 下载次数: 12)

下载附件

2015-6-11 13:48 上传


算法实现与分析

Kalman滤波最复杂的计算应该就是公式3中的矩阵求逆,考虑到实现的方便性,采用matlab来简单实现,本文主要是分析kalman滤波中各个变量的作用和对滤波结果的影响。具体代码如下:


[C] 纯文本查看 复制代码
?
1
2
3
4
5
6
7
8
9
function filter = Kalman(filter)
   %predict
   predict_x = filter.A * filter.x + filter.B * filter.u;
   filter.P = filter.A * filter.P * filter.A' + filter.Q;
   %correct
   filter.K = filter.P * filter.H ' / (filter.H * filter.P * filter.H' + filter.R);
   filter.x = predict_x + filter.K * (filter.z - filter.H * predict_x);
   filter.P = filter.P - filter.K * filter.H * filter.P;
end


在matlab中,kalman滤波实际上就是上面那5个公式,而难点却是在测试代码中针对不同问题各个变量的初始化上,下面来逐个分析。


1.建立模型,明确观测量,系统状态以及其转移方程(下面这段公式太多,通过word写好后截图)


3.png (121.08 KB, 下载次数: 13)

下载附件

2015-6-11 13:48 上传


2.初始化噪声协方差矩阵

经过上面一步,只有PQRK四个矩阵还未确定了。显然增益矩阵K是不需要初始化的,P是误差矩阵,初始化可以是一个随机的矩阵或者0,只要经过几次的处理基本上就能调整到正常的水平,因此也就只会影响前面几次的滤波结果。


Q和R分别是预测和观测状态协方差矩阵,一般可以简单认为系统状态各维之间(即上面的a和b)相互独立,那么Q和R就可以设置为对角阵。而这两个对角线元素的大小将直接影响着滤波结果,若Q的元素远大于R的元素,则预测噪声大,从而更相信观测值,这样可能使得kalman滤波结果与观测值基本一致;反之,则更相信预测,kalman滤波结果会表现得比较规整和平滑;若二者接近,则滤波结果介于前面两者之间,根据实验效果看也缺乏实际使用价值。


以上几个矩阵确定后,对于状态x,由于0时刻我们没有任何关于该系统的知识,可以使用0时刻的测量值z0来初始x0,预测从k=1开始;也可以初始化-1时刻的状态,当然这个状态实际是未知的,也就可随机取。2种方式都可以,但使用0时刻测量值来初始化状态,可以使得前面几次预测更准确。


3.实验分析


首先使用下面代码生成一组数据存在z.mat中:

[C] 纯文本查看 复制代码
?
1
2
3
4
5
6
7
8
interval = pi/18;
t = 1:interval:100*pi;
len = size(t, 2);
a = t + 4 * ( rand (1,len)-0.5);
b = t .* sin (t/10) +  10 * ( rand (1,len)-0.5);
z = [a; b];
save( 'z.mat' , 'z' );
plot(z(1,:),z(2,:), 'o' )


可以看出其近似为一条振幅不断增大的正弦曲线叠加一个随机噪声。绘制出来如下:

4.png (23.9 KB, 下载次数: 10)

下载附件

2015-6-11 13:48 上传


如果使用上面推导的恒定状态系统模型,代码与实验结果如下:

[C] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
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
clear
close all
clc
dim_observe = 2;          %观测值维数
n = dim_observe;  %状态维数,观测状态每个维度都有1个速度,故需乘2
filter.A = eye(n);%[1,0,1,0;0,1,0,1;0,0,1,0;0,0,0,1];
filter.B = 0;
filter.u = 0;
filter.P = eye(n);
filter.K = zeros(n);
filter.H = eye(n);%[1,0,0,0;0,1,0,0];
cQ = 1e-8;
cR = 1e-2;
filter.Q = eye(n) * cQ;        %这里简单设置Q和R对角线元素都相等,设为不等亦可
filter.R = eye(dim_observe) * cR;
filter.x = zeros(n,1); %初始状态x0
load( 'z.mat' );
figure(1),subplot(2,2,1),
t = 1;
out = [];
for i=1:size(z,2)
   filter.z = z(:,i);
   filter = Kalman(filter);
   plot(filter.x(1),filter.x(2),  'r*' );hold on       
   plot(filter.z(1),filter.z(2),  'bo' );        hold on
   out=[out filter.x];
%         pause(.5)
end
figure(1),
str = sprintf ( 'cQ = %e, cR = %e' , cQ, cR);
title(str)
%画局部放大
subplot(2,2,2),
plot(out(1,:),out(2,:),  'r*' );hold on       
plot(z(1,:),z(2,:),  'bo' );        hold on
axis([120 170 80 200])


5.png (32.82 KB, 下载次数: 13)

下载附件

2015-6-11 13:48 上传


可以看出滤波结果完全滞后于测量数据,其根本原因在于建立的模型存在问题。


如果采用上面推导的物体运动模型则只需要修改部分代码,主要是矩阵A和H,以及其他矩阵对应的维数,具体如下:

[C] 纯文本查看 复制代码
?
1
2
3
4
5
6
7
8
dim_observe = 2;      %观测值维数
n = 2 * dim_observe;  %状态维数,观测状态每个维度都有1个速度,故需乘2
filter.A = [1,0,1,0;0,1,0,1;0,0,1,0;0,0,0,1];
filter.B = 0;
filter.u = 0;
filter.P = eye(n);
filter.K = zeros(n);
filter.H = [1,0,0,0;0,1,0,0];


运行结果如下图,蓝色为观测数据,红色为kalman滤波数据,右侧为局部放大图。可以看出经过滤波后的数据相当平滑,这里Q和R中元素的量级分别为cQ和cR,下图结果可以看到cR比cQ多了6个数量级。

6.png (39.06 KB, 下载次数: 14)

下载附件

2015-6-11 13:48 上传

(1)


增加几组结果用于对比分析,对于的cQ和cR见图的标题。

7.png (39.18 KB, 下载次数: 14)

下载附件

2015-6-11 13:48 上传

(2)


8.png (40.65 KB, 下载次数: 13)

下载附件

2015-6-11 13:48 上传

(3)


9.png (41.63 KB, 下载次数: 14)

下载附件

2015-6-11 13:48 上传

(4)


10.png (41.2 KB, 下载次数: 13)

下载附件

2015-6-11 13:48 上传

(5)


11.png (41.14 KB, 下载次数: 11)

下载附件

2015-6-11 13:48 上传

(6)


首先看图1和2,cR与cQ大小均相差了3个数量级,而二者的比值相同,则kalman滤波结果相同。


再看图2~图6,cR/cQ在不断减小,kalman滤波结果的平滑性也在不断降低,到图5和6中,滤波结果完全和观测值相同,说明此时kalman滤波已经完全相信观测值了。原因在于cR/cQ过小,系统认为预测噪声的方差很大,不值得信赖,而观测值的噪声方差小,可信度高。


总结

根据上面的实验结果,可以看出Kalman滤波应用中的几个问题:


1.模型建立的正确性从根本上决定了滤波效果的正确性。


上面使用物体静止模型进行滤波,结果完全不对,而使用匀速运动模型则能达到较好的效果。从根本上讲,上面的数据也不是匀速运动的,为何结果会基本正确?看看第一个使用静止模型的滤波结果,虽然我们假定了物体是静止的,但由于观测数据的作用,kalman滤波结果也会有相应的运动而不是完全静止,也就是说滤波器在不停地修正这个状态,而在匀速运动模型中,物体的速度我们认为不变,但同样地kalman滤波器也会不停地修正这个速度,滤波器中计算的速度实质的偏离了真实速度的,因此最终也会有相应的偏差,不过这个偏差在我们容许范围内,也就可以大胆使用了。


如果能确定物体是匀变速直线运动,使用相应带加速度的模型会得到更准确的效果。但是越严格的模型其适用范围也相应越小。


2.影响滤波结果平滑性的因素是cR/cQ,这个值反映了我们对于预测和观测值的信任程度;其值越大则越相信预测结果,滤波结果平滑性好;反之则越相信观测结果,滤波结果越偏向于观测值。一般我们使用kalman滤波器是为了能平滑数据的波动,因此应尽量保证cR/cQ稍大,上面的测试结果该值在1e4以上数据较为平滑。





http://chatgpt.dhexx.cn/article/JbvkJLbu.shtml

相关文章

什么是状态空间法

1 状态空间法 在经典控制理论中&#xff0c;在建立数学模型时是通过传递函数进行的&#xff0c;在这个过程中&#xff0c;只考虑输入和输出之间的关系&#xff0c;所以会将系统变成一个黑盒子&#xff0c;里面的内容被浓缩了。 而在现代控制理论中&#xff0c;会首先从系统中抽…

动态系统建模-状态空间方程

动态系统建模-状态空间方程 状态空间方程是现代控制理论的基础, 它以矩阵的形式表达系统状态变量、 输入及输出之间的关系。 它可以描述和处理多输入多输出(MultipleInput Multiple Output, MIMO) 的系统。 状态空间方程 单输入单输出(SingleInput Single Output,SISO) 系统…

人工智能——状态空间表示法

状态空间表示法 状态空间表示法引入问题状态空间的构成状态算符状态空间问题的解 状态空间法表示问题的步骤状态空间方法表示问题的步骤如下 利用状态空间求解问题的过程利用状态空间表示法解题示例状态空间表示法简要小结 状态空间表示法引入 状态空间表示法就是以 “ 状态空间…

传递函数与状态空间

传递函数与状态空间之间可相互转换&#xff0c;可以使用的matlab函数有 [A,B,C,D] tf2ss(NUM,DEN) [NUM,DEN] ss2tf(A,B,C,D,iu)传递函数的形式唯一&#xff0c;但状态空间的形式不唯一&#xff0c;可以有多种。 1、一阶惯性环节 时间常数为T&#xff0c;本身为低通滤波器&…

状态空间搜索

http://www.lencomputer.com/xk2008/lesson19/search_algorithm.htm 状态空间搜索是程序设计中的最基本方法之一。它通过在状态空间中的初始状态出发&#xff0c;按照一定的顺序和条件对空间中的状态进行遍历&#xff0c;最终找到目标状态。一般的状态空间搜索方法有枚举、深度…

状态空间

1. 定义 状态变量(state variables)是指在系统中所含变量个数最少的变量&#xff0c;也就是决定系统状态的最小数目的变量的有序集合&#xff0c;有时也称为状态向量&#xff08;state vector&#xff09;&#xff0c;例如表示天体运动状态的位置和速度的变量。状态变量表示系统…

状态空间树

状态空间树&#xff1a; 就是问题的解空间树&#xff0c;分为子集树和排列树 子集树 当所给的问题是从n个元素组成的集合set中找到满足某一条件的一个子集时&#xff0c;相应的解空间树称为子集。 要注意&#xff0c;这个解空间树是一个虚拟的树&#xff0c;并不是构建出来的…

matlab状态空间程序,将状态空间表示形式转换为传递函数

理想的一维振荡系统由位于两面墙壁间的两个单位质点 m1 和 m2 组成。每个质点通过一根单位弹性常量弹簧连接到最近的墙壁。另外一根弹簧连接这两个质点。传感器以 Fs=16 Hz 的频率对 a1 和 a2(质点的加速度)采样。 将总测量时间指定为 16 秒。定义采样间隔 Δt=1/Fs。 Fs = 16;…

状态空间表示

前言 本文隶属于专栏《人工智能》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见人工智能 引子 人工智能的多个研究领域从求解现实问题的过程来看&#xf…

现控笔记(二):状态空间表达式

控制系统状态空间表达式 系统动态过程的两类数学描述&#xff1a; 外部描述&#xff1a;&#xff08;输入——输出描述&#xff09; 内部描述&#xff1a;状态空间描述 两个方程描述&#xff1a;状态方程&#xff08;动态&#xff09;&#xff0c;输出方程&#xff08;静态&am…

【现控】系统状态空间表达式

【现控】1 系统状态空间表达式 一、基本概念 状态&#xff1a;状态是变化的&#xff0c;是时域里的一系列变量。它可以数字、曲线或者其他什么更为抽象的东西描述。 状态变量&#xff1a;能够完全描述系统的最小一组变量。可抽象可具体。 状态空间&#xff1a;以状态变量构成…

现代控制理论——状态、状态空间、状态空间描述

一、状态&#xff1a; 动态系统的状态粗略地说就是指系统的过去、现在和将来的运动状况。精确地说&#xff0c;状态需要一组必要而充分的数据说明。 对于运动的小车&#xff0c;系统的状态可以为位置和速度&#xff0c;对于电机可以为转速。 二、系统变量 1、状态变量 系统…

现代控制理论(1)——状态空间表达式

文章目录 一、状态变量及状态空间表达式二、状态空间表达式模拟结构图三、状态空间表达式的建立1.由系统框图建立2.由系统的机理建立3.由微分方程或传递函数建立3.1能控标准型3.2能观标准型 四、状态矢量的线性变换1.状态空间表达式变换为约当标准型2.当A为友矩阵时3.系统的并联…

matlab数据类型 —— 逻辑型

matlab系列文章&#xff1a;&#x1f449; 目录 &#x1f448; 文章目录 〇、概述一、逻辑型二、逻辑型创建1. 直接赋值2. 根据表达式创建3. 使用 logical 函数转换 三、逻辑型矩阵1. 创建逻辑型矩阵2. 转化逻辑型矩阵 〇、概述 逻辑型&#xff1a;也就是其它语言中的布尔型&…

matlab数据类型 —— 浮点型

matlab系列文章&#xff1a;&#x1f449; 目录 &#x1f448; 文章目录 〇、概述一、单精度浮点型二、双精度浮点型三、浮点型的最小值与最小值例1. 查看双精度浮点型以及单精度浮点型的最大正值和最小正值 四、浮点型创建例2. 将数据转换成浮点型 四、浮点型参与的运算1. 运…

MATLAB基础—数据类型

一、数据类型 1、整形数据 &#xff08;1&#xff09;有符号整数&#xff08;int&#xff09; ①、int8 —— 8位有符号整数&#xff08;只能取到 -128 — 127&#xff0c;大于127的数&#xff0c;输出结果为127&#xff1b;小于 -128 的数&#xff0c;输出为-128&#xff0…

Matlab里的数据类型

在Matlab里一共有四大类数据类型&#xff1a; 1、数值类型 2、逻辑类型 3、字符和字符串类型 4、结构体类型 这四大类数据类型的存储都是用矩阵来存储的 1、数值类型 数值类型即存储不同种类变量的类型&#xff0c;数值类型有五种&#xff1a;浮点数、整数、复数、Inf、NaN. …

MATLAB数据类型——整数

整数 MATLAB 支持以 1 字节、2 字节、4 字节和 8 字节几种形式存储整数数据。有意识地去使用可容纳您的数据的最小整数类型来存储数据&#xff0c;可以达到节省内存和程序执行时间的目的。 MATLAB具有四个有符号整数类和四个无符号整数类。 有符号类型能够处理负整数以及正整数…

MATLAB数据类型——浮点数

浮点数 MATLAB 以双精度或单精度来表示浮点数&#xff0c;默认数值类型为双精度 双精度浮点&#xff08;double&#xff09;&#xff1a;以 double 形式存储的任何值都需要 64 位 单精度浮点&#xff08;single&#xff09;&#xff1a;以 single 形式存储的任何值都需要 32 位…

MATLAB 数据类型中的结构体类型,及其构造方法

Matlab中的数据类型一共有四大类分别为&#xff1a; 1、数值类型 2、逻辑类型 3、字符和字符串类型 4、结构体类型 关于数据类型&#xff0c;尤其是前三种类型具体可见Matlab里的数据类型已经对其进行了详细的介绍。 而结构体类型中的每个属性&#xff0c;都可以是以上四大类中…