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.

https://github.com/isea-rwth-aachen/eis-data-analytics

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
Last synced: 6 months ago · JSON representation ·

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
Statistics
  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • Open Issues: 0
  • Releases: 0
Created almost 2 years ago · Last pushed 7 months ago
Metadata Files
Readme License Citation

README.md

EIS Data Analytics

CARL Logo

License: MIT Binder

EIS Data Analytics is a collection of code to analyze which fitting approach is suitable for your electrochemical impedance spectroscopy (EIS) data.
Graphical Abstract [1] 1

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: Binder .
If you want to process a lot of data or run it on the microcontroller, please run it on your hardware.

Python

  1. 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 ```
  2. Install Python 3.11.9 (https://www.python.org/downloads/)
  3. Open a prompt and navigate to the path of this project bash cd path_to_this_project
  4. Follow the instructions of the Python Read the Docs to create a virtual environment (venv) and activate it. E.g.:
    Windows bash python -m venv .venv .\.venv\Scripts\activate Linux / Mac bash python -m venv .venv . .venv/bin/activate

  5. Install all necessary packages with:
    Windows bash pip install -r requirements_windows.txt Linux / Mac bash pip install -r requirements.txt

  6. (Optional) Clean up your venv: bash python -m pip cache purge

  7. Open 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.

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. Example Data Bode [1] 1
The following results are obtained for three individual frequencies.
EIS Temperature Estimation SVR, Input: one frequency [1] 1
With the entire spectrum as input, the following errors can be obtained.
EIS Temperature Estimation SVR, Input: all frequencies [1] 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 Result SOH prediction based on Absolute Values of the Impedance Hyperparameter

SOH prediction based on Absolute Values of the Impedance + Temperature + SOC SOH prediction based on Absolute Values of the Impedance Result SOH prediction based on Absolute Values of the Impedance Hyperparameter

SOH prediction based on Absolute and Phase Values of the Impedance + Temperature + SOC SOH prediction based on Absolute Values of the Impedance Result SOH prediction based on Absolute Values of the Impedance Hyperparameter

Colophon

Thanks to Spyridon, Xiaohan, Jacob, Anatolii, Niklas and Eren who supported us, Ole Kappelhoff ORCID Logo, Sehriban Celik ORCID Logo and Alexander Blömeke ORCID Logo.

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).

BMBF Logo OSLiB Logo

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

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

requirements.txt pypi
  • 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
requirements_windows.txt pypi
  • 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