eis-data-analytics
This repository is a mirror of https://git.rwth-aachen.de/isea/eis_data_analytics.git. Please file any issues and merge requests there.
Science Score: 65.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
✓DOI references
Found 36 DOI reference(s) in README -
○Academic publication links
-
○Academic email domains
-
✓Institutional organization owner
Organization isea-rwth-aachen has institutional domain (www.isea.rwth-aachen.de) -
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (12.3%) to scientific vocabulary
Repository
This repository is a mirror of https://git.rwth-aachen.de/isea/eis_data_analytics.git. Please file any issues and merge requests there.
Basic Info
- Host: GitHub
- Owner: isea-rwth-aachen
- License: mit
- Language: C
- Default Branch: main
- Homepage: https://git.rwth-aachen.de/isea/eis_data_analytics.git
- Size: 1.94 MB
Statistics
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
- Releases: 0
Metadata Files
README.md
EIS Data Analytics
EIS Data Analytics is a collection of code to analyze which fitting approach is suitable for your electrochemical impedance spectroscopy (EIS) data.
1
- EIS Data Analytics
- Overview
- Getting Started
- Example Usage
- Data
- Temperature Estimation
- Verification
- Colophon
- Further Information
- FAQ
- Sources
Overview
The main purpose of this tool is to process and analyze large amounts of EIS measurements. This implies that compromises have to be made in some respects. The following functions are already implemented: - Standardization of the frequency measuring points by interpolation - LinKK - ECM fitting - DRT fitting - Impedance extrema extraction - Various forms of visualization - SOC, SOH, Temperature, Phase and other parameter predictions - Linear Regression [SISO, MISO, MIMO] - Elastic Net Linear Regression [SISO, MISO, MIMO] - Support Vector Classification (SVC) [SISO, MISO] - Support Vector Regression (SVR) [SISO, MISO, MIMO] - Multi-layer Perceptron (MLP) Regression [MISO, MIMO] - Microcontroller (µC) code for SOC, SOH, Temperature, Phase and other parameter predictions - Linear Regression [SISO, MISO, MIMO] - Elastic Net Linear Regression [SISO, MISO, MIMO] - Support Vector Regression (SVR) [SISO, MISO] - Multi-layer Perceptron (MLP) Regression [MISO, MIMO]
Getting Started
Binder
Launch the project by clicking on the badge: .
If you want to process a lot of data or run it on the microcontroller, please run it on your hardware.
Python
- Clone the project into your "pathtothisproject". Clone the submodules is important here: ```bash git clone --recurse-submodules https://git.rwth-aachen.de/isea/eisdata_analytics.git ```
- Install Python 3.11.9 (https://www.python.org/downloads/)
- Open a prompt and navigate to the path of this project
bash cd path_to_this_project Follow the instructions of the Python Read the Docs to create a virtual environment (venv) and activate it. E.g.:
Windowsbash python -m venv .venv .\.venv\Scripts\activateLinux / Macbash python -m venv .venv . .venv/bin/activateInstall all necessary packages with:
Windowsbash pip install -r requirements_windows.txtLinux / Macbash pip install -r requirements.txt(Optional) Clean up your venv:
bash python -m pip cache purgeOpen this project with a Jupyter-Notebook editor of your choice, e.g. VS Code (needs to be installed separately) with:
bash code
Microcontroller (µC)
The code is written for the NUCLEO-F429ZI by ST. The µC STM32F429 was also used by the foxBMS 1. Most of the custom code is optimized for the ARM Cortex-M4 core with a floating point unit (FPU) using the Common Microcontroller Software Interface Standard (CMSIS) library for vector operations. The following software versions are used during development: - STM32CubeIDE 1.16.1 - STM32CubeMX 6.12.1 - STM32Cube.AI 9.1.0 - STM32CubeFWF4_V1.28.1 - CMSIS 5.7.0 (including CMSIS-DSP 1.8.0)
See also the README.md in the microcontrollereisnetwork folder.
Example Usage
The Jupyter Notebooks contain details and step-by-step explanations. However, the data must first be analyzed.
1. adatapreparation.ipynb [Runtime with search_filters = ["LiFun_575166-01"] Intel i7-1265U: 4.8 hours; Intel W-2295: 1 hour]
2. bdatainspection.ipynb
Afterwards, Single-Input Single-Output (SISO), Multiple-Input Single-Output (MISO), and multiple-input multiple-output (MIMO) models can be fitted.
- dSISOLinear.ipynb
- eSISOElasticNet.ipynb
- fSISOSVC.ipynb
- gSISOSVR.ipynb
- hMISOLinear.ipynb
- iMISOElasticNet.ipynb
- jMISOSVC.ipynb
- kMISOSVR.ipynb
- lMISOMLPRegressor.ipynb
- mMIMOLinear.ipynb
- nMIMOMTElasticNet.ipynb
- oMIMOMultiOutputRegressor_SVR.ipynb
- pMIMOMLPRegressor.ipynb
Data
| Name Pattern | Temperature (°C) | SOC (%) | SOH (%) | Cite | | ------------------------------------- | ------------------------------ | -------------------------------------------------------- | ------------------- | ---------------------- | | LiFun_575166-01_* / "example_data" | -15, -5, 5, 15, 25, 35, 45, 55 | 0, 1, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 95, 99, 100 | ~117 to ~112 | 1 | | CATL_LEP71H3L7_01_* | 5, 15, 25, 35, 45, 55 | 0, 1, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 95, 99, 100 | 100 | 1 | | Rashid_Faraji-Niri_* | 15, 25, 35 | 5, 20, 50, 70, 95 | 100, 95, 90, 85, 80 | 2 | | Chan_Dickinson_Heins_* | 23 | 20, 35, 50, 65, 80, 100 | 100 to ~17 | 3 | | Mohtat_* | 25 | 0, 10, 20, 30, 40, 50, 60, 70, 80, 90 | 100 to 0 | 4 | | Zhang_Tang_* | 25, 35, 45 | 0, 50, 100 | 100 to 0 | 5 |
Not added yet:
| Name Pattern | Temperature (°C) | SOC (%) | SOH (%) | Cite | | ---------------- | -------------------- | ----------- | ----------- | ---------------------- | | Moy_Aadil_* | | | | 6 | | Luh_* | | | | 7 | | Mohtat_* | | | | 8 | | Naumann_* | | | | 9 |
Notes - LiFun_575166-01_* / "example_data": Cells are still aging, and data will be updated. - SOH (State of Health) values for LiFun_575166-01_*/example_data are nominal SOH values
See also the README.md in the exampleinputdata folder.
Temperature Estimation
A more detailed explanation can be found in the corresponding publication. 1
The cells “LiFun575166-01XXX.csv” in the exampleinputdata folder are used to develop an example SVR temperature estimation model.
1
The following results are obtained for three individual frequencies.
1
With the entire spectrum as input, the following errors can be obtained.
1
Verification
To verify the flexibility of the tool, the results of the publication "Accelerated state of health estimation of second life lithium-ion batteries via electrochemical impedance spectroscopy tests and machine learning techniques" by Mona Faraji-Niri et al. (https://doi.org/10.1016/j.est.2022.106295) on their dataset by Muhammad Rashid et al. (https://doi.org/10.1016/j.dib.2023.109157) is verified. Unlike their paper, we use the SVR to estimate the SOH. We used three different input combinations, 30.000 hyperparameter combinations were tested for each. Below, for each input combination, the best result.
SOH prediction based on Absolute Values of the Impedance
SOH prediction based on Absolute Values of the Impedance + Temperature + SOC
SOH prediction based on Absolute and Phase Values of the Impedance + Temperature + SOC
Colophon
Thanks to Spyridon, Xiaohan, Jacob, Anatolii, Niklas and Eren who supported us, Ole Kappelhoff , Sehriban Celik
and Alexander Blömeke
.
We use impedance.py for LinKK calculations and RC fitting: https://doi.org/10.21105/joss.02349. For DRT calculations, we use pyDRTtools: https://doi.org/10.1016/j.electacta.2019.135316.
Related Publications / Citation
Please cite our paper: https://doi.org/10.1016/j.jpowsour.2024.235049.
Overview of all archived versions of this git:
https://publications.rwth-aachen.de/record/997067.
If you use the EIS data from the exampleinputdata folder, please cite all relevant article.
License
This project is licensed according to the file LICENSE.
Acknowledgement
The authors acknowledge the financial support from the German Federal Ministry of Education and Research (BMBF) in the project OSLiB (project number 03XP0330C) within the competence cluster Battery Utilisation Concepts (BattNutzung).
Further Information
Developer Info
We use Git Large File Storage (LFS) and Git Submodules.
This project is written in Python 3.11.9 using Visual Studio Code and Jupyter Notebooks in a Python virtual environment on Windows. Ruff is used for formatting.
Git and Jupyter Notebooks
Consider to ignore the Jupyter Outputs in Git:
bash
git config filter.strip-notebook-output.clean 'jupyter nbconvert --ClearOutputPreprocessor.enabled=True --to=notebook --stdin --stdout --log-level=ERROR'
FAQ
- pywin32 fails: https://github.com/microsoft/vscode-jupyter/wiki/Failure-to-start-kernel-due-to-failures-related-to-win32api-module
- generalfunv8 can't be found: Make sure you loaded the submodule. See step 1. at Getting Started
- Files are empty dummies: We use Git LFS. Normally, a normal pull should also trigger this. Additionally, you can try:
git lfs pull. - I want to run the hyperparameter search in parallel: It is recommended that you use Linux/WSL for this. Make sure you install Java.
Sources
[1] https://doi.org/10.1016/j.jpowsour.2024.235049
[2] https://doi.org/10.1016/j.est.2022.106295
[3] https://doi.org/10.1016/j.jpowsour.2022.231814
[4] https://doi.org/10.1149/1945-7111/ac2d3e
[5] https://doi.org/10.1038/s41467-020-15235-7
[6] https://doi.org/10.1016/j.dib.2024.111046
[7] https://doi.org/10.1038/s41597-024-03831-x
[8] https://doi.org/10.1149/1945-7111/ac2d3e
[9] https://doi.org/10.1016/j.jpowsour.2019.227666
Owner
- Name: Institute for Power Electronics and Electrical Drives, RWTH Aachen University
- Login: isea-rwth-aachen
- Kind: organization
- Location: Germany
- Website: https://www.isea.rwth-aachen.de/
- Repositories: 1
- Profile: https://github.com/isea-rwth-aachen
Citation (CITATION.cff)
cff-version: 1.2.0
title: EIS Data Analytics
message: 'If you use this software, please cite it as below.'
type: software
authors:
- given-names: Alexander
family-names: Blömeke
orcid: 'https://orcid.org/0000-0003-0943-9485'
- given-names: Ole
family-names: Kappelhoff
orcid: 'https://orcid.org/0000-0001-8394-5859'
- given-names: Dirk Uwe
family-names: Sauer
orcid: 'https://orcid.org/0000-0002-5622-3591'
identifiers:
- type: doi
value: 10.18154/RWTH-2024-10988
repository-code: 'https://git.rwth-aachen.de/isea/eis_data_analytics'
license: MIT
date-released: '2024-11-22'
GitHub Events
Total
- Push event: 2
- Create event: 1
Last Year
- Push event: 2
- Create event: 1
Dependencies
- Flask ==3.0.2
- GitPython ==3.1.42
- Jinja2 ==3.1.3
- Mako ==1.3.2
- Markdown ==3.6
- MarkupSafe ==2.1.5
- PyYAML ==6.0.1
- Pygments ==2.17.2
- SQLAlchemy ==2.0.29
- Werkzeug ==3.0.1
- alembic ==1.13.1
- altair ==5.2.0
- aniso8601 ==9.0.1
- asttokens ==2.4.1
- attrs ==23.2.0
- blinker ==1.7.0
- certifi ==2024.2.2
- charset-normalizer ==3.3.2
- clarabel ==0.7.1
- click ==8.1.7
- cloudpickle ==3.0.0
- colorama ==0.4.6
- comm ==0.2.2
- contourpy ==1.2.0
- cvxopt ==1.3.2
- cvxpy ==1.4.2
- cycler ==0.12.1
- debugpy ==1.8.1
- decorator ==5.1.1
- docker ==7.0.0
- ecos ==2.0.13
- entrypoints ==0.4
- executing ==2.0.1
- fonttools ==4.50.0
- future ==1.0.0
- gitdb ==4.0.11
- graphene ==3.3
- graphql-core ==3.2.3
- graphql-relay ==3.2.0
- greenlet ==3.0.3
- hyperopt ==0.2.7
- idna ==3.6
- impedance ==1.7.1
- importlib_metadata ==7.1.0
- ipykernel ==6.29.4
- ipympl ==0.9.3
- ipython ==8.22.2
- ipython-genutils ==0.2.0
- ipywidgets ==8.1.2
- itsdangerous ==2.1.2
- jedi ==0.19.1
- joblib ==1.3.2
- jsonschema ==4.21.1
- jsonschema-specifications ==2023.12.1
- jupyter_client ==8.6.1
- jupyter_core ==5.7.2
- jupyterlab_widgets ==3.0.10
- kiwisolver ==1.4.5
- matplotlib ==3.8.3
- matplotlib-inline ==0.1.6
- mlflow ==2.11.3
- nest-asyncio ==1.6.0
- networkx ==3.2.1
- numpy ==1.26.4
- osqp ==0.6.5
- packaging ==23.2
- pandas ==2.2.1
- parso ==0.8.3
- pillow ==10.2.0
- platformdirs ==4.2.0
- prompt-toolkit ==3.0.43
- protobuf ==4.25.3
- psutil ==5.9.8
- pure-eval ==0.2.2
- py4j ==0.10.9.7
- pyarrow ==15.0.2
- pybind11 ==2.12.0
- pyparsing ==3.1.2
- python-dateutil ==2.9.0.post0
- pytz ==2024.1
- pyzmq ==25.1.2
- qdldl ==0.1.7.post0
- querystring-parser ==1.2.4
- referencing ==0.34.0
- requests ==2.31.0
- rpds-py ==0.18.0
- rwth-CD-colors ==0.1.1
- scikit-learn ==1.4.1.post1
- scipy ==1.11.4
- scs ==3.2.4.post1
- seaborn ==0.13.2
- six ==1.16.0
- smmap ==5.0.1
- sqlparse ==0.4.4
- stack-data ==0.6.3
- threadpoolctl ==3.4.0
- toolz ==0.12.1
- tornado ==6.4
- tqdm ==4.66.2
- traitlets ==5.14.2
- typing_extensions ==4.10.0
- tzdata ==2024.1
- urllib3 ==2.2.1
- waitress ==3.0.0
- wcwidth ==0.2.13
- widgetsnbextension ==4.0.10
- zipp ==3.18.1
- Flask ==3.0.2
- GitPython ==3.1.42
- Jinja2 ==3.1.3
- Mako ==1.3.2
- Markdown ==3.6
- MarkupSafe ==2.1.5
- PyYAML ==6.0.1
- Pygments ==2.17.2
- SQLAlchemy ==2.0.29
- Werkzeug ==3.0.1
- alembic ==1.13.1
- altair ==5.2.0
- aniso8601 ==9.0.1
- asttokens ==2.4.1
- attrs ==23.2.0
- blinker ==1.7.0
- certifi ==2024.2.2
- charset-normalizer ==3.3.2
- clarabel ==0.7.1
- click ==8.1.7
- cloudpickle ==3.0.0
- colorama ==0.4.6
- comm ==0.2.2
- contourpy ==1.2.0
- cvxopt ==1.3.2
- cvxpy ==1.4.2
- cycler ==0.12.1
- debugpy ==1.8.1
- decorator ==5.1.1
- docker ==7.0.0
- ecos ==2.0.13
- entrypoints ==0.4
- executing ==2.0.1
- fonttools ==4.50.0
- future ==1.0.0
- gitdb ==4.0.11
- graphene ==3.3
- graphql-core ==3.2.3
- graphql-relay ==3.2.0
- greenlet ==3.0.3
- hyperopt ==0.2.7
- idna ==3.6
- impedance ==1.7.1
- importlib_metadata ==7.1.0
- ipykernel ==6.29.4
- ipympl ==0.9.3
- ipython ==8.22.2
- ipython-genutils ==0.2.0
- ipywidgets ==8.1.2
- itsdangerous ==2.1.2
- jedi ==0.19.1
- joblib ==1.3.2
- jsonschema ==4.21.1
- jsonschema-specifications ==2023.12.1
- jupyter_client ==8.6.1
- jupyter_core ==5.7.2
- jupyterlab_widgets ==3.0.10
- kiwisolver ==1.4.5
- matplotlib ==3.8.3
- matplotlib-inline ==0.1.6
- mlflow ==2.11.3
- nest-asyncio ==1.6.0
- networkx ==3.2.1
- numpy ==1.26.4
- osqp ==0.6.5
- packaging ==23.2
- pandas ==2.2.1
- parso ==0.8.3
- pillow ==10.2.0
- platformdirs ==4.2.0
- prompt-toolkit ==3.0.43
- protobuf ==4.25.3
- psutil ==5.9.8
- pure-eval ==0.2.2
- py4j ==0.10.9.7
- pyarrow ==15.0.2
- pybind11 ==2.12.0
- pyparsing ==3.1.2
- python-dateutil ==2.9.0.post0
- pytz ==2024.1
- pywin32 ==306
- pyzmq ==25.1.2
- qdldl ==0.1.7.post0
- querystring-parser ==1.2.4
- referencing ==0.34.0
- requests ==2.31.0
- rpds-py ==0.18.0
- rwth-CD-colors ==0.1.1
- scikit-learn ==1.4.1.post1
- scipy ==1.11.4
- scs ==3.2.4.post1
- seaborn ==0.13.2
- six ==1.16.0
- smmap ==5.0.1
- sqlparse ==0.4.4
- stack-data ==0.6.3
- threadpoolctl ==3.4.0
- toolz ==0.12.1
- tornado ==6.4
- tqdm ==4.66.2
- traitlets ==5.14.2
- typing_extensions ==4.10.0
- tzdata ==2024.1
- urllib3 ==2.2.1
- waitress ==3.0.0
- wcwidth ==0.2.13
- widgetsnbextension ==4.0.10
- zipp ==3.18.1