cbadc.digital_estimator.DigitalEstimator

class cbadc.digital_estimator.DigitalEstimator(analog_system: cbadc.analog_system.AnalogSystem, digital_control: cbadc.digital_control.DigitalControl, eta2: float, K1: int, K2: int = 0, stop_after_number_of_iterations: int = 9223372036854775808, Ts: Optional[float] = None, mid_point: bool = False, downsample: int = 1)

Bases: Iterator[numpy.ndarray]

Batch estimator implementation.

The digital 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 estimates are computed as

\(\overrightarrow{\mathbf{m}}[k] = \mathbf{A}_f \overrightarrow{\mathbf{m}}[k-1] + \mathbf{B}_f \mathbf{s}[k-1]\),

\(\overleftarrow{\mathbf{m}}[k] = \mathbf{A}_b \overrightarrow{\mathbf{m}}[k+1] + \mathbf{B}_b \mathbf{s}[k]\),

and

\(\hat{\mathbf{u}}(k T) = \mathbf{W}^\mathsf{T}\left(\overleftarrow{\mathbf{m}}[k] - \overrightarrow{\mathbf{m}}[k]\right)\)

where \(\mathbf{A}_f, \mathbf{A}_b \in \mathbb{R}^{N \times N}\), \(\mathbf{B}_f, \mathbf{B}_b \in \mathbb{R}^{N \times M}\), and \(\mathbf{W}^\mathsf{T} \in \mathbb{R}^{L \times N}\) are the precomputed filter coefficient based on the choice of cbadc.analog_system.AnalogSystem and cbadc.digital_control.DigitalControl.

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.

  • K1 (int) – batch size.

  • 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) – set a downsampling factor compared to the control signal rate, defaults to 1, i.e., no downsampling.

analog_system

analog system as in cbadc.analog_system.AnalogSystem or from derived class.

Type

cbadc.analog_system.AnalogSystem

digital_control

digital control as in cbadc.digital_control.DigitalControl or from derived class.

Type

cbadc.digital_control.DigitalControl

eta2

eta2, or equivalently \(\eta^2\), sets the bandwidth of the estimator.

Type

float

control_signal

a iterator suppling control signals as cbadc.digital_control.DigitalControl.

Type

cbadc.digital_control.DigitalControl

number_of_iterations

number of iterations until iterator raises StopIteration.

Type

int

downsample

The downsampling factor compared to the rate of the control signal.

Type

int, optional

mid_point

estimated samples shifted in between control updates, i.e., \(\hat{u}(kT + T/2)\).

Type

bool

K1

number of samples per estimate batch.

Type

int

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), readonly

Ab

The Ab matrix

Type

array_like, shape=(N, N), readonly

Bf

The Bf matrix

Type

array_like, shape=(N, M), readonly

Bb

The Bb matrix

Type

array_like, shape=(N, M), readonly

WT

The W matrix transposed

Type

array_like, shape=(L, N), readonly

Yields

array_like, shape=(L,) – an input estimate sample \(\hat{\mathbf{u}}(t)\)

Methods

__init__(analog_system, digital_control, ...)

control_signal_transfer_function(omega)

Compute the control signal transfer function at the angular frequencies of the omega array.

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.

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)

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)

Examples using cbadc.digital_estimator.DigitalEstimator