Kevin Murphy's Kalman Filter toolbox (for Matlab) contains an example where it's the fact that the state space system in not identifiable causes problems. I include the example in it's entirety but you won't actually be able to run the code without installing the toolbox first. See the comments between the code blocks where he notes the systems lack of identifiability.
Q1.) Can someone please explain why the system below is not identifiable. Q2.) Can someone please given general rules for determining whether a time invariant state space system is identifiable or not.
% X(t+1) = F X(t) + noise(Q) % Y(t) = H X(t) + noise(R) ss = 4; % state size os = 2; % observation size F = [1 0 1 0; 0 1 0 1; 0 0 1 0; 0 0 0 1]; H = [1 0 0 0; 0 1 0 0]; Q = 0.1*eye(ss); R = 1*eye(os); initx = [10 10 1 0]'; initV = 10*eye(ss); seed = 1; rand('state', seed); randn('state', seed); T = 10000; [x,y] = sample_lds(F, H, Q, R, initx, T); % Initializing the params to sensible values is crucial. % Here, we use the true values for everything except F and H, % which we initialize randomly (bad idea!) % Lack of identifiability means the learned params. are often far from the true ones. % All that EM guarantees is that the likelihood will increase. F1 = randn(ss,ss); H1 = randn(os,ss); Q1 = Q; R1 = R; initx1 = initx; initV1 = initV; max_iter = 100; [F2, H2, Q2, R2, initx2, initV2, LL] = learn_kalman(y, F1, H1, Q1, R1, initx1, initV1, max_iter,1,1);