
BỘ LỌC KALMAN
Kalman là gì ?
Bộ lọc Kalman, được Rudolf(Rudy)E.Kalman công bố năm 1960, là thuật toán sử dụng chuỗi các giá trị đo lường, bị ảnh hưởng bởi nhiễu hoặc các sai số, để ước đoán biến số nhằm tăng độ chính xác so với việc sử dụng duy nhất một giá trị đo lường. Bộ lọc Kalman thực hiện phương pháp triu hồi đối với chuỗi các giá trị đầu vào bị nhiễu, nhằm tối ưu hóa giá trị ước đoán trạng thái hệ thống.
Link: vi.wikipedia.org/wiki/Bộ_lọc_Kalman
Kalman cho bài toán cảm biến
Giới thiệu về bộ lọc Kalman cho hệ tuyến tính rời rạc

Thuật toán Kalman cho hệ rời rạc được mô tả như sau:
Ta thấy rằng thuật toán gồm hai bước: bước ước lượng dự đoán (time update) và bước làm chính xác dự đoán này (measurement update) dựa trên thông tin đầu vào đo được z_k , và x_k là giá trị dự đoán được cập nhật từ giá trị ước lượng ^x_k-1.
Lọc Kalman để xử lí dữ liễu cảm biến
Baì toán của cảm biến như sau: thông số được đọc từ cảm biến, thông số chịu tác động của nhiễu từ nhiều nguồn (nhiễu quá trình ,sai số phép đo ,nhiễu điện ,ADC…). Ta sử dụng bộ lọc Kalman để ước lượng giá trị tốt nhất của phép đo.

Với:
-
Giá trị cần đo là x(t).
-
Tín hiệu thu được từ cảm biến là z(t).
-
Nhiễu của quá trình là w(t).
-
Nhiễu đo lường là v(t).
-
Giải thích cho công thức số (7):
-
x_k là giá trị ước lượng gần đúng mà ta muốn thu được khi cảm biến đo được. Vậy nên giá trị ước lượng tại k gần bằng với giá trị trước đó, bởi ta đo cùng một khoảng cách thì 2 giá trị ta muốn nhận về không sai lệch quá nhiều, nếu có sai thì do nhiễu quá trình w_k.
-
-
Giải thích cho công thức số (8):
-
z_k là giá trị đọc vê từ cảm biến. Khi ta nhận giá trị từ cảm biển thì trong đó bao gồm giá trị đúng mà ta nhận được với với sai số phép đo tại thời điểm đó.
-
Bởi vì nhiễu tại thời điểm đo của cả 2 phương trình là không xác định nên ta không thể suy ra giá trị đúng từ 1 trong 2 công thức trên. Bộ lọc Kalman giải quyết vấn đề trên như sau:

Trong đó:
-
K là hệ số Kalman.
-
R là nhiễu giá trị đo.
-
Q là nhiễu hệ thống.
-
P là hiệp phương sai của x.
-
Phương trình 9 là quá trình dự đoán giá trị:
-
Thực hiện gán bằng các giá trị x, P cho các giá trị đã ước lượng gần đúng trước đó. Xem như là giá trị đo mới gần đúng với giá trị trước đó.
-
Q là nhiễu hệ thống, có thể bằng không, tuy nhiên để hệ thống đáp ứng với sự thay đổi nhạy hơn thì ta có thể cho nó một phương sai nhỏ.
-
-
Phương trình 10 là quá trình ước lượng chính xác dự đoán trước:
-
Trong đó K tỉ lệ nghịch với R, nếu R càng lớn thì K càng nhỏ, kết quả ước lượng sẽ phẳng tuy nhiên thời gian đáp ứng chậm dễ dẫn đến sai, ngược lại nếu R nhỏ thì K lớn, đáp ứng nhanh nhưng không phẳng.
-
Code
double kalman_filter(double z_k)
{
static const double R = 1; // phương sai của nhiễu đo lường
static const double H = 1.00;
static double Q = 10e-5; // phương sai của nhiễu hệ thống
static double P = 0; // Hiệp phương sai của x tại thời điểm K
static double x_k = 0;
static double K = 0;
K = P * H / (H * P * H + R); // Công thức tính độ lợi K
x_k = x_k + K * (z_k - H * x_k); // ước lượng chính xác và cập nhật x_k cho lần ước lượng sau
P = (1 - K * H) * P + Q; // ước lượng P và cập nhật P cho lần ước lượng sau
return x_k;
}
Thực nghiệm

Trong đó:
-
Column B là giá trị cảm biến đọc được.
-
Column D là giá trị đã lọc kalman với R bằng 0.1.
-
Column C là giá trị đã lọc kalman với R bằng 1.
-
Column E là giá trị đã lọc kalman với R bằng 10.

Trong đó:
-
Column B là giá trị cảm biến đọc được.
-
Column C là giá trị đã lọc kalman với R bằng 0.1.
-
Column D là giá trị đã lọc kalman với R bằng 0.01.
-
Column E là giá trị đã lọc kalman với R bằng 0.001.

Trong đó:
-
Column B là giá trị cảm biến đọc được.
-
Column C là giá trị đã lọc kalman với R bằng 0.01.
-
Column D là giá trị đã lọc kalman với R bằng 1.
-
Column E là giá trị đã lọc kalman với R bằng 10.

Trong đó:
-
Column B là giá trị cảm biến đọc được.
-
Column C là giá trị đã lọc kalman với Q bằng 10e-1.
-
Column D là giá trị đã lọc kalman với Q bằng 10e-2.
-
Column E là giá trị đã lọc kalman với Q bằng 10e-5.

Trong đó:
-
Column B là giá trị cảm biến đọc được.
-
Column C là giá trị đã lọc kalman với P bằng 5.
-
Column D là giá trị đã lọc kalman với P bằng 0.

Trong đó:
-
Column B là giá trị đã lọc kalman với P bằng 5.
-
Column C là giá trị đã lọc kalman với P bằng 0.
Kết luận
Giá trị | Cao | Thấp |
---|---|---|
R |
Đáp ứng thu được phẳng nhưng tốc độ đáp ứng chậm |
Đáp ứng nhanh khi thay đổi giá trị đọc, Đáp ứng thu được không phẳng |
Q |
Độ nhạy thấp, thời gian đáp ứng lâu |
Độ nhạy cao, đáp ứng tốt |
Nhận xét :
-
Bộ lọc Kalman cho thấy nó có khả năng giải quyết tốt với nhiễu cho bài toán đã biết trước mô hình.
-
Việc chọn thông số R là quan trọng, đòi hỏi chúng ta phải dung hòa giữa tốc độ hội tụ và độ phẳng của kết quả ước lượng.
-
Thông số Q là nhiễu hệ thống có thể bằng 0 tuy nhiên nên để thông số thấp để tăng độ nhạy.
-
Thông số P chỉ cần khác 0 là được nếu không giá trị ước lượng sẽ không tự thích nghi được.