import random import time class IIRLowPassShift: def __init__(self, shift: int, initial: int=0): self.shift = shift self.y = initial def update(self, x): self.y = self.y + ((x - self.y) >> self.shift) return self.y iirs = IIRLowPassShift(2) real_value = 1023 error = (real_value - 12, real_value + 12) for i in range(64): r = random.randint(error[0], error[1]) v = iirs.update(r) v /= 1023.0 v *= 10.0 print(f"STEP:{i+1:02} | R:{r:03d} | {v:>5.02f} V") time.sleep(0.1)