Cython KF1D to Python

pull/30773/head
Adeeb Shihadeh 2 years ago
parent 4b54c0b3cd
commit b37c587c23
  1. 31
      common/kalman/simple_kalman_old.py
  2. 2
      common/kalman/tests/test_simple_kalman.py

@ -13,11 +13,38 @@ class KF1D:
self.A_K = self.A - np.dot(self.K, self.C)
self.x0_0 = x0[0][0]
self.x1_0 = x0[1][0]
self.A0_0 = A[0][0]
self.A0_1 = A[0][1]
self.A1_0 = A[1][0]
self.A1_1 = A[1][1]
self.C0_0 = C[0]
self.C0_1 = C[1]
self.K0_0 = K[0][0]
self.K1_0 = K[1][0]
self.A_K_0 = self.A0_0 - self.K0_0 * self.C0_0
self.A_K_1 = self.A0_1 - self.K0_0 * self.C0_1
self.A_K_2 = self.A1_0 - self.K1_0 * self.C0_0
self.A_K_3 = self.A1_1 - self.K1_0 * self.C0_1
# K matrix needs to be pre-computed as follow:
# import control
# (x, l, K) = control.dare(np.transpose(self.A), np.transpose(self.C), Q, R)
# self.K = np.transpose(K)
#def update(self, meas):
# self.x = np.dot(self.A_K, self.x) + np.dot(self.K, meas)
# return self.x
def update(self, meas):
self.x = np.dot(self.A_K, self.x) + np.dot(self.K, meas)
return self.x
x0_0 = self.A_K_0 * self.x0_0 + self.A_K_1 * self.x1_0 + self.K0_0 * meas
x1_0 = self.A_K_2 * self.x0_0 + self.A_K_3 * self.x1_0 + self.K1_0 * meas
self.x0_0 = x0_0
self.x1_0 = x1_0
return [self.x0_0, self.x1_0]

@ -81,6 +81,8 @@ kf = KF1D(x0=[[x0_0], [x1_0]],
"""
kf_speed = timeit.timeit("kf.update(1234)", setup=setup, number=10000)
kf_old_speed = timeit.timeit("kf_old.update(1234)", setup=setup, number=10000)
print("speed", kf_speed)
print("speed old", kf_old_speed)
self.assertTrue(kf_speed < kf_old_speed / 4)
if __name__ == "__main__":

Loading…
Cancel
Save