BỘ LỌC KALMAN

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

— Wikipedia

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

Kalman_filter_chart
Hình 1. Mô hình Kalman

Thuật toán Kalman cho hệ rời rạc được mô tả như sau:

Kalman_filter_chart
Hình 2. Lưu đồ Kalman filter

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.

Kalman_for_sensor
Hình 3. Mô hình của bài toán cảm biến

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:

Kalman_equation
Hình 4. Phương trình cho bộ lọc Kalman

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

Kalman_chart_1
Hình 5. Biểu đồ đáp ứng khi thay đổi R

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.

Kalman_chart_2
Hình 6. Biểu đồ đáp ứng khi thay đổi R

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.

Kalman_chart_3
Hình 7. Biểu đồ đáp ứng khi thay đổi giá trị đọc và R

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.

Kalman_chart_4
Hình 8. Biểu đồ đáp ứng khi thay đổi Q

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.

Kalman_chart_5
Hình 9. Biểu đồ đáp ứng khi thay đổi P

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.

Kalman_chart_6
Hình 10. Biểu đồ của P

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

Bảng 1. 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.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *