从状态空间模型到卡尔曼滤波

文章介绍了时间序列分析中的AR、MA、ARIMA模型以及状态空间模型,并探讨了如何利用这些模型和卡尔曼滤波方法去除脑电图中的伪迹并提取脑电节律。状态空间模型和ARMA过程的关系以及在高阶模型确定上的挑战也被提及。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从状态空间模型到卡尔曼滤波

一、时间序列分析

时间序列分析包含两种方式,一种是传统的时间序列分析法,研究时间序列能否被分解为由不同因素引起的变动;另外一种是通过建模的方式,常用的时间序列模型包含自回归模型(AR)、滑动平均模型(MA)、自回归滑动平均模型(ARMA)、以及差分自回归滑动平均模型(ARIMA)等。不同的模型适用的条件不同。

1. AR模型

如果时间序列的任意数值都可表示为自回归方程,那么该时间序列服从P阶的自回归过程。表示为AR§:
x(t)=Φ1xt−1+Φ2xt−2+Φpxt−p+ut x(t) = \Phi_1 x_{t-1} + \Phi_2x_{t-2} + \Phi_px_{t-p} + u_t x(t)=Φ1xt1+Φ2xt2+Φpxtp+ut

xt,xt−1,xt−2,......xt−p为不同时间点记录的数据值Φ1,Φ2Φ3......Φp为自回归系数ut为白噪声,一般假设服从(0,σ2)的分布 x_t,x_{t-1}, x_{t-2},... ...x_{t-p} 为不同时间点记录的数据值 \\ \Phi_1,\Phi_2\Phi_3 ... ... \Phi_p 为自回归系数 \\ u_t 为白噪声,一般假设服从(0, \sigma ^ 2)的分布 xt,xt1,xt2,......xtp为不同时间点记录的数据值Φ1,Φ2Φ3......Φp为自回归系数ut为白噪声,一般假设服从(0,σ2)的分布

AR(1)表示一阶自回归模型如式(1); AR(2)表示二阶自回归模型如式(2):
xt=Φ1xt−1+ut(1) x_t = \Phi_1x_{t-1} + u_t \\ \tag 1 xt=Φ1xt1+ut(1)

xt=Φ1xt−1+Φ2xt−2+ut(2) x_t = \Phi_1x_{t-1} + \Phi_2x_{t-2} + u_t \\ \tag 2 xt=Φ1xt1+Φ2xt2+ut(2)

2. MA模型

xt=ut+θ1ut−1+θ2ut−2+......θqut−qut,ut−1,ut−2,ut−3,ut−q表示不同时间的噪声点θ1,θ2,θ3,θq表示回归方程系数 x_t = u_t + \theta_1u_{t-1} + \theta_2u_{t-2} + ... ... \theta_qu_{t-q} u_t, u_{t-1}, u_{t-2}, u_{t-3}, u_{t-q} 表示不同时间的噪声点\\ \theta_1, \theta_2, \theta_3, \theta_q 表示回归方程系数 xt=ut+θ1ut1+θ2ut2+......θqutqut,ut1,ut2,ut3,utq表示不同时间的噪声点θ1,θ2,θ3,θq表示回归方程系数

MA(2)表示二阶MA模型:
xt=ut+θ1ut−1+θ2ut−2(3) x_t = u_t + \theta_1u_{t-1} + \theta_2u_{t-2} \tag 3 xt=ut+θ1ut1+θ2ut2(3)
从上述表达式可以看出AR模型解决了测量值的问题,MA模型解决了白噪声的问题。本质上MA模型是对AR模型的补充。

3. ARMA模型

根据上述的式子,将AR和MA结合就形成了ARMA模型,因此模型具有ARMA(p, q)两个阶数。p是自回归阶数,q为移动平均阶数。
xt=Φ1xt−1+Φ2xt−2+Φ3xt−3+......Φpxt−p+ut+θ1ut−1+θ2ut−2+θ3ut−3+......θqut−q(4) x_t = \Phi_1x_{t-1} + \Phi_2x_{t-2} + \Phi_3x_{t-3} + ... ... \Phi_px_{t-p} + u_t + \theta_1 u_{t-1} + \theta_2u_{t-2} + \theta_3u_{t-3} + ... ...\theta_qu_{t-q}\\ \tag 4 xt=Φ1xt1+Φ2xt2+Φ3xt3+......Φpxtp+ut+θ1ut1+θ2ut2+θ3ut3+......θqutq(4)
从式(4)中来看,ARMA综合了AR模型和MA模型的优势,AR模型根据前面时间步得到了当前时间步的值,MA模型解决了随机变量的值。由此也可见自回归模型是通过自身求解自身值的一种思路。

4. ARIMA模型

ARMA模型主要针对平稳序列分析,如果是模型为非平稳序列,则上述模型就不在使用。因此,提出了AMIMA。所谓非平稳序列就是序列的均值和方差随时间变化1,但是经过差分之后序列成为平稳序列。所以模型写为ARIMA(p,d,q),p代表了自回归的阶数, d代表了差分的次数,q代表了移动平均的阶数。

二、状态空间模型(SS)

状态空间模型是物理系统的数学表示,是由一阶微分方程相关的一组输入、输出和状态变量。状态变量定义输出变量的值。

在连续时间中,状态空间模型符合下列表达式:
x^=Ax+Buy=Cx+Du(5) \widehat{x} = Ax + Bu \\ y = Cx + Du \tag 5 x=Ax+Buy=Cx+Du(5)
其中x, u, y 代表了状态、输入、输出,A,B,C,D代表了状态空间矩阵。从表达式的形式上看状态空间模型和ARMA的表达式一样。事实上,任意一个ARMA过程都有一个状态空间模型与之对应,任何状态空间也可用ARMA来表示。

