def executeAlgorithm(self): self.predictedData = [] for index, sample in enumerate(self.inputData): if sample.time < self.predictionInterval: # Set initial values predictionSample = PredictionSample() predictionSample.sample = copy(sample) predictionSample.velocity = Vector() self.predictedData.append(predictionSample) else: shift = index - self.predictionInterval / self.samplingInterval # Calculate velocity deltaPosition = self.inputData[index].position - \ self.inputData[shift].position deltaTime = self.inputData[index].time - \ self.inputData[shift].time invDeltaTimeVector = Vector( 1 / float(deltaTime), \ 1 / float(deltaTime), \ 1 / float(deltaTime)) velocity = deltaPosition * invDeltaTimeVector # Populate data structures predictionSample = PredictionSample() predictionSample.sample = copy(sample) predictionSample.velocity = velocity self.predictedData.append(predictionSample)
def executeAlgorithm(self): self.reconstructedSignal = [] self.reconstructedSignal.append(deepcopy(self.rawSignal[0].sample)) extrapolationSample = self.rawSignal[0] futureExtrapolationSample = None nextTimeToRecord = self.reconstructedSignal[0].time + 1 tempRawSignal = self.rawSignal[1:] for index, predictionSample in enumerate(tempRawSignal): while predictionSample.sample.time > nextTimeToRecord: if futureExtrapolationSample != None and \ futureExtrapolationSample.sample.time == nextTimeToRecord: extrapolationSample = futureExtrapolationSample futureExtrapolationSample = None self.reconstructedSignal.append( deepcopy(extrapolationSample.sample)) else: estimatedSample = self.estSample(extrapolationSample, nextTimeToRecord) self.reconstructedSignal.append(deepcopy(estimatedSample)) nextTimeToRecord += 1 lastEstimatedSample = self.reconstructedSignal[-1] targetSample = self.calcTargetSample(predictionSample) snapSample = self.calcSnapSample(predictionSample.sample, lastEstimatedSample) extrapolationSample = self.calcExtrapolationSample( snapSample, targetSample) futureExtrapolationSample = PredictionSample( targetSample, predictionSample.velocity) self.reconstructedSignal.append(deepcopy(snapSample)) nextTimeToRecord += 1
def estimateSample(self, interpolationSample, time): estimatedSample = PredictionSample() estimatedSample.sample.time = time estimatedSample.sample.position = self.calculatePosition( interpolationSample, time) estimatedSample.velocity = deepcopy(interpolationSample.velocity) return estimatedSample
def calcExtrapolationSample(self, snapSample, targetSample): deltaPosition = targetSample.position - snapSample.position deltaTime = targetSample.time - snapSample.time invDeltaTimeVector = Vector( 1 / float(deltaTime), \ 1 / float(deltaTime), \ 1 / float(deltaTime)) velocity = deltaPosition * invDeltaTimeVector extrapolationSample = PredictionSample() extrapolationSample.sample = deepcopy(snapSample) extrapolationSample.velocity = velocity return extrapolationSample
def executeAlgorithm(self): self.reconstructedSignal = [] self.reconstructedSignal.append( self.findFirstSample() ) reconstructionTime = self.reconstructedSignal[0].time + self.samplingInterval interpolationSample = PredictionSample(self.reconstructedSignal[0], self.rawSignal[0].velocity) targetSample = None for index, predictionSample in enumerate(self.rawSignal[1:]): currentTime = predictionSample.sample.time if currentTime < reconstructionTime: estimatedSample = self.estimateSample(interpolationSample, currentTime) targetSample = self.findTarget(predictionSample) interpolationSample = self.findInterpolationSample(estimatedSample, targetSample) elif currentTime == reconstructionTime: previousEstimatedSample = self.estimateSample(interpolationSample, reconstructionTime - self.samplingInterval) targetSample = self.findTarget(predictionSample) interpolationSample = self.findInterpolationSample(previousEstimatedSample, targetSample) estimatedSample = self.estimateSample(interpolationSample, reconstructionTime) self.reconstructedSignal.append(deepcopy(estimatedSample.sample)) reconstructionTime += self.samplingInterval elif currentTime > reconstructionTime: while currentTime > reconstructionTime: if targetSample != None and reconstructionTime >= targetSample.sample.time: interpolationSample = targetSample targetSample = None estimatedSample = self.estimateSample(interpolationSample, reconstructionTime) self.reconstructedSignal.append(deepcopy(estimatedSample.sample)) reconstructionTime += self.samplingInterval if currentTime < reconstructionTime: estimatedSample = self.estimateSample(interpolationSample, currentTime) targetSample = self.findTarget(predictionSample) interpolationSample = self.findInterpolationSample(estimatedSample, targetSample) elif currentTime == reconstructionTime: previousEstimatedSample = self.estimateSample(interpolationSample, reconstructionTime - self.samplingInterval) targetSample = self.findTarget(predictionSample) interpolationSample = self.findInterpolationSample(previousEstimatedSample, targetSample) estimatedSample = self.estimateSample(interpolationSample, reconstructionTime) self.reconstructedSignal.append(deepcopy(estimatedSample.sample)) reconstructionTime += self.samplingInterval
def findInterpolationSample(self, currentSample, targetSample): deltaPosition = targetSample.sample.position - \ currentSample.sample.position deltaTime = targetSample.sample.time - \ currentSample.sample.time invDeltaTimeVector = Vector( 1 / float(deltaTime), \ 1 / float(deltaTime), \ 1 / float(deltaTime)) velocity = deltaPosition * invDeltaTimeVector interpolationSample = PredictionSample() interpolationSample.sample = deepcopy(currentSample.sample) interpolationSample.velocity = velocity return interpolationSample
def findSnapSample(self, currentSample, estimatedSample, targetSample): deltaPosition = targetSample.sample.position - \ currentSample.sample.position deltaPosition.x *= self.snapLimit deltaPosition.y *= self.snapLimit deltaPosition.z *= self.snapLimit snapPosition = currentSample.sample.position + deltaPosition deltaPosition = targetSample.sample.position - snapPosition deltaTime = targetSample.sample.time - \ currentSample.sample.time invDeltaTimeVector = Vector( 1 / float(deltaTime), \ 1 / float(deltaTime), \ 1 / float(deltaTime)) velocity = deltaPosition * invDeltaTimeVector snapSample = PredictionSample() snapSample.sample = Sample(currentSample.sample.time, snapPosition) snapSample.velocity = velocity return snapSample