# distutils: language = c++ # cython: language_level=3 cdef class KF1D: def __init__(self, x0, A, C, K): 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 def update(self, meas): cdef double x0_0 = self.A_K_0 * self.x0_0 + self.A_K_1 * self.x1_0 + self.K0_0 * meas cdef double 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] @property def x(self): return [[self.x0_0], [self.x1_0]] @x.setter def x(self, x): self.x0_0 = x[0][0] self.x1_0 = x[1][0]