จะใช้ตัวกรองคาลมานได้อย่างไร


12

ฉันมีวิถีของวัตถุในพื้นที่ 2 มิติ (พื้นผิว) วิถีที่ได้รับเป็นลำดับของ(x,y)พิกัด ฉันรู้ว่าการวัดของฉันมีเสียงดังและบางครั้งฉันก็มีค่าผิดปกติชัดเจน ดังนั้นฉันต้องการกรองข้อสังเกตของฉัน

เท่าที่ฉันเข้าใจตัวกรองคาลมานมันก็ทำสิ่งที่ฉันต้องการ ฉันก็เลยลองใช้ดู ผมพบว่าการดำเนินงานหลามที่นี่ และนี่คือตัวอย่างที่เอกสารประกอบให้:

from pykalman import KalmanFilter
import numpy as np
kf = KalmanFilter(transition_matrices = [[1, 1], [0, 1]], observation_matrices = [[0.1, 0.5], [-0.3, 0.0]])
measurements = np.asarray([[1,0], [0,0], [0,1]])  # 3 observations
kf = kf.em(measurements, n_iter=5)
(filtered_state_means, filtered_state_covariances) = kf.filter(measurements)
(smoothed_state_means, smoothed_state_covariances) = kf.smooth(measurements)

ฉันมีปัญหาในการตีความอินพุทและเอาท์พุท ฉันเดาว่าmeasurementsเป็นสิ่งที่การวัดของฉัน (พิกัด) แม้ว่าฉันสับสนเล็กน้อยเพราะการวัดในตัวอย่างเป็นจำนวนเต็ม

ฉันยังต้องให้บางและtransition_matrices observation_matricesฉันควรใส่ค่าอะไรบ้าง เมทริกซ์เหล่านี้หมายความว่าอย่างไร

ในที่สุดฉันจะหาผลลัพธ์ของฉันได้จากที่ใด มันควรจะเป็นหรือfiltered_state_means อาร์เรย์เหล่านี้มีรูปทรงที่ถูกต้องsmoothed_state_means (2, n_observations)อย่างไรก็ตามค่าในอาร์เรย์เหล่านี้อยู่ไกลจากพิกัดเดิมมากเกินไป

ดังนั้นวิธีใช้ตัวกรองคาลมานนี้


เมทริกซ์จะถูกประเมินโดยตัวกรองคาลมาน คุณอาจต้องให้ค่าเริ่มต้นบางอย่างสำหรับอัลกอริทึมการเพิ่มประสิทธิภาพหรือไม่
Richard Hardy

1
คุณต้องเริ่มต้นด้วยการระบุรูปแบบพื้นที่ของรัฐซึ่งเกี่ยวข้องกับการสังเกตของคุณไปยังรัฐที่ไม่ได้รับการปกป้องและอธิบายว่ารัฐวิวัฒนาการไปอย่างไรเมื่อเวลาผ่านไป สิ่งนี้จะทำให้คุณผ่านการเปลี่ยนแปลงและการสังเกตเมทริกซ์เช่นเดียวกับเมทริกซ์ความแปรปรวนร่วมของข้อผิดพลาดของรัฐ ("เสียงรบกวนกระบวนการ") และเมทริกซ์ความแปรปรวนร่วมสำหรับข้อผิดพลาดในการสังเกตการณ์ (นี่คือ F, H, Q และ R ในหน้าวิกิพีเดีย C, Q & R ที่ลิงค์ที่คุณให้) Kalman FIlter เป็นเพียงอัลกอริทึมสำหรับการประเมินสถานะ (ไม่สามารถสังเกตเห็นได้) และเมทริกซ์ความแปรปรวนร่วม - ความแปรปรวนร่วมในแต่ละครั้งที่คุณระบุสิ่งเหล่านั้นทั้งหมด
Glen_b -Reinstate Monica

ฟังก์ชั่นที่คุณลิงก์ไปนั้นดูเหมือนว่าจะนำสิ่งที่แตกต่างไปเล็กน้อยจากมาตรฐาน KF เนื่องจากสามารถใช้ EM เพื่อประเมินบางสิ่งที่คุณระบุตามปกติ
Glen_b -Reinstate Monica

คำตอบ:


8

นี่คือตัวอย่างของตัวกรองคาลมาน 2 มิติที่อาจเป็นประโยชน์กับคุณ มันอยู่ในหลาม

เวกเตอร์สถานะประกอบด้วยสี่ตัวแปร: ตำแหน่งในทิศทาง x0, ตำแหน่งในทิศทาง x1, ความเร็วในทิศทาง x0, และความเร็วในทิศทาง x1 ดูบรรทัดที่แสดงความคิดเห็น "x: สถานะเริ่มต้น 4-tuple ของตำแหน่งและความเร็ว: (x0, x1, x0_dot, x1_dot)"

State-transition matrix (F) ซึ่งอำนวยความสะดวกในการทำนายระบบ / วัตถุสถานะถัดไปรวมค่าสถานะปัจจุบันของตำแหน่งและความเร็วในการทำนายตำแหน่ง (เช่น x0 + x0_dot และ x1 + x1_dot) และค่าสถานะปัจจุบันของความเร็วสำหรับ ความเร็ว (เช่น x0_dot และ x1_dot)

เมทริกซ์การวัด (H) ดูเหมือนจะพิจารณาเฉพาะตำแหน่งในตำแหน่ง x0 และ x1 เท่านั้น

เมทริกซ์สัญญาณรบกวนการเคลื่อนไหว (Q) ถูกเตรียมใช้งานเป็นเมทริกซ์เอกลักษณ์แบบ 4 - 4-4 ในขณะที่เสียงรบกวนการตั้งค่าเป็น 0.0001

หวังว่าตัวอย่างนี้จะช่วยให้คุณสามารถใช้รหัสได้


1

ตัวกรองคาลมานเป็นตัวกรองแบบทำนายผลตามรูปแบบเช่นการใช้งานตัวกรองที่ถูกต้องจะมีการหน่วงเวลาเล็กน้อยในการส่งออกเมื่อป้อนด้วยการวัดปกติที่อินพุต ฉันคิดว่ามันจะตรงไปตรงมามากกว่าที่จะใช้ตัวกรองคาลมานโดยตรงแทนที่จะใช้ห้องสมุดเพราะรูปแบบนั้นไม่คงที่เสมอไป

วิธีการทำงานของตัวกรองคือมันทำนายค่าปัจจุบันตามสถานะก่อนหน้าโดยใช้คำอธิบายทางคณิตศาสตร์ของกระบวนการแล้วแก้ไขค่านั้นตามการวัดเซ็นเซอร์ปัจจุบัน ดังนั้นจึงสามารถประเมินสถานะที่ซ่อนอยู่ (ซึ่งไม่ได้วัด) และพารามิเตอร์อื่น ๆ ที่ใช้ในโมเดลตราบใดที่ความสัมพันธ์ของพวกเขากับสถานะที่วัดได้ถูกกำหนดไว้ในโมเดล

ฉันขอแนะนำให้คุณศึกษาตัวกรองคาลมานอย่างละเอียดเพราะไม่เข้าใจอัลกอริทึมมันง่ายมากที่จะทำผิดพลาดเมื่อพยายามใช้ตัวกรอง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.