# Kalman Filter when states are not observable at the same time?

I have a system that I can make a strong kinematic model for, but my sensors send readings at unpredictable times. When I say unpredictable, I am not just saying the order the readings will arrive, I also mean that sensors are able to sleep when they do not see a significant change. When an input arrives for any given sensor, that information can be used to infer the states of many other sensors based on my model.

At first, it seemed like a Kalman Filter was exactly what I needed because I could make a prediction of all of the states of the system and then update those states when one piece of information comes in and repeat this process until a good estimate of the system as a whole was determined. However, after reading over Kalman filters, it looks like they assume that every state will be updated on a regular basis. Is there a way the Kalman filter can be modified for when you are unsure about what input will come in next and you are also unsure how much time will elasped before the next input arrives? Please note that in my case, once the information arrives, I will know the source of the input as well as the time that has elapsed since the last update, I just won't be able to predict these two things beforehand.

With respect to your question, you need to select a subset of the observation and measurement noise covariance matrices depending on which measurements are available. Assume you have the system \begin{align} x_{t+1} &= A_t x_t + B_t u_t + G_t w_t \\ y_t &= C_t x_t + v_t \end{align} where $w$ and $v$, with covariance $W$ and $V$, are the dynamic and measurement noises respectively.
Now partition your measurements as \begin{align} y = \begin{bmatrix} y_1 \\ y_2\end{bmatrix},\quad C = \begin{bmatrix} C_{11} & C_{12} \\ C_{21} & C_{22} \end{bmatrix},\quad V = \begin{bmatrix} V_{11} & V_{12} \\ V_{21} & V_{22} \end{bmatrix} \end{align}
If you only have measurement 1 available, you would use the observation equation \begin{align} y_1 &= C_{11} x + v_1 \end{align} and apply the Kalman filter measurement update accordingly.
The difference in time between measurements is not a problem since you can just keep running the time update equation ($x_{t+1} = \dots$) until you get a measurement. i.e. You might run the time update equation 5 times before running a single measurement update.