FlyByWire/RateLimiter.py
2021-07-04 18:56:56 +02:00

29 lines
1.2 KiB
Python

''' Digital rate limiter filter implementation '''
class RateLimiter:
''' Implementation of a digital rate limiter filter. '''
def __init__(self, rateDown, rateUp, dt):
''' Builds a biquad filter from the given parameters. '''
self.InitFilter(0)
self.rateUp = rateUp
self.rateDown = rateDown
self.dt = dt
if self.rateDown > self.rateUp:
print('Warning : rate limiter with id ' + str(id(self)) + ' : lower limit is higher than upper limit !')
def InitFilter(self, v):
''' Initializes the filter with the value v. '''
self.xn_0 = v
self.yn_1 = v
def Filter(self, xn_0):
''' Computes the next value of the filter. '''
self.xn_0 = xn_0
if ((self.xn_0 - self.yn_1)/self.dt) > self.rateUp:
self.yn_1 = self.yn_1 + self.rateUp * self.dt # next output value is set at max up rate
elif ((self.xn_0 - self.yn_1)/self.dt) < self.rateDown:
self.yn_1 = self.yn_1 + self.rateDown * self.dt # next output value is set at max down rate
else:
self.yn_1 = self.xn_0
return self.yn_1