Two years ago I got hired as a consultant by Boeing with the job description of making sure everything worked. On my first day on the job, I read some documentation that said the system used "Kalman filtering." It also said it used "particle physics?" Well, I don't know much about particle physics, but I do know my Kalman filtering. Later that day I asked my manager if he could tell me how the Kalman filter was implemented. He told me that I should only concern myself with "intelligent" questions. I knew right then and there that the system would be a complete and utter failure. I was let go after 30 days for "incompetence."
One of the biggest complaints about the Boeing system is that it's constantly giving false alarms. Well, one thing a Kalman filter is good for is eliminating false alarms. A Kalman filter is a software algorithm that is used for all kinds of things. Most often it's used for guidance and navigation, but it can be used for everything from economic projections to population growth studies.
The Kalman filter is my favorite filter in the world. If you walked up to me in a bar and asked what my favorite filter was, I'd say the Kalman, by far. One reason it's my favorite is because, if you read the description on Wikipedia, it looks like a big ugly hairball of mathematical equations! Go here
and scroll down (actually, look at the screen shot above.) Beautiful, ain't it! BTW, that's one problem with Wikipedia. It sometimes ends up being a giant sandbox for grad students working on PhD theses, which, in my humble opinion, is where that description belongs, not on Wikipedia. The average reader isn't going to be able to understand a description like that.
Fortunately, like most complicated things, if you boil it down, it's just a tiny little common sense equation. It is basically just a weighted filter. For example, say you have a pile of watermelons with a sign saying "10 lb. watermelons." Now, to estimate how much each watermelon actually weighs, you start by saying your initial estimate of the weight is 10 lbs, because that's the only information you have. This is called the prediction. Then you pick up a watermelon from the pile and put it on the scale and it reads 9 lbs. But the scale says it's accurate to plus or minus 5%, meaning 95% accurate. Therefore you can only say for sure that the watermelon weighs at least 9 * .95 = 8.55 lbs. To account for the other 5%, you take the previous estimate, your initial estimate, times 5%, and add that to the intermediate estimate, which yields 10 lbs * .05 = 0.5. Then, your overall new estimate, called the update, is 8.55 + 0.5 = 9.05 pounds. And you just keep doing that for each watermelon, resulting in a recursively filtered estimate. Regarding the covariance matrix, that is for things that have a small side effect on the system, such as if very high humidity causes the watermelons to be a tiny bit heavier, in which case you would add humidity to the covariance matrix.
With the Boeing system, a specific complaint was that, on windy days, there would be even more false alarms due to things like tree branches swaying in the wind, not to mention tumbleweeds rolling by. To correct for this, one item for the covariance matrix would be current wind conditions. Maybe even use "tumbleweed recognition," which, by the way is entire feasible considering that the way I do pattern recognition is by closing my eyes and visualizing the video data (the ones and zeros) and "seeing" what tumbleweeds look like over time as ones and zeros. For one thing they are almost perfectly round. And they move fast, about as fast as the wind, which I already know because it's in my Kalman filter. Are you starting to see how the ability to inject simple common sense into the Kalman filter is what makes the Kalman filter so eloquent, and useful? More detail on that in the next section.