From: Nils on
Hello,
I have estimated a disturbance model as well as a noise model acting on my output. I have a model of the type
x´=A*x+B*u+K*v1
y = C*x+D*u+v2
where v1 = [w; v2] - a vector with white noise.

Now I want to convert this to discrete time... and I'm trying to utilize the idmodel functionality. I have only one output and so when I try this MATLAB tells me that C needs to have the same number of rows as K has columns. Why? I guess I could shrink the K matrix to one column but that would assume the same noise driving the disturbance as the measurement noise, right?

Does anyone know how to get around this? A hint on how to convert the system above to discrete time without the use of idmodel would of course be appreciated as well!

Thanks!
From: Nils on
So, according to the documentation the system identification toolbox supports only one source of white noise: the same vector is acting on the output as the dynamic state equation. But then, how do I incorporate the 'cross-spectral intensity' in the Kalman filter design?
From: Nils on
Ok, I'll take a last shot at explaining my situation.

I have a model for my dynamical system:
x_a´= A_a*x_a +B_a*u +N_a*w
z = C_a*x_a + D_a*u
(where w is the estimated colored disturbance)

Modeling the colored disturbance as:
x_w´= A_w*x_w + B_w*v_w
w = C_w*x_w+D_w*v_w
(v_w is white noise)

Modeling the colored measurement noise as:
x_n´= A_n*x_n + B_n*v_n
n = C_n*x_n + D_n*v_n
(v_n is white noise)

Putting this all together we get
x´= Ax+Bu+Nv
y=Cx+Du+D_n*v_n

where
x = [x_a; x_w; x_n]
v = [v_w; v_n]
and among other matrices
N = blkdiag([N_a*D_w; B_w],B_n)

This means that N should always at least have 2 columns, regardless of how many columns C has. I don't know what I'm doing wrong here, or if it is MATLAB that doesn't support two noise inputs.
From: Nils on
If anyone's interested...
MATLAB seems to lack support for this in the idmodel. 'Workaround': Making the short-sampling time approximation, the transformation of K (or N) is identical to that of B. So define a new temporary system with
idss_temp.a = A; idss_temp.b = N ....
then make the usual conversion with c2d or by yourself.
Then convert the usual system idss with A,B,C and D with c2d or similar. In the discrete domain then assign idss_d.K = Nd.