主要内容

更新

通过卡尔曼滤波状态空间模型实时更新状态

自从R2021b

描述

更新有效地更新状态分布实时应用的一个递归卡尔曼滤波器计算状态分布的时刻最后一段指定的响应数据。

计算状态分布的时刻通过卡尔曼滤波器的递归程序指定的响应数据,每个时期使用过滤器代替。

例子

(nextState,NextStateCov]=更新(Mdl,Y)返回最后一次的更新状态分布的时刻T条件在当前状态分布,通过应用一个递归的卡尔曼滤波器完全指定的标准状态空间模型Mdl鉴于T观察到的反应YnextStateNextStateCov分别是均值和协方差的更新状态分布。

例子

(nextState,NextStateCov]=更新(Mdl,Y,现状后,CurrentStateCov)初始化卡尔曼滤波器在当前状态分布的意思现状后和协方差矩阵CurrentStateCov

例子

(nextState,NextStateCov]=更新(___,名称,值)使用附加选项指定一个或多个名称参数,并使用任何输入参数组合在前面的语法。例如,更新(Mdl Y Params = Params, SquareRoot = true)设置部分指定模型中的未知参数Mdl的值参数个数,指定使用平方根卡尔曼滤波器变体的数值稳定性。

例子

(nextState,NextStateCov,logL]=更新(___)还返回loglikelihoods计算每个观测Y

例子

全部折叠

假设一个潜在的过程是一个AR (1)。状态方程是

x t = 0 5 x t - - - - - - 1 + u t ,

在哪里 u t 是高斯的意思是0和标准偏差1。

生成一个随机的一系列100观察 x t 系列,假设从1.5开始。

T = 100;ARMdl = arima (AR = 0.5, = 0,方差= 1);x0 = 1.5;rng (1);%的再现性x =模拟(ARMdl T Y0 = x0);

进一步假设的过程是受添加剂测量误差。观测方程

y t = x t + ε t ,

在哪里 ε t 与平均0和标准偏差0.75高斯。在一起,潜在的过程和状态空间模型观测方程组成。

使用随机潜伏状态过程(x)和观测方程生成的观察。

y = x + 0.75 * randn (T, 1);

指定的四个系数矩阵。

一个= 0.5;B = 1;C = 1;D = 0.75;

指定使用状态空间模型的系数矩阵。

Mdl =舰导弹(A, B, C, D)
Mdl =类型:状态空间模型的地对地导弹状态向量与长度:1观察向量长度:1状态扰动向量长度:1创新观察向量长度:1样本容量支持模型:无限的状态变量:x1, x2,…金宝app国家干扰:u1, u2,……观察系列:y1, y2,……观察创新:e1, e2,…状态方程:x1 (t) = (0.50) x1 (t - 1) + u1 (t)观测方程:日元(t) = x1 (t) + (0.75) e1 (t)初始状态分布:初始状态意味着x1 0初始状态协方差矩阵x1 x1 1.33类型x1静止状态

Mdl是一个舰导弹模型。验证模型正确地指定使用在命令窗口中显示。软件推断过程是静止的状态。随后,软件设置初始状态均值和协方差的均值和方差平稳分布的AR(1)模型。

过滤通过状态空间模型的观测,实时获得100的状态分布。

[rtfX100, rtfXVar100] =更新(Mdl, y)
rtfX100 = 1.2073
rtfXVar100 = 0.3714

更新适用于所有观测的卡尔曼滤波器y,并返回的状态估计只有100。

比较结果的结果过滤器

(外汇、~、输出)=过滤器(Mdl y);大小(外汇)
ans =1×2100年1
fX100 =外汇(100)
fX100 = 1.2073
(结束).FilteredStatesCov fXVar100 =输出
fXVar100 = 0.3714
托尔= 1平台以及;discrepencyMeans = fX100 - rtfX100;discrepencyVars = fXVar100 - rtfXVar100;areMeansEqual =规范(discrepencyMeans) <托尔
areMeansEqual =逻辑1
areVarsEqual =规范(discrepencyVars) <托尔
areVarsEqual =逻辑1

就像更新,过滤器函数过滤通过模型观察,但它返回所有中间状态估计。因为更新只返回最终的状态估计,比它更适合于实时计算过滤器

