Exemple #1
0
 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)
Exemple #2
0
 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']