Skip to content

EcmParamEstimator

Estimate ECM parameters from pulse-test data and build lookup tables.

This class estimates Equivalent-Circuit Model (ECM) parameters using results from a PulseTestEmulator and organizes them into lookup tables across state of charge (SoC), ambient temperature, and C-rate for both charge and discharge conditions.

Syntax

obj = EcmParamEstimator(pulseEmulatorObj, thetaInit, thetaLB, thetaUB)

Constructor Input Arguments

Name Type Description
pulseEmulatorObj PulseTestEmulator Source of pulse test inputs/results.
thetaInit double Initial parameter vector with odd length ≥ 3 in the form [R0, Rp1,...,Rp_n, tau1,...,tau_n].
thetaLB double Lower bounds, same size as thetaInit (all ≥ 0).
thetaUB double Upper bounds, same size as thetaInit (strictly greater than thetaLB).

Methods

Name Description
Run_Parameterisation() Fits ECM parameters for all (SoC, Temp, C-rate) breakpoints and populates LUTs.

Properties

Name Type Description
pulseEmulatorObj PulseTestEmulator Pulse-Based Model input object.
modelOrder double ECM order n where n = (numel(thetaInit) - 1)/2.
thetaInit double Initial parameter guess.
thetaBounds struct Struct with fields .lb and .ub for parameter bounds.
ecmOptParameters struct Fitted ECM parameter lookup tables for charge and discharge.
paramNames string Names of parameters stored in the LUTs (R0, R1..Rn, tau1..taun).

Fields of ecmOptParameters.(pulseType)

Field Type Description
dim1_socBPs double SoC breakpoints.
dim2_tempBPs double Ambient temperature breakpoints (°C).
dim3_crateBPs double C-rate breakpoints (positive for charge, negative for discharge).
lookUpTables.R0 double array 3D LUT for R0 over [soc, temp, crate].
lookUpTables.R1..Rn double array 3D LUTs for Rp branches.
lookUpTables.tau1..taun double array 3D LUTs for time constants.
lookUpTables.ecmModelVoltFits cell array Fit tables per grid point with columns time, voltageEcmFit, voltagePhyModel.

Examples

Basic Usage

% First-order ECM example (theta = [R0, Rp1, tau1])
thetaInit = [0.01, 0.02, 100];
thetaLB   = [0,    0,    1];
thetaUB   = [0.1,  0.1,  1e4];

est = EcmParamEstimator(pulseEmulatorObj, thetaInit, thetaLB, thetaUB);
est = est.Run_Parameterisation();

R0_lut = est.ecmOptParameters.discharge.lookUpTables.R0;

See also