考虑到模拟数据和在状态空间模型从卡尔曼滤波器只计算最终状态分布

T = 100;ARMdl = arima (AR = 0.5, = 0,方差= 1);x0 = 1.5;rng (1);%的再现性x =模拟(ARMdl T Y0 = x0);y = x + 0.75 * randn (T, 1);一个= 0.5;B = 1;C = 1;D = 0.75;Mdl =舰导弹(A, B, C, D);

假设观测顺序是可用的,并考虑获取更新的状态分布由过滤每一个新的观察,因为它是可用的。

使用一个循环模拟下列程序。

  1. 创建变量存储初始状态分布的时刻。

  2. 过滤传入的观察通过模型指定当前初始状态分布的时刻。

  3. 覆盖当前状态分布时刻与新状态的时刻。

  4. 重复步骤2和3的新观察。

现状后= Mdl.Mean0;currentStateCov = Mdl.Cov0;newState = 0 (T, 1);newStateCov = 0 (T, 1);j = 1: T [newState (j), newStateCov (j)] =更新(Mdl y (j)现状后,currentStateCov);现状后= newState (j);currentStateCov = newStateCov (j);结束

情节的观察,真实状态值,和新状态的每个时期。

图的阴谋(1:T, x,“- k”1:T y“* g”1:T, newState“:r”,“线宽”(2)包含“期”)传说([“真值”“观察”“新国家价值观”])

图包含一个坐标轴对象。坐标轴对象包含周期包含3线类型的对象。一个或多个行显示的值只使用这些对象标记代表真实状态值,观察,新的状态值。

比较结果的结果过滤器

托尔= 1平台以及;(外汇、~、输出)=过滤器(Mdl y);discrepencyMeans = fX - newState;discrepencyVars =[输出。FilteredStatesCov] - newStateCov;areMeansEqual =规范(discrepencyMeans) <托尔
areMeansEqual =逻辑1
areVarsEqual =规范(discrepencyVars) <托尔
areVarsEqual =逻辑1

实时过滤更新顺序,应用于整个数据集,返回相同的状态分布过滤器

考虑到失业率的变化之间的线性关系和名义国民生产总值(nGNP)感兴趣的增长率。假设的创新量错回归一次差的失业率在nGNP增长率是一个ARMA(1,1)系列与高斯干扰(也就是说,一个回归模型和ARMA(1,1)误差和测量误差)。象征性地,在状态空间形式,模型

( x 1 , t x 2 , t ] = ( ϕ θ 0 0 ] ( x 1 , t - - - - - - 1 x 2 , t - - - - - - 1 ] + ( 1 1 ] u t y t - - - - - - β Z t = x 1 , t + σ ε t ,

地点:

  • x 1 , t 在回归模型ARMA误差系列。

  • x 2 , t 马是一个虚拟的状态(1)的效果。

  • y 1 , t 观察到的变化在失业率被nGNP的增长率(放气 Z t )。

  • u t 是一系列高斯干扰的意思是0和标准偏差1。

  • ε t 是高斯系列的测量误差范围 σ

加载Nelson-Plosser数据集,其中包含的失业率和nGNP系列,其他测量。

负载Data_NelsonPlosser

预处理的数据遵循这个过程:

  1. 删除主要失踪的观察。

  2. 把nGNP系列回归系列使用price2ret

  3. 第一个区别适用于失业率系列。

var = [“GNPN”“你的”];DT = rmmissing(数据表(:var));T =大小(DT, 1) - 1;%差分后的样本容量Z =[的(T, 1) price2ret (DT.GNPN)];y = diff (DT.UR);

虽然这个例子就缺失值,卡尔曼滤波器提供系列含有缺失值。

指定的系数矩阵。

一个=[南南;0 0];B = [1;1);C = 0 [1];D =南;

指定使用状态空间模型舰导弹

Mdl =舰导弹(A, B, C, D);

适合所有观测模型除了最后10观察(抵抗样本)。使用一组随机的初始参数值的优化。指定回归组件及其初值优化使用“预测”“Beta0”名称-值参数,分别。限制的估计 σ 所有积极、实数。

