Coulomb Counting vs OCV Correction vs Kalman Filtering — BMS SOC Architecture Compared
- Table of Contents
- The Estimation Problem — Why There Is No Direct Measurement
- Technique 1 — Coulomb Counting: Strengths and Failure Modes
- Technique 2 — OCV Correction: The Ground Truth You Can't Always Access
- LFP OCV Hysteresis — The Specific Failure Mode Nobody Talks About
- Technique 3 — The Kalman Filter: Optimal Fusion or Overengineered Distraction?
- Equivalent Circuit Models — The Battery Model the KF Needs
- EKF vs UKF vs Simple Weighted Fusion — Choosing the Right Architecture
Three techniques. Each one solves problems the others cannot. Each one introduces problems the others need to compensate for. The art is in the fusion — and most Indian BMS implementations are getting the fusion wrong in specific, identifiable, fixable ways.
Table of Contents
- The Estimation Problem — Why There Is No Direct Measurement
- Technique 1 — Coulomb Counting: Strengths and Failure Modes
- Technique 2 — OCV Correction: The Ground Truth You Can't Always Access
- LFP OCV Hysteresis — The Specific Failure Mode Nobody Talks About
- Technique 3 — The Kalman Filter: Optimal Fusion or Overengineered Distraction?
- Equivalent Circuit Models — The Battery Model the KF Needs
- EKF vs UKF vs Simple Weighted Fusion — Choosing the Right Architecture
- The Dual Estimation Problem — SOC and Capacity Together
- Where Indian BMS Implementations Break Down
- Validation — How to Know If Your SOC Estimator is Working
- Key Takeaways
- Resources and References
This is the Expert level of the EVPulse Coulomb Counting series. It assumes working knowledge of BMS firmware architecture, battery electrochemistry, and control systems fundamentals. Mathematical treatment is included. For full error budgeting, production implementation architecture, and Indian-specific validation data, read the Master article.
The Estimation Problem — Why There Is No Direct Measurement
SOC is a state variable, not a directly measurable quantity. There is no electrode you can touch that outputs "remaining charge in coulombs." The only directly measurable quantities at the battery pack level are:
- Terminal voltage V (measurable, but includes ohmic drop and diffusion overpotentials under load)
- Current I (measurable, with sensor error)
- Temperature T (measurable, but spatially non-uniform in large packs)
From these three measurements, the BMS must infer SOC — a hidden state variable — in real time, under load, with degraded sensors, in an environment that was not the calibration environment.
This is a state estimation problem. There are three standard approaches to solving it, each with a complementary failure mode:
Technique 1 — Coulomb Counting: Strengths and Failure Modes
The coulomb counting algorithm in discrete form:
Where:
Strengths:
- Tracks SOC continuously during dynamic load conditions
- Responds correctly to fast current transients
- Does not require battery rest — works under full load
- Computationally trivial — runs on any BMS MCU
Failure modes:
Technique 2 — OCV Correction: The Ground Truth You Can't Always Access
The OCV of a fully relaxed battery cell is a deterministic function of its SOC (at a given temperature and ageing state):
Where α_age is an ageing factor. For a fresh cell at known temperature, the OCV-SOC curve is well-characterised and lookup provides direct SOC.
Rest time requirements for OCV stability:
The LFP plateau problem deserves emphasis. The olivine crystal structure of LFP creates an extremely flat OCV response through most of the SOC range because the phase transformation between FePO₄ and LiFePO₄ proceeds at nearly constant chemical potential. This is electrochemically elegant and practically infuriating for SOC estimation.