三、通过状态空间模型来去除脑电伪迹和提取脑电节律

1. 考虑ARMA(p, p-1)模型:

Xt=∑i=1pAjXt−i+et+∑j=1p−1Djet−j(6) X_t = \sum_{i=1}^p A_j X_{t-i} + e_t + \sum_{j=1}^{p-1}D_je_{t-j} \tag 6 Xt=i=1pAjXti+et+j=1p1Djetj(6)

Aj,Dj是模型系数,Xt是模型输出,et是0均值白噪声 A_j, D_j是模型系数,X_t是模型输出,e_t是0均值白噪声 Aj,Dj是模型系数,Xt是模型输出,et0均值白噪声

对于一个ARMA(2,1)的模型表示为:
yn=a1y(n−1)+a2y(n−2)+η(n)+d1η(n−1)(7) y_{n} = a_1y(n-1) + a_2y(n-2) + \eta(n) + d_1\eta(n-1) \tag 7 yn=a1y(n1)+a2y(n2)+η(n)+d1η(n1)(7)
假设:
在这里插入图片描述

​ 求出A的特征值,实际信号中特征值可能是实根也可能是复数根,对于复数根,通过欧拉恒等变化转换为三角函数。通过变换之后A的Jordan标准型矩阵为:M个模态矩阵和n个实特征值组成。则多输出系统状态空间模型描述为:
X(n)=A~X(n−1)+B~η(n)y(n)=C~x(n)+ε(n)其中η(n)为系统噪声,服从N(0,Q)的高斯分布,ε(n)为观测噪声,服从N(0,R)的分布(12) X(n) = \widetilde{A}X(n-1) + \widetilde{B}\eta(n) \\ y(n) = \widetilde{C}x(n) + \varepsilon(n) \tag{12} \\ 其中 \eta(n) 为系统噪声,服从N(0, Q)的高斯分布,\varepsilon(n)为观测噪声,服从N(0, R)的分布 X(n)=AX(n1)+Bη(n)y(n)=Cx(n)+ε(n)其中η(n)为系统噪声,服从N(0,Q)的高斯分布,ε(n)为观测噪声,服从N(0,R)的分布(12)
假定两者的协方差矩阵均为对角阵:
Q=diag(θ12,θm2,...θm+n2)R=diag(σ12,σm2,...σl2)(13) Q = diag(\theta_1^2, \theta_m^2, ... \theta_{m+n}^2 ) \\ R = diag(\sigma_1^2, \sigma_m^2, ... \sigma_l^2) \tag{13} Q=diag(θ12,θm2,...θm+n2)R=diag(σ12,σm2,...σl2)(13)
参考文献:

黄丽敏,郝崇清,李斌.基于状态空间模型的脑电去伪迹与节律提取[J].河北工业科技,2013,30(3):147-151

四、卡尔曼滤波

卡尔曼滤波是一种自回归滤波器,可以根据之前状态的估计值和当前的测量值,找到当前状态的最优估计值。因此,不需要记录观测或者估计的历史信息。在计算和存储上都有极大的优势

链接:https://zh.wikipedia.org/wiki/%E5%8D%A1%E5%B0%94%E6%9B%BC%E6%BB%A4%E6%B3%A2
将状态空间模型和卡尔曼滤波相结合,可以分解出脑电中的伪迹和脑电节律。但是对于状态空间模型来说,如果阶数太低,分解不足,难以得到有效的成分。但是分解阶数作为超参数,很难确定。

状态空间模型卡尔曼滤波的一种常用表示方法,可以方便地描述系统的状态演化和测量过程。下面是一个基本的状态空间模型卡尔曼滤波的MATLAB代码示例: ```matlab % 定义系统的状态空间模型 A = [1 1; 0 1]; % 状态转移矩阵 B = [0.5; 1]; % 控制输入矩阵 C = [1 0]; % 测量矩阵 % 定义过程噪声和测量噪声的协方差矩阵 Q = [0.01 0; 0 0.01]; % 过程噪声协方差 R = 1; % 测量噪声协方差 % 初始化状态和协方差矩阵 x = [0; 0]; % 初始状态 P = eye(2); % 初始协方差 % 生成一些示例数据 T = 100; % 时间步数 u = sin(1:T)'; % 控制输入 z = (C * x) + randn(T, 1); % 测量值 % 状态空间模型卡尔曼滤波循环 for t=1:T % 预测步骤 x = A * x + B * u(t); P = A * P * A' + Q; % 更新步骤 K = P * C' / (C * P * C' + R); x = x + K * (z(t) - C * x); P = (eye(2) - K * C) * P; end % 绘制估计的状态 figure; plot(1:T, x(1,:), 'r', 'LineWidth', 2); hold on; plot(1:T, x(2,:), 'b', 'LineWidth', 2); xlabel('时间'); ylabel('状态'); legend('位置', '速度'); title('状态空间模型卡尔曼滤波估计的状态'); ``` 这段代码展示了一个在MATLAB中实现状态空间模型卡尔曼滤波的例子。它假设系统具有2维状态和1维测量。定义了状态转移矩阵、控制输入矩阵和测量矩阵,以及过程噪声和测量噪声的协方差矩阵。 在这个示例中,代码生成了一些示例数据,包括控制输入向量 `u` 和测量向量 `z`。状态空间模型卡尔曼滤波循环对每个时间步执行预测和更新步骤,根据测量值估计系统的状态。 最后,使用 `plot` 函数绘制了估计的状态。 请注意,这是一个基本的实现示例,根据具体应用可能需要进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值