跳频= 10;params0 = (0.3 0.2 0.2);[EstMdl, estParams] =估计(Mdl y (1: T-fh) params0,“预测”Z (1: T-fh,:)“Beta0”(0.1 - 0.2),“磅”(负负0负无穷,无穷]);
方法:最大似然(fmincon)样本量:51对数似然:-87.2409 Akaike信息标准:184.482贝叶斯信息准则:194.141 |多项式系数性病犯错t统计概率- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - c (1) c(2) | | -0.31780 0.37357 -0.85071 0.39494 1.21242 0.82223 1.47455 0.14034摄氏度(3)| 0.45583 1.32970 0.34281 0.73174 y < - z (1) | 1.32407 0.26525 4.99179 0 y < - z(2) | -24.48733 1.89161 -12.94520 0 | |最终状态性病Dev t统计概率x (1) | -0.38117 0.42842 -0.88971 0.37363 0.66222 0.35339 0.72380 0.23402 (2) |

EstMdl是一个舰导弹模型。

短时预测失业率需要美国所有企业提供预测地平线。模拟这个过程使用一个循环:

  1. 计算当前状态分布的时刻通过过滤所有样本观测估计模型。

  2. 当一个观察是预测的时间跨度中可用,过滤模型。EstMdl不存储回归系数,因此你必须通过使用名称-值参数β

  3. 设置当前状态分布状况的短时时刻。

  4. 重复步骤2和3,当新的观察结果是可用的。

[现状后,currentStateCov] =更新(EstMdl y (1: T-fh),预测因子Z = (1: T-fh,:),β= estParams (end-1:结束));unrateF = 0 (fh, 2);unrateCovF =细胞(fh, 1);j = 1:跳频(unrateF (j,:), unrateCovF {j}] =更新(EstMdl y (T-fh + j),现状后,currentStateCov,预测= Z (T-fh + j:),β= estParams (end-1:结束));:现状后= unrateF (j) ';currentStateCov = unrateCovF {};结束

情节估计、过滤状态。回想一下,第一个状态是失业率的变化,有助于建立第一个和第二个状态。

图绘制(日期((end-fh + 1):结束),[unrateF (: 1) y ((end-fh + 1):结束)]);包含(“时间”)ylabel (“失业率的变化”)标题(“过滤失业率的变化”)

图包含一个坐标轴对象。坐标轴对象与标题过滤失业率的变化,包含时期,ylabel失业率的变化包含2线类型的对象。

过滤器函数返回只对指定观察loglikelihoods之和。有效地计算每个观测的loglikelihood,可定制的评估技术,方便使用更新代替。

考虑到模拟数据和在状态空间模型从卡尔曼滤波器只计算最终状态分布

T = 100;ARMdl = arima (AR = 0.5, = 0,方差= 1);x0 = 1.5;rng (1);%的再现性x =模拟(ARMdl T Y0 = x0);y = x + 0.75 * randn (T, 1);一个= 0.5;B = 1;C = 1;D = 0.75;Mdl =舰导弹(A, B, C, D);

评估每个观测似然函数。

[~,~,logLj] =更新(Mdl y);

logL100 - 1向量;logL (j)是在观察loglikelihood评估吗j

使用过滤器整个数据集的可能性进行评估。

[~,logL] =过滤器(Mdl y);

logL表示完整的数据可能是一个标量。

因为软件假定样本是随机的,所有观察结果的可能性的总和个人loglikelihood值。确认这一事实。

托尔= 1平台以及;另外= logL - sum (logLj);另外areEqual = <托尔
areEqual =逻辑1

输入参数

全部折叠

标准,状态空间模型作为一个指定舰导弹模型对象返回的舰导弹估计

如果Mdl部分指定的(也就是说,它包含未知参数),指定估计未知参数的使用“参数”名称-值参数。否则,更新一个错误的问题。

Mdl不存储观察反应或预测数据。提供必要的数据无论使用适当的输入或名称参数。

