CCCPaste

IIRLowPassShift

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)