Сообщения

Одномерный фильтр Калмана на GNU Octave

(Статья будет обновляться) Этот кусок кода реализует одномерный (1D) фильтр Калмана. Его можно скопировать и вставить в GNU Octave. Фильтр Калмана нужен для оценки истинного значений какой-нить величины. Для эксперимента мы можем взять любой набор чисел и обозвать этот набор набором истинных значений. measurements = 1:1:20; Вектор measurements описывает движение с постоянной скоростью 1. Функция kalman_evaluate по вектору измерянных значеный выдаёт два вектора: предсказанные положения точки и предсказанную скорость. [x, v] = kalman_evaluate(measurements, x0, P0); Предсказанные значения должны быть expected = 2:1:21; а предсказанная скорость должна быть где-то 1. Легко проверить, что фильтр достаточно точно сработал: plot(expected - x) plot(1.0 - v) или meansq(expected - x) meansq(1.0 - v) Теперь добавим немного шума к нашему идеальному сигналу: noised = measurements + normrnd(0, 0.2, 1, 20); plot(measurements, 'g', noised, 'r') [x, v] = kalman_evalu
Недавние сообщения