观察到的响应数据,指定为一个数字矩阵或细胞数值向量的向量。

  • 如果Mdl是时不变的观测方程,然后呢Y是一个T——- - - - - -n矩阵,每一行对应一个周期,每一列对应一个特定的模型中观察。T样本大小和吗每个时期的观测数量。最后一行的Y包含最新的观测。

  • 如果Mdl是时变的观测方程,然后呢Y是一个T1细胞向量。每个元素的细胞向量对应一个时期和包含一个nt维的观测向量。相应的系数矩阵的维度Mdl.C {t}Mdl.D {t}矩阵必须是一致的吗Y {t}所有的时间。的最后一个单元格Y包含最新的观测。

元素表明失踪的观察。的细节卡尔曼滤波器提供失踪的观察,看看算法

当前状态分布(换句话说,平均时间1在卡尔曼滤波过程之前指定的观察Y),指定为一个1数字向量。的状态数。

数据类型:

当前状态分布的协方差矩阵(换句话说,协方差矩阵在时间1指定的卡尔曼滤波器处理观察Y),指定为一个——- - - - - -对称半正定矩阵数值。

数据类型:

名称-值参数

指定可选的双参数作为Name1 = Value1,…,以=家,在那里的名字参数名称和吗价值相应的价值。名称-值参数必须出现在其他参数,但对的顺序无关紧要。

R2021a之前,用逗号来分隔每一个名称和值,并附上的名字在报价。

例子:更新(Mdl Y Params = Params, SquareRoot = true)设置部分指定模型中的未知参数Mdl的值参数个数,指定使用平方根卡尔曼滤波器变体的数值稳定性。

估计未知参数的状态空间模型部分指定Mdl,指定为一个数值向量。

