Source code for logic.abfilter

import glm

from objects import Tracked


[docs] class ABFilter: """ The ABFilter class Provides methods for using alpha-beta filtering """ def __init__(self, kmax: int = 10): """ The ABFilter class initializer. :param kmax: Count of maximum points. :type kmax: int """ self.t: int = 1 # 1 condition unit self.kmax: int = kmax
[docs] def filterAB(self, obj: Tracked, position: glm.vec3, time: int) -> None: """ A function that applies an alpha-beta filter to an object. :param obj: Tracked object received from the tracker :type obj: Tracked :param position: Position of tracked object :type position: glm.vec3 :param time: The current time in the simulation """ k = len(obj.trajectory) if k == 0: obj.trajectory.append(position) return if k == 1 or k == 2: # initialization obj.filteredVelocityAB = (position - obj.trajectory[-1]) / ( time - obj.last_tracked_time) obj.trajectory.append(position) obj.extrapolatedValueAB = position + ( obj.filteredVelocityAB * self.t) obj.extrapolatedVelocityAB = obj.filteredVelocityAB return if k > self.kmax: obj.trajectory.pop(0) alpha = 2 * (2 * k - 1) / (k * (k + 1)) beta = 6 / (k * (k + 1)) obj.trajectory.append(obj.extrapolatedValueAB + ( alpha * (position - obj.extrapolatedValueAB))) obj.filteredVelocityAB = obj.extrapolatedVelocityAB + ( beta / (time - obj.last_tracked_time) * ( position - obj.extrapolatedValueAB)) obj.extrapolatedValueAB = obj.trajectory[-1] + ( obj.filteredVelocityAB * (time - obj.last_tracked_time)) obj.extrapolatedVelocityAB = obj.filteredVelocityAB