Trước hết, đây là lần đầu tiên tôi thử tạo bộ lọc Kalman.
Tôi trước đó đã đăng câu hỏi theo dõi Lọc lọc tiếng ồn và các biến thể từ các giá trị tốc độ trên StackOverflow mô tả nền cho bài đăng này. Đây là một mẫu điển hình của các giá trị tôi đang cố gắng lọc. Họ không nhất thiết phải giảm đó là trường hợp ở đây. Nhưng tốc độ thay đổi thường như thế này
X ------- Y
16 --- 233,75
24 --- 234,01
26 --- 234,33
32 --- 234,12
36 --- 233,85
39 --- 233,42
47 --- 233,69
52 --- 233,68
55 --- 233,76
60 --- 232,97
66 --- 233,31
72 --- 233,99
Tôi đã triển khai Bộ lọc Kalman của mình theo hướng dẫn này: Bộ lọc Kalman cho Người giả .
Việc thực hiện của tôi trông như thế này (mã giả).
//Standard deviation is 0.05. Used in calculation of Kalman gain
void updateAngle(double lastAngle){
if(firsTimeRunning==true)
priorEstimate = 0; //estimate is the old one here
priorErrorVariance = 1.2; //errorCovariance is the old one
else
priorEstimate = estimate; //estimate is the old one here
priorErrorVariance = errorCovariance; //errorCovariance is the old one
rawValue = lastAngle; //lastAngle is the newest Y-value recieved
kalmanGain = priorErrorVariance / (priorErrVariance + 0.05);
estimate = priorEstimate + (kalmanGain * (rawValue - priorEstimate));
errorCovariance = (1 - kalmanGain) * priorErrVariance;
angle = estimate; //angle is the variable I want to update
} //which will be lastAngle next time
Tôi bắt đầu với ước tính trước là 0. Điều này dường như hoạt động tốt. Nhưng điều tôi nhận thấy là kalmanGain sẽ giảm mỗi khi bản cập nhật này được chạy, điều đó có nghĩa là tôi tin tưởng các giá trị mới của mình ít hơn khi bộ lọc của tôi chạy lâu hơn (?). Tôi không muốn điều đó.
Tôi đã đi từ chỉ sử dụng một trung bình di chuyển (trọng số đơn giản và theo cấp số nhân) để sử dụng này. Ngay bây giờ tôi thậm chí không thể có được kết quả tốt như đã làm.
Câu hỏi của tôi là nếu đây là triển khai đúng và nếu phương sai lỗi trước và độ lệch chuẩn của tôi có vẻ tốt theo các giá trị mẫu tôi đã đăng không? Các thông số của tôi thực sự chỉ được chọn ngẫu nhiên để xem liệu tôi có thể nhận được một số kết quả tốt hay không. Tôi đã thử một vài phạm vi khác nhau nhưng kết quả kém. Nếu bạn có bất kỳ đề xuất nào về những thay đổi tôi có thể làm, nó sẽ thực sự được đánh giá cao. Tôi xin lỗi nếu thiếu một số thứ rõ ràng. Lần đầu tiên đăng ở đây quá.