如果Mdl是部分指定(包含未知参数指定的,您必须指定参数个数。的估计函数返回参数的估计Mdl在适当的形式。然而,您可以提供定制估计安排的元素参数个数如下:

  • 如果Mdl是一个显式地创建模型(Mdl.ParamMap是空的[]),安排的元素参数个数对应的列的搜索状态空间模型的系数矩阵,初始状态平均向量和协方差矩阵。

    • 如果Mdl是时不变的,订单是什么一个,B,C,D,Mean0,Cov0

    • 如果Mdl是随时间变化的,订单是吗一个{1}通过{结束},B {1}通过B{结束},C {1}通过C{结束},D {1}通过D{结束},Mean0,Cov0

  • 如果Mdl是一个隐式创建的模式(Mdl.ParamMap是一个函数处理),第一个输入参数的parameter-to-matrix映射函数确定元素的顺序的参数个数

如果Mdl完整说明,更新忽略了参数个数

例子:状态空间模型考虑MdlA = B =[南0;0南],C = [1;1],D = 0,初始状态意味着与协方差为0眼睛(2)Mdl部分指定显式地创建。因为模型参数包含共有四个年代,参数个数必须是一个4-by-1向量,在哪里参数(1)是估计的(1),参数(2)是估计的(2,2),参数(3)是估计的B (1,1),参数(4)是估计的B (2, 2)

数据类型:

国旗应用多元的单变量治疗系列(也称为序贯滤波),指定为真正的。的值真正的适用于单变量处理。

单变量处理可以加速和提高卡尔曼滤波的数值稳定性。然而,所有观察创新必须是不相关的。也就是说,DtDt“必须对角线,Dt,t= 1,…,T是下列之一:

  • 矩阵D {t}在时变状态空间模型

  • 矩阵D在定常状态空间模型

例子:单变量= true

数据类型:逻辑

标志申请平方根卡尔曼滤波器变体、指定为真正的。的值真正的适用于平方根滤波时更新实现了卡尔曼滤波器。

如果你怀疑的过滤状态或观察预测协方差矩阵的特征值是接近于零,集SquareRoot = true。平方根滤波是健壮的数值问题的有限精度的计算,但是它需要更多的计算资源。

例子:SquareRoot = true

数据类型:逻辑

预测不确定性的阈值,指定为负的标量。

如果预测不确定性为特定观察不到宽容在数值估算,那么相对应的软件删除不确定性观测前的预测协方差矩阵反演。

是最佳实践的集合宽容例如,数量小le-15评估期间,克服数值障碍。

例子:公差= le-15

数据类型:

状态空间模型预测变量的观测方程,作为指定T——- - - - - -d数字矩阵,d是预测变量的数量。行t对应于在期间观察到的预测因子t(Zt)。扩大后的观测方程

y t Z t β = C x t + D u t

也就是说,更新以观察使用回归组件。β是定常的回归系数矢量软件与所有其他参数估计。

如果有n观察每一个时期,那么软件就退化预测系列每个观测到。

如果您指定预测,然后Mdl必须时不变。否则,该软件返回一个错误。

默认情况下,软件不包括回归状态空间模型的组件。

数据类型:

回归系数对应的预测变量,作为指定d——- - - - - -n数字矩阵。d在预测变量的数量(看见吗预测)。

如果Mdl状态空间模型的估计,估计回归系数存储在指定estParams

输出参数

全部折叠

状态指的是后更新应用卡尔曼滤波,作为一个返回1数字向量。元素对应于状态中定义的顺序Mdl(通过的行一个或由Mdl.ParamMap)。

后状态协方差矩阵更新应用卡尔曼滤波,作为一个返回——- - - - - -数字矩阵。行和列对应于状态中定义的顺序Mdl(通过的行一个或由Mdl.ParamMap)。

为每个观察LoglikelihoodY,作为一个返回T1数字向量。

更多关于

全部折叠

实时状态分布更新

实时状态分布更新适用于一个递归的卡尔曼滤波器到一个标准状态空间模型给定一个长度T反应级数和国家分布在时间T- 1,计算状态分布T

考虑一个紧凑的形式表示状态空间模型

( x t y t ] = ( 一个 t 一个 t C t ] x t 1 + ( B t 0 B t C t D t ] ( u t ε t ]

每个时期的卡尔曼滤波器进行如下t:

  1. 获取每个时期的预测分布数据通过递归地应用了状态方程的条件期望,给定初始状态分布的时刻x0 | 0P0 | 0,所有观察到的时间t−1 (Yt−11)。由此产生的条件分布

    ( x t y t ] | Y 1 t 1 ~ Ν ( ( x ^ t | t 1 y ^ t | t 1 ] , ( P t | t 1 l t | t 1 l t | t l V t | t 1 ] ) ,

    地点:

    • x ^ t | t 1 = 一个 t x ^ t 1 | t 1 , 预估时间t

    • y ^ t | t 1 = C t x ^ t | t 1 , 预测响应时间t

    • P t | t 1 = 一个 t P t 1 | t 1 一个 t + B t B t , 预测协方差。

    • V t | t 1 = C t P t 1 | t 1 C t + D t D t , 预测响应协方差。

    • l t | t 1 = P t 1 | t 1 C t , 状态和响应预测协方差。

  2. 过滤器的观察t通过模型来获取更新的状态分布:

    x t | Y 1 t ~ Ν ( x ^ t | t , P t | t ) ,

    地点:

    • x ^ t | t = x ^ t | t 1 + l t | t 1 V t | t 1 1 ( y t y ^ t | t 1 ) , 状态滤波估计。

    • P t | t = P t | t 1 l t | t 1 V t | t 1 1 l t | t 1 , 协方差滤波器估计量。

x ^ t 1 | t 1 是当前状态,意味着什么Pt−1 |t−1当前状态协方差, x ^ t | t 是一种新的状态,意味着什么Pt|t是一种新的状态协方差。

算法

  • 卡尔曼滤波器提供缺失的数据不更新过滤状态估计对应失踪的观察。换句话说,假设有一个失踪的观察时间t。然后,预估时间t基于前面的t- 1的观察和过滤状态t是等价的。

  • 对于显式定义的状态空间模型,更新适用于所有的预测反应级数。然而,每个反应系列都有自己的回归系数。

  • 为了提高效率,更新最小的输入验证。

  • 理论上,州协方差矩阵必须是对称的,半正定。更新部队对称的协方差矩阵应用卡尔曼滤波之前,但它不检查是否半正定矩阵。

选择功能

获得每个时期响应数据过滤状态,调用过滤器函数来代替。不像更新,过滤器执行全面的输入验证。

引用

[1]杜宾J。,S. J. Koopman.时间序列分析的状态空间方法。第二版》。牛津:牛津大学出版社,2012年。

版本历史

介绍了R2021b