Dual Estimation#
The dual estimation works by operating separate filters on the transient state and the state-of-health.
Assembling Filters#
The two filters for a dual estimator differ by how the CellModel
is used.
The transient filter relies on a CellModelWrapper
to project how the transient states evolve and affect the measurements.
cell_wrapper = CellModelWrapper(cell_model=cell_model,
asoh=initial_asoh,
transients=initial_transients,
inputs=initial_inputs)
transients_hidden = MultivariateGaussian(mean=initial_transients.flatten(),
uncertainty_matrix=covariance_transient)
trans_filter = UKF(model=cell_wrapper,
initial_hidden=transients_hidden,
initial_controls=initial_controls)
The ASOH filter uses a a DegradationModelWrapper
to evaluate how to tie changes in the state of health to the observed outputs.
asoh_wrapper = DegradationModelWrapper(cell_model=cell_model,
asoh=initial_asoh,
transients=initial_transients,
inputs=initial_inputs)
asoh_hidden = MultivariateGaussian(mean=initial_asoh.get_parameters().flatten(),
covariance=covariance_asoh)
asoh_filter = UKF(model=asoh_wrapper,
initial_hidden=asoh_hidden,
initial_controls=initial_controls)
Build the estimator with these two filters
DualEstimator(transient_filter=trans_filter, asoh_filter=asoh_filter)