使用随时间变化的测量方程系数进行滤波

时间:2018-07-09 09:00:20

标签: matlab filter kalman-filter nonlinear-functions particle-filter

我正在尝试使用粒子滤波器或广义卡尔曼滤波器来评估动态多变量Tobit模型的可能性,即使用经过审查的数据;该代码将用Matlab编写。 我的方法是将模型重新构建为状态空间系统,其中潜在变量对应于系统状态。从潜伏空间到可观测空间的映射测量方程的特征在于时变系数,取决于给定时间段内的数据是否被删失-自然地,该“参数”无需估算。但是,这导致卡尔曼增益(或其他滤波器中的相应概念)是奇异的,并且无法评估可能性。

非常感谢您提供有关如何解决此问题的建议。

最好的问候, 卢卡斯

注意:以下是使用简单卡尔曼滤波器的代码说明

% Initialize the State Vector at the Stationary Distribution

[T,l]    = size(y);
[n,n]    = size(Phi);
s        = zeros(T+1,n);
P        = zeros(T+1,n,n);
s(1,:)   = zeros(n,1)';

a        = inv(eye(n*n) - kron(Phi,Phi))*reshape(R*Se*R',n*n,1);
P(1,:,:) = reshape(a,n,n);

% Kalman Filter Recursion
sprime             = zeros(n,1);
Pprime             = zeros(n,n);
errorprediction    = ones(T,l);
Varerrorprediction = ones(T,l,l);
liki               = ones(T,1);
measurepredi       = ones(T,l);

for i=1:T

% Updating Step

sprime = Phi*s(i,:)';
Pprime = Phi*squeeze(P(i,:,:))*Phi' + R*Se*R';

% Prediction Step

yprediction = A + B(i)*sprime;

v = y(i,:)' - yprediction;

F = B(i)*Pprime*B(i)' + H; % B is a vector of 1/0's =>F singular /:

kgain    = Pprime*B(i)'*inv(F);
s(i+1,:) = (sprime + kgain*v)';
P(i+1,:,:) = Pprime - kgain*B(i)*Pprime;
errorprediction(i,:) = v';
Varerrorprediction(i,:,:) = F;
liki(i) = -0.5*l*log(2*pi) - 0.5*log(det(F)) - 0.5*v'*inv(F)*v;
measurepredi(i,:) = y(i,:)-v';
end

statepredi = s;
varstatepredi = P;

0 个答案:

没有答案