def valuesChanged(self): states = self['states'] _LTI_BASE.valuesChanged(self) # removes hold if len(self['x0']) != states: self['x0'] = [[0]]*states if len(self['P0']) != states: self['P0'] = eye(states).tolist() if len(self['Q']) != states: self['Q'] = eye(states, states).tolist() if len(self['R']) != 1: self['R'] = eye(1).tolist() #TODO: change it to qxq Q, R = self['Q'], self['R'] x0, P0 = array(self['x0']), self['P0'] A, B, C, D = self._lti.A, self._lti.B, self._lti.C, self._lti.D self.__kf = KalmanFilter(A, B, C, D, Q, R, x0, P0)
def valuesChanged(self): states = self['states'] # new number of states dt = self['description type'] m = self._lti ps = m.A.shape[0] # previous number of states dch = False # description changed indicator if (self['A'] and dt==0) or (self['num'] and dt==1): dch = True if ps != states: # Number of states changed - resize matrixes A, B, C, D = m.A, m.B, m.C, m.D if A.shape != (states, states): A = eye(states) p = B.shape[1] # number ouf inputs if B.shape != (states, p): B = eye(states, p) q = C.shape[0] # number ouf outputs if C.shape != (q, states): C = eye(q, states) if D.shape != (q, p): D = zeros((q, p)) self._lti = lti(A, B, C, D) m = self._lti if dt==0: # 'transfer function' # TODO: why m.num.tolist() returns (1,2)? - should be vector self['num'], self['den'] = m.num.tolist()[0], m.den.tolist() elif dt==1: # 'state space' self['A'], self['B'], self['C'], self['D'] = m.A.tolist(), m.B.tolist(), m.C.tolist(), m.D.tolist() elif dch: # number of states doesn't changed - change descr. type if dt==0: # 'transfer function' n, d = self['num'], self['den'] self._lti = lti(n, d) del self['A']; del self['B']; del self['C']; del self['D'] elif dt==1: # 'state space' A, B, C, D = self['A'], self['B'], self['C'], self['D'] if A.shape != (states, states): A = eye(states) p = len(B[1]) # number ouf inputs if B.shape != (states, p): B = eye(states, p) q = len(C[0]) # number ouf outputs if C.shape != (q, states): C = eye(q, states) if D.shape != (q, p): D = zeros(q, p) self._lti = lti(A, B, C, D) del self['num']; del self['den']