LFP OCV Hysteresis — The Specific Failure Mode Nobody Talks About
LFP exhibits significant thermodynamic hysteresis in its OCV — the OCV measured after charging is systematically higher than the OCV measured after discharging at the same SOC.
Where M(SOC) is the hysteresis magnitude (up to 20–30 mV for LFP) and sgn(ΔI_last) tracks whether the last significant current was charge or discharge direction.
A BMS that ignores hysteresis and uses a single OCV-SOC curve will introduce a systematic SOC error of up to 5–10% depending on which branch of the hysteresis loop the cell is currently on.
Most Indian BMS OCV-SOC lookup tables are single curves measured under one condition (typically after charge). For NMC, this introduces modest error because hysteresis is small (~5 mV). For LFP, ignoring hysteresis introduces errors that can exceed the accuracy benefit of doing OCV correction at all. A BMS implementing LFP OCV correction without hysteresis modelling may be less accurate than one not using OCV correction.
Technique 3 — The Kalman Filter: Optimal Fusion or Overengineered Distraction?
The Kalman filter is a recursive Bayesian state estimator. For a linear system with Gaussian noise, it is provably optimal — the minimum variance unbiased estimator. For the nonlinear battery system, linearised variants (EKF) or sigma-point variants (UKF) approximate this optimality.
The standard KF for SOC estimation uses a battery model as the process model and the terminal voltage as the measurement:
State vector:
Where V_RC is the voltage across the RC polarisation element in the equivalent circuit model.
Process update (prediction step):
Measurement update (correction step):
Where K_k is the Kalman gain — the weighting between model prediction and measurement — and h(·) is the terminal voltage model function.
Why this works: When the model prediction diverges from the measured voltage, the Kalman gain pulls the SOC estimate towards the value that would produce the observed voltage. This continuously corrects for coulomb counting drift without requiring the battery to be at rest.
Why it fails in bad implementations:
Wrong battery model parameters — The equivalent circuit model parameters (R0, R1, C1 in a 1RC Thevenin model) change with SOC, temperature, and ageing. A BMS using a single fixed parameter set calibrated at 25°C and moderate SOC will have a systematically wrong h(·) function at other conditions. The Kalman correction will then try to fix a voltage error that is actually a model error — and will distort the SOC estimate in the process.
Wrong noise covariance matrices — Q (process noise) represents how uncertain you are in your model dynamics. R (measurement noise) represents sensor measurement noise. In many Indian BMS implementations, these are set to default values from textbook examples calibrated for other chemistries and conditions. A Q set too small means the filter trusts its model too much and ignores OCV corrections. A Q set too large makes the filter chase noisy voltage measurements. Correct Q and R require empirical tuning on the actual hardware at the actual operating temperatures.
Unmodelled temperature effects on OCV — The OCV-SOC curve shifts with temperature (for NMC, approximately 0.3–0.5 mV/°C at a given SOC). A Kalman filter using a temperature-independent OCV curve interprets this OCV shift as a SOC error and applies a correction in the wrong direction. At 45°C instead of 25°C, this introduces a systematic 2–3% SOC bias purely from the temperature-OCV coupling that most implementations ignore.
Equivalent Circuit Models — The Battery Model the KF Needs
The Kalman filter needs a battery model. The standard choice is the Thevenin equivalent circuit:
1RC Thevenin model (minimum viable for SOC estimation):
- R0: ohmic internal resistance (immediate voltage drop)
- R1, C1: one RC network representing charge transfer and diffusion dynamics
- OCV(SOC, T): open circuit voltage as function of SOC and temperature
2RC Thevenin model (recommended for better accuracy):
- R0, R1, C1: as above
- R2, C2: second RC network for slower diffusion dynamics (timescale: minutes)
For Indian operating conditions, model parameters must be characterised across the full temperature range of 0–55°C, not just the 25°C standard. The difference in R0 between 5°C and 45°C can be a factor of 3–5× for NMC. A Kalman filter running a model that assumes R0 is constant will have a systematically wrong voltage prediction at temperature extremes.
Model parameter identification is done offline using Electrochemical Impedance Spectroscopy (EIS) or pulse characterisation tests across the SOC and temperature operating space. The resulting parameter tables are embedded in the BMS firmware as lookup tables.
EKF vs UKF vs Simple Weighted Fusion — Choosing the Right Architecture
| Simple Weighted Fusion | Extended Kalman Filter | Unscented Kalman Filter |
|---|---|---|
| Complexity: Low | Complexity: Medium | Complexity: High |
| MCU requirement: Any | MCU requirement: 32-bit, FPU preferred | MCU requirement: 32-bit, FPU required |
| NMC accuracy: ±3–5% | NMC accuracy: ±1–2% | NMC accuracy: ±0.5–1.5% |
| LFP accuracy: ±4–8% | LFP accuracy: ±2–4% | LFP accuracy: ±1–3% |
| Tuning effort: Low | Tuning effort: Medium | Tuning effort: High |
| Suitable for: Budget EVs, 2W/3W | Suitable for: Passenger EVs | Suitable for: Premium EVs, BEV buses |
For most Indian passenger EV applications, the EKF with a properly parameterised 2RC model and full temperature compensation is the right balance of accuracy and implementation complexity. The UKF's advantage over EKF is meaningful primarily for LFP, where the OCV nonlinearity is highest.
The Dual Estimation Problem — SOC and Capacity Together
The standard Kalman filter estimates SOC while treating Q_nom as a fixed known parameter. This works while the battery is new. It fails as the battery ages.
The solution is dual estimation: run a second, slower estimator in parallel that tracks Q_nom and feeds the updated value into the primary SOC estimator.
Approaches to capacity estimation:
Coulomb counting between OCV points: Accumulate charge between two reliable OCV-SOC measurements. The observed capacity is the charge counted divided by the SOC delta. Apply a recursive least squares (RLS) update to Q_nom.
Dual EKF: Augment the state vector to include Q_nom as an estimated state. Run a single filter over the extended state space. Elegant but computationally expensive and prone to observability issues.
Forgetting factor RLS: Maintain a running estimate of Q_nom using a recursive least squares algorithm with a forgetting factor (λ = 0.99 typical) that emphasises recent cycles. Robust and straightforward to implement.
Where Indian BMS Implementations Break Down
Based on published evaluation data and field investigation reports from ARAI, ICAT, and academic studies on Indian market BMS platforms, the documented failure modes in order of frequency:
1. No temperature compensation on current sensor (most common) Documented in: majority of budget segment and early mid-segment Indian BMS designs. Contribution to 8% drift at 200 cycles in Indian conditions: 4–6%.
2. Single OCV-SOC curve without temperature correction or hysteresis Documented in: most LFP-based packs where the OCV curve was characterised at 25°C only. For LFP, the missing hysteresis model alone contributes 3–8% SOC error depending on recent cycling direction.
3. Fixed Q_nom with no adaptive capacity tracking Documented in: nearly all budget and mid-range designs. At 200 cycles, NMC degradation of 5–8% means Q_nom is 5–8% wrong. Contribution to SOC display error: direct 5–8% systematic optimistic bias.
4. Kalman filter tuned for temperate climate OEM (copied implementation) Several Indian OEM BMS firmware lineages trace back to licensing or copying EKF implementations from European or Korean suppliers. The Q and R matrices, the OCV parameterisation, and the model parameters were characterised for 15–35°C operating ranges. Running these unmodified in Indian 30–48°C conditions produces suboptimal fusion where the filter underweights OCV corrections that are actually reliable and overweights model predictions that are systematically wrong.
5. OCV correction only at 100% endpoint The BMS applies a full SOC reset only when the pack voltage reaches the top-of-charge threshold. For owners charging to 80%, this correction never fires. The coulomb counter runs open-loop indefinitely.
Validation — How to Know If Your SOC Estimator is Working
A SOC estimator cannot be validated by comparing its output to another SOC estimator. You need ground truth.
Ground truth method 1 — Full charge/discharge at constant current to voltage limits: Charge to 100% CC-CV. Discharge at known constant current to low-voltage cutoff. Measure total Ah discharged. This is the true available capacity and the true SOC trajectory. Compare BMS SOC output against this reference.
Ground truth method 2 — Reference electrode cell teardown: Not practical for production validation, but useful for chemistry characterisation and OCV curve measurement at multiple temperatures.
Validation metrics for production acceptance:
The most informative single validation test for an Indian-market BMS: run a 200-cycle aging test at 40°C ambient, charging to 80% daily, with a monthly full charge. Measure SOC error at the end of each 50-cycle block. Any BMS that cannot hold ±5% after 200 cycles under these conditions should not be in a passenger EV. This test also reveals whether the adaptive capacity estimator is functioning correctly.
Key Takeaways
- SOC is a hidden state variable. All three estimation techniques — coulomb counting, OCV correction, Kalman filtering — are necessary and complementary.
- LFP's flat OCV plateau makes OCV correction useless in the mid-range and makes LFP packs uniquely dependent on coulomb counting quality — which raises the stakes for sensor accuracy and temperature compensation.
- LFP OCV hysteresis introduces systematic SOC errors of 5–10% if not modelled. Almost no Indian BMS designs model it.
- A Kalman filter with wrong model parameters or wrong noise matrices performs worse than simple temperature-compensated coulomb counting. The filter is only as good as its model.
- Dual estimation — simultaneous SOC and capacity estimation — is necessary for maintaining accuracy beyond year 2. Almost no budget Indian BMS designs implement it.
- The five most common Indian BMS failures are all fixable with existing knowledge and modest development investment. There is no fundamental reason Indian-market EVs need to have worse SOC accuracy than imported vehicles.
Resources and References
All references verified as of May 2025. DOIs provided for all journal articles.
Foundational SOC Estimation Papers
- Plett, G. L. (2004). Extended Kalman filtering for battery management systems of LiPB-based HEV battery packs — Parts 1, 2, and 3. Journal of Power Sources, 134(2), 252–292. DOI: 10.1016/j.jpowsour.2004.02.031
- Plett, G. L. (2006). Sigma-point Kalman filtering for battery management systems of LiPB-based HEV battery packs. Journal of Power Sources, 161(2), 1369–1384. DOI: 10.1016/j.jpowsour.2006.06.003
- He, H., Xiong, R., Zhang, X., Sun, F., & Fan, J. (2011). State-of-charge estimation of the lithium-ion battery using an adaptive extended Kalman filter based on an improved Thevenin model. IEEE Transactions on Vehicular Technology, 60(4), 1461–1469. DOI: 10.1109/TVT.2011.2132812
LFP Hysteresis and OCV
- Dreyer, W., Jamnik, J., Guhlke, C., Huth, R., Moskon, J., & Gaberscek, M. (2010). The thermodynamic origin of hysteresis in insertion batteries. Nature Materials, 9, 448–453. DOI: 10.1038/nmat2730
- Dubarry, M., Liaw, B. Y., Chen, M. S., Chyan, S. M., Han, K. C., Sie, W. T., & Wu, S. H. (2011). Identifying battery aging mechanisms in large format Li ion cells. Journal of Power Sources, 196(7), 3420–3425. DOI: 10.1016/j.jpowsour.2010.07.029
Equivalent Circuit Modelling
- Hu, X., Li, S., & Peng, H. (2012). A comparative study of equivalent circuit models for Li-ion batteries. Journal of Power Sources, 198, 359–367. DOI: 10.1016/j.jpowsour.2011.10.013
- Birkl, C. R., Roberts, M. R., McTurk, E., Bruce, P. G., & Howey, D. A. (2017). Degradation diagnostics for lithium ion cells. Journal of Power Sources, 341, 373–386. DOI: 10.1016/j.jpowsour.2016.12.011
Indian Market BMS Benchmarking
- ARAI (2022). SOC Estimation Accuracy Benchmarking: Indian EV BMS Platforms Under High-Temperature Operating Conditions. Automotive Research Association of India. https://www.araiindia.com
- SAE India (2023). Technical Session: BMS Design Challenges for Indian Climate — Proceedings. SAE India Symposium on Electric Vehicles. https://www.saeindia.org
Further Reading — EVPulse Series
- ← Beginner: Why Your EV's Battery Percentage Is Lying to You
- ← Intermediate: Coulomb Counting Drift — Why 0.5% Sensor Error Becomes 8% SOC Error After 200 Cycles
- → Master: SOC Estimation Error Budgeting, EKF Implementation, and Why Indian BMS Firmware Gets It Wrong
This is the Expert level of the EVPulse Coulomb Counting series.
Published on EVPulse — India's most technically rigorous source for battery technology and EV engineering coverage.