cbadc.digital_estimator.IIRFilter
- class cbadc.digital_estimator.IIRFilter(analog_system: cbadc.analog_system.AnalogSystem, digital_control: cbadc.digital_control.DigitalControl, eta2: float, K2: int, stop_after_number_of_iterations: int = 9223372036854775808, Ts: Optional[float] = None, mid_point: bool = False, downsample: int = 1)
Bases:
Iterator[numpy.ndarray]IIR filter implementation of the digital estimator.
Specifically, the IIR filter estimator estimates a filtered version \(\hat{\mathbf{u}}(t)\) (shaped by
signal_transfer_function()) of the input signal \(\mathbf{u}(t)\) from a sequence of control signals \(\mathbf{s}[k]\).Specifically, the estimate is of the form
\(\hat{\mathbf{u}}(k T) = - \mathbf{W}^{\mathsf{T}} \overrightarrow{\mathbf{m}}_k + \sum_{\ell=0}^{K_2} \mathbf{h}[\ell] \mathbf{s}[k + \ell]\)
where
\(\mathbf{h}[\ell]=\mathbf{W}^{\mathsf{T}} \mathbf{A}_b^\ell \mathbf{B}_b\)
\(\overrightarrow{\mathbf{m}}_k = \mathbf{A}_f \mathbf{m}_{k-1} + \mathbf{B}_f \mathbf{s}[k-1]\)
and \(\mathbf{W}^{\mathsf{T}}\), \(\mathbf{A}_b\), \(\mathbf{B}_b\), \(\mathbf{A}_f\), and \(\mathbf{B}_f\) are computed based on the analog system, the sample period \(T_s\), and the digital control’s DAC waveform as described in # page=67/>`_. `control-bounded converters <https://www.research-collection.ethz.ch/bitstream/handle/20.500.11850/469192/control-bounded_converters_a_dissertation_by_hampus_malmberg.pdf?sequence=1&isAllowed=y
- Parameters
analog_system (
cbadc.analog_system.AnalogSystem) – an analog system (necessary to compute the estimators filter coefficients).digital_control (
cbadc.digital_control.DigitalControl) – a digital control (necessary to determine the corresponding DAC waveform).eta2 (float) – the \(\eta^2\) parameter determines the bandwidth of the estimator.
K2 (int, optional) – lookahead size, defaults to 0.
stop_after_number_of_iterations (int) – determine a max number of iterations by the iterator, defaults to \(2^{63}\).
Ts (float, optional) – the sampling time, defaults to the time period of the digital control.
mid_point (bool, optional) – set samples in between control updates, i.e., \(\hat{u}(kT + T/2)\), defaults to False.
downsample (int, optional) – specify down sampling rate in relation to the control period \(T\), defaults to 1, i.e., no down sampling.
- analog_system
analog system as in
cbadc.analog_system.AnalogSystemor from derived class.
- digital_control
digital control as in
cbadc.digital_control.DigitalControlor from derived class.
- control_signal
a iterator suppling control signals as
cbadc.digital_control.DigitalControl.
- number_of_iterations
number of iterations until iterator raises
StopIteration.- Type
int
- mid_point
estimated samples shifted in between control updates, i.e., \(\hat{u}(kT + T/2)\).
- Type
bool
- K2
number of lookahead samples per computed batch.
- Type
int
- Ts
spacing between samples in seconds.
- Type
float
- Af
The Af matrix.
- Type
array_like, shape=(N, N)
- Ab
The Ab matrix.
- Type
array_like, shape=(N, N)
- Bf
The Bf matrix.
- Type
array_like, shape=(N, M)
- Bb
The Bb matrix.
- Type
array_like, shape=(N, M)
- WT
The W matrix transposed.
- Type
array_like, shape=(L, N)
- h
filter impulse response.
- Type
array_like, shape=(L, K2, M)
- downsample
down sampling rate in relation to the control period \(T\).
- Type
int
- Yields
array_like, shape=(L,) – an input estimate sample \(\hat{\mathbf{u}}(t)\)
Methods
__init__(analog_system, digital_control, ...)Initializes filter coefficients
Compute the control signal transfer function at the angular frequencies of the omega array.
Return the lag of the filter.
Return lookahead size \(K2\)
noise_transfer_function(omega)Compute the noise transfer function (NTF) at the angular frequencies of the omega array.
set_iterator(control_signal_sequence)Set iterator of control signals
signal_transfer_function(omega)Compute the signal transfer function (STF) at the angular frequencies of the omega array.
warm_up()Warm up filter by population control signals.
- control_signal_transfer_function(omega: numpy.ndarray)
Compute the control signal transfer function at the angular frequencies of the omega array.
Specifically, computes
\(\begin{pmatrix}\hat{u}_1(\omega) / s_1(\omega) & \dots & \hat{u}_1(\omega) / s_M(\omega) \\ \vdots & \ddots & \vdots \\ \hat{u}_L(\omega) / s_1(\omega) & \dots & \hat{u}_L(\omega) / s_M(\omega) \end{pmatrix}= \mathbf{G}( \omega)^\mathsf{H} \left( \mathbf{G}( \omega)\mathbf{G}( \omega)^\mathsf{H} + \eta^2 \mathbf{I}_N \right)^{-1} \bar{\mathbf{G}}( \omega)\)
for each angular frequency in omega where where \(\bar{\mathbf{G}}( \omega)= \mathbf{C}^\mathsf{T} \left(\mathbf{A} - i \omega \mathbf{I}_N\right)^{-1} \mathbf{\Gamma} \in\mathbb{R}^{N \times M}\) is the transfer function from the control signals to the output and \(\mathbf{I}_N\) represents a square identity matrix.
- Parameters
omega (array_like, shape=(K,)) – an array_like object containing the angular frequencies for evaluation.
- Returns
return STF evaluated at K different angular frequencies.
- Return type
array_like, shape=(L, M, K)
- filter_lag()
Return the lag of the filter.
As the filter computes the estimate as
K2 |u_hat[k]
- Returns
The filter lag.
- Return type
int
- noise_transfer_function(omega: numpy.ndarray)
Compute the noise transfer function (NTF) at the angular frequencies of the omega array.
Specifically, computes
\(\text{NTF}( \omega) = \mathbf{G}( \omega)^\mathsf{H} \left( \mathbf{G}( \omega)\mathbf{G}( \omega)^\mathsf{H} + \eta^2 \mathbf{I}_N \right)^{-1}\)
for each angular frequency in omega where where \(\mathbf{G}(\omega)\in\mathbb{R}^{N \times L}\) is the ATF matrix of the analog system and \(\mathbf{I}_N\) represents a square identity matrix.
- Parameters
omega (array_like, shape=(K,)) – an array_like object containing the angular frequencies for evaluation.
- Returns
return NTF evaluated at K different angular frequencies.
- Return type
array_like, shape=(L, N_tilde, K)
- set_iterator(control_signal_sequence: Iterator[numpy.ndarray])
Set iterator of control signals
- Parameters
control_signal_sequence (iterator) – a iterator which outputs a sequence of control signals.
- signal_transfer_function(omega: numpy.ndarray)
Compute the signal transfer function (STF) at the angular frequencies of the omega array.
Specifically, computes
\(\text{STF}( \omega) = \mathbf{G}( \omega)^\mathsf{H} \left( \mathbf{G}( \omega)\mathbf{G}( \omega)^\mathsf{H} + \eta^2 \mathbf{I}_N \right)^{-1} \mathbf{G}( \omega)\)
for each angular frequency in omega where where \(\mathbf{G}(\omega)\in\mathbb{R}^{N \times L}\) is the ATF matrix of the analog system and \(\mathbf{I}_N\) represents a square identity matrix.
- Parameters
omega (array_like, shape=(K,)) – an array_like object containing the angular frequencies for evaluation.
- Returns
return STF evaluated at K different angular frequencies.
- Return type
array_like, shape=(L, K)
- warm_up()
Warm up filter by population control signals.
Specifically fills up internal control signal buffer with K2 control signals.