Source code for ezmsg.sigproc.detrend

import scipy.signal as sps
from ezmsg.util.messages.axisarray import AxisArray, replace
from ezmsg.sigproc.ewma import EWMATransformer, EWMASettings
from ezmsg.sigproc.base import BaseTransformerUnit


[docs] class DetrendTransformer(EWMATransformer): """ Detrend the data using an exponentially weighted moving average (EWMA) estimate of the mean. """ def _process(self, message): axis = self.settings.axis or message.dims[0] axis_idx = message.get_axis_idx(axis) means, self._state.zi = sps.lfilter( [self._state.alpha], [1.0, self._state.alpha - 1.0], message.data, axis=axis_idx, zi=self._state.zi, ) return replace(message, data=message.data - means)
[docs] class DetrendUnit( BaseTransformerUnit[EWMASettings, AxisArray, AxisArray, DetrendTransformer] ): SETTINGS = EWMASettings