Source code for modest.signals.signalsource

## @file SignalSource.py holds the SignalSource base class
#
from abc import ABCMeta, abstractmethod
from scipy.stats import multivariate_normal as mvn
from scipy.linalg import block_diag
import numpy as np


[docs]class SignalSource(): __metaclass__ = ABCMeta nextSignalID = 0 def __init__( self, stateObjectID=None ): self.__signalID__ = SignalSource.nextSignalID SignalSource.nextSignalID += 1 self.stateObjectID = stateObjectID return
[docs] def signalID(self): return self.__signalID__
[docs] def computeAssociationProbability( self, measurement, stateDict, validationThreshold=0 ): dY = None R = None H = None myMeasMat = {} if not self.stateObjectID: return 0 substate = stateDict[self.stateObjectID]['stateObject'] myMeasMat = substate.getMeasurementMatrices(measurement, source=self) for key in myMeasMat['dY']: if H is None: H = myMeasMat['H'][key] R = myMeasMat['R'][key] dY = myMeasMat['dY'][key] else: H = np.vstack([H, myMeasMat['H'][key]]) R = block_diag(R, myMeasMat['R'][key]) dY = np.append(dY, myMeasMat['dY'][key]) if dY is not None: P = substate.covariance() Pval = P.convertCovariance('covariance').value S = H.dot(Pval).dot(H.transpose()) + R myProbability = mvn.pdf(dY, cov=S) else: myProbability = 0 return myProbability