{ "cells": [ { "cell_type": "markdown", "id": "e07f935d-95ef-4800-9a40-c9d81ef9829c", "metadata": {}, "source": [ "# Demonstrate ECM Extractors\n", "The ECM extractors assemble the required components for Equivalent Circuit model using reference performance test data." ] }, { "cell_type": "code", "execution_count": 1, "id": "87266500-4323-4018-acab-3e19ab881055", "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "from matplotlib import pyplot as plt\n", "from battdat.data import BatteryDataset, CellDataset\n", "import numpy as np" ] }, { "cell_type": "markdown", "id": "e307cdf3-b0a3-4410-adf6-ada0b0f0e47a", "metadata": {}, "source": [ "## Load an Example Dataset\n", "We use an example RPT cycle from [the CAMP 2023 dataset](https://github.com/materials-data-facility/publishing-battery-data) to demonstrate parameter extraction" ] }, { "cell_type": "code", "execution_count": 2, "id": "3f0648ea-d725-4b81-ba2f-323cae3399d9", "metadata": {}, "outputs": [], "source": [ "data = BatteryDataset.from_hdf('files/example-camp-rpt.h5')" ] }, { "cell_type": "code", "execution_count": 3, "id": "68c1f387-d690-4467-ac71-0ccfad962451", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
cycle_numberfile_numbertest_timestatecurrentvoltagestep_indexmethodsubstep_indexcycle_capacitycycle_energy
010120.042b'charging'0.2605483.4500650b'constant_current'00.0000000.000000
110139.182b'charging'0.2600903.4702070b'constant_current'00.0013840.004789
210439.182b'charging'0.2600143.4872970b'constant_current'00.0230550.080177
310739.182b'charging'0.2599373.4935530b'constant_current'00.0447200.155796
4101039.182b'charging'0.2601663.4998090b'constant_current'00.0663910.231572
....................................
1801041767.320b'hold'0.0000003.2721453b'rest'8-0.0276650.011427
1811041777.322b'hold'0.0000003.2768753b'rest'8-0.0276650.011427
1821041787.318b'hold'0.0000003.2809953b'rest'8-0.0276650.011427
1831041797.320b'hold'0.0000003.2845043b'rest'8-0.0276650.011427
1841041807.310b'hold'0.0000003.2875563b'rest'8-0.0276650.011427
\n", "

185 rows × 11 columns

\n", "
" ], "text/plain": [ " cycle_number file_number test_time state current voltage \\\n", "0 1 0 120.042 b'charging' 0.260548 3.450065 \n", "1 1 0 139.182 b'charging' 0.260090 3.470207 \n", "2 1 0 439.182 b'charging' 0.260014 3.487297 \n", "3 1 0 739.182 b'charging' 0.259937 3.493553 \n", "4 1 0 1039.182 b'charging' 0.260166 3.499809 \n", ".. ... ... ... ... ... ... \n", "180 1 0 41767.320 b'hold' 0.000000 3.272145 \n", "181 1 0 41777.322 b'hold' 0.000000 3.276875 \n", "182 1 0 41787.318 b'hold' 0.000000 3.280995 \n", "183 1 0 41797.320 b'hold' 0.000000 3.284504 \n", "184 1 0 41807.310 b'hold' 0.000000 3.287556 \n", "\n", " step_index method substep_index cycle_capacity \\\n", "0 0 b'constant_current' 0 0.000000 \n", "1 0 b'constant_current' 0 0.001384 \n", "2 0 b'constant_current' 0 0.023055 \n", "3 0 b'constant_current' 0 0.044720 \n", "4 0 b'constant_current' 0 0.066391 \n", ".. ... ... ... ... \n", "180 3 b'rest' 8 -0.027665 \n", "181 3 b'rest' 8 -0.027665 \n", "182 3 b'rest' 8 -0.027665 \n", "183 3 b'rest' 8 -0.027665 \n", "184 3 b'rest' 8 -0.027665 \n", "\n", " cycle_energy \n", "0 0.000000 \n", "1 0.004789 \n", "2 0.080177 \n", "3 0.155796 \n", "4 0.231572 \n", ".. ... \n", "180 0.011427 \n", "181 0.011427 \n", "182 0.011427 \n", "183 0.011427 \n", "184 0.011427 \n", "\n", "[185 rows x 11 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.tables['raw_data']" ] }, { "cell_type": "markdown", "id": "a419ddf8-58b3-4895-b0ec-86b3996fe6cf", "metadata": {}, "source": [ "The dataset contain a single slow cycle that samples the entire capacity of the cell." ] }, { "cell_type": "code", "execution_count": 4, "id": "95cfe761-93af-4b71-9766-e9fc49b3587b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 0, 'Time (hr)')" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, axs = plt.subplots(2, 1, figsize=(3.5, 3.), sharex=True)\n", "\n", "raw_data = data.tables['raw_data']\n", "time = (raw_data['test_time'] - raw_data['test_time'].min()) / 3600\n", "axs[0].plot(time, raw_data['voltage'])\n", "axs[0].set_ylabel('Voltage (V)')\n", "axs[1].plot(time, raw_data['current'])\n", "axs[1].set_ylabel('Current (A)')\n", "axs[1].set_xlabel('Time (hr)')" ] }, { "cell_type": "markdown", "id": "02a62609-216e-4374-be9b-785aafcd34c1", "metadata": {}, "source": [ "## Determining Capacity\n", "The `MaxCapacityExtractor` determines capacity by integrating current over time then measuring difference between the maximum and minimum change in charge state.\n", "\n", "\n", "> Note: Integration is actually [implemented in battdat](https://rovi-org.github.io/battery-data-toolkit/user-guide/post-processing/cell-capacity.html#Step-3:-Assign-Capacities)." ] }, { "cell_type": "code", "execution_count": 5, "id": "5892628e-1d5b-4c2c-9e91-6d9babb1d6a0", "metadata": {}, "outputs": [], "source": [ "from moirae.extractors.ecm import MaxCapacityExtractor" ] }, { "cell_type": "code", "execution_count": 6, "id": "bcb73bb2-16ce-4701-9919-1838e51d0d09", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "MaxTheoreticalCapacity(updatable=set(), base_values=array([[1.48220808]]))" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cap = MaxCapacityExtractor().extract(data)\n", "cap" ] }, { "cell_type": "markdown", "id": "158a7797-991f-4f0f-934b-ffcf982c512f", "metadata": {}, "source": [ "This should match up with the measured change in charge" ] }, { "cell_type": "code", "execution_count": 7, "id": "7b6bb999-2fe6-4648-aa55-4d9f6d04d3a4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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v9RHeNV24sQJwsPDiY6O5vHHH+f06dNVbutu1wjK/i++++67jBw58roFglz9Ov239PR0srOzy10LPz8/unXrVuW1qMnvpKtp9In1woULqKpaoc5BSEgI2dnZle6TnZ1t1/bOpGkakydP5s4777zuvGBt27blnXfe4ZNPPuHdd99F0zR69OjBmTNn6jHaqnXr1o2kpCS+/PJLli9fTnp6OnfffbetDOTvudM1uubjjz/m0qVLJCYmVrmNq1+n37v2723PtajJ76SrqfVkgpJrGz9+PEePHr1ueyRA9+7d6d69u+19jx49uOmmm1i5ciVz5syp6zBvqG/fvrafb731Vrp160ZkZCTvv/8+o0aNcmJkjrN69Wr69u1LeHh4ldu4+nWSyjT6O9agoCD0ej05OTnllufk5BAaGlrpPqGhoXZt7ywTJkzgs88+Y9u2bbRs2dKufY1GI/Hx8aSmptZRdLXj7+9PXFxclfG5yzW65tSpU3z77beMHj3arv1c/Tpd+/e251rU5HfS1TT6xGoymbjtttvYsmWLbZmmaWzZsqXcncF/6969e7ntAb755psqt69vQggmTJjARx99xNatW4mKirL7GKqqcuTIEZedFaKwsJC0tLQq43P1a/R7a9asITg4mH79+tm1n6tfp6ioKEJDQ8tdi4KCAn744Ycqr0VNfiddjrOfnrmCf/3rX8LDw0MkJSWJY8eOiSeeeEL4+/uL7OxsIYQQQ4cOFdOmTbNtv3v3bmEwGMQbb7whkpOTxaxZs4TRaBRHjhxx1imUM27cOOHn5ye2b98usrKybK/i4mLbNr8/p9mzZ4uvvvpKpKWliQMHDohHH31UeHp6il9++cUZp1DB1KlTxfbt20V6errYvXu36N27twgKChK5ublCCPe7Rv9NVVXRqlUr8eyzz1ZY5w7X6fLly+Knn34SP/30kwDEggULxE8//SROnTolhBDilVdeEf7+/uKTTz4RP//8sxgwYICIiooSJSUltmPcd999YsmSJbb3N/qddHUysV61ZMkS0apVK2EymUTXrl3F3r17bet69uwphg8fXm77999/X8TFxQmTySTat28vPv/883qOuGpApa81a9bYtvn9OU2ePNl2/iEhIeLBBx8UBw8erP/gqzB48GARFhYmTCaTaNGihRg8eLBITU21rXe3a/TfvvrqKwGIX3/9tcI6d7hO27Ztq/T/27W4NU0TM2bMECEhIcLDw0P06tWrwrlGRkaKWbNmlVt2vd9JVyfLBkqSJDlYo29jlSRJcjSZWCVJkhxMJlZJkiQHk4lVkiTJwWRilSRJcjCZWCVJkhxMJlZJkiQHk4lVkiTJwWRildxSYmIiAwcOdNrnDx06lLlz59ret27dmoULF9p9nC+//JJOnTqhaZoDo5OcTSZWyeVUNgfUf79eeOEFFi1aRFJSklPiO3z4MF988QVPPfVUrY/1wAMPYDQa+ec//+mAyCRXIeuxSi4nKyvL9vOGDRuYOXNmuckQmzZtStOmTZ0RGgBLlizhkUceqXUMFosFo9FIYmIiixcvZujQoQ6KUHI2eccquZzQ0FDby8/PD0VRyi1r2rRphaaAe+65h4kTJzJ58mQCAgIICQnh7bffpqioiBEjRuDj40NMTAz//ve/y33W0aNH6du3L02bNiUkJIShQ4dy4cKFKmNTVZUPPviA/v37V1hXXFzMyJEj8fHxoVWrVrz11lu2dRkZGSiKwoYNG+jZsyeenp62u9T+/fuzf/9+0tLSavkvJ7kKmVilBmPt2rUEBQXx448/MnHiRMaNG8cjjzxCjx49OHjwIH369GHo0KEUFxcDcOnSJe677z7i4+PZv38/X375JTk5OQwaNKjKz/j555/Jz8+nS5cuFdbNnz+fLl268NNPP/HXv/6VcePGVZh2fNq0aUyaNInk5GQSEhIAaNWqFSEhIXz33XcO/NeQnMrZ5bUk6XqqmpV0+PDhYsCAAbb3PXv2FHfddZftvdVqFd7e3mLo0KG2ZVlZWQIQe/bsEUIIMWfOHNGnT59yx83MzKyyhJ8QQnz00UdCr9dXmEU1MjJS/OUvf7G91zRNBAcHi+XLlwshhEhPTxeAWLhwYaXHjY+PFy+88EKl6yT3I9tYpQbj1ltvtf2s1+tp1qwZHTp0sC27NjndtbnpDx8+zLZt2yptK01LSyMuLq7C8pKSEjw8PCqdRfW/P/9a88W1z7qmsjtdAC8vL9udtOT+ZGKVGgyj0VjuvaIo5ZZdS4bXujYVFhbSv39/Xn311QrHqmqqk6CgIIqLizGbzZhMpht+/u+7UXl7e1d63Ly8PJo3b17pOsn9yMQqNVqdO3dm06ZNtG7dGoOher8KnTp1AuDYsWO2n2vrypUrpKWlER8f75DjSc4nH15Jjdb48ePJy8tjyJAh7Nu3j7S0NL766itGjBiBqqqV7tO8eXM6d+58w+nE7bF37148PDzcZ6I86YZkYpUarfDwcHbv3o2qqvTp04cOHTowefJk/P390emq/tUYPXq0Qzv0r1+/nscff5wmTZo47JiSc8k5ryTJTiUlJbRt25YNGzbU+i7zwoULtG3blv3799domnLJNck7Vkmyk5eXF+vWrbvuQILqysjI4M0335RJtYGRd6ySJEkOJu9YJUmSHEwmVkmSJAeTiVWSJMnBZGKVJElyMJlYJUmSHEwmVkmSJAeTiVWSJMnBZGKVJElyMJlYJUmSHOz/AemtOAKtfkq2AAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(3.5, 2.))\n", "\n", "ax.plot(time, raw_data['cycle_capacity'])\n", "ax.set_xlim(ax.get_xlim())\n", "ax.set_ylabel('Capacity Change (A-hr)')\n", "ax.set_xlabel('Time (hr)')\n", "\n", "min_cap, max_cap = raw_data['cycle_capacity'].min(), raw_data['cycle_capacity'].max()\n", "ax.fill_between(ax.get_xlim(), min_cap, max_cap, alpha=0.5, color='red', edgecolor='none')\n" ] }, { "cell_type": "markdown", "id": "bee06bc8-d8ae-4ff7-a8b6-bb0a1650fbf8", "metadata": {}, "source": [ "The width of the colored span is the estimated capacity and it spans from the lowest capacity (\\~11hr) and the highest (\\~6hr)" ] }, { "cell_type": "markdown", "id": "294433d7-87d3-4b1a-afd7-f530674125af", "metadata": {}, "source": [ "## Open-Circuit Voltage Estimation\n", "The `OCVExtractor` determines the Open Circuit Voltage by fitting a spline to voltage as a function of state of charge.\n", "\n", "The first step is to compute the SOC from the capacity change during the cycle and the total capacity estimated by `MaxCapacityExtractor`.\n", "As the actual state of charge cannot be directly measured, we assume the lowest capacity change is an SOC of 0." ] }, { "cell_type": "code", "execution_count": 8, "id": "48838946-1aee-44a2-9968-bccb58a35e8d", "metadata": {}, "outputs": [], "source": [ "raw_data['soc'] = (raw_data['cycle_capacity'] - raw_data['cycle_capacity'].min()) / cap.base_values.item()" ] }, { "cell_type": "code", "execution_count": 9, "id": "8a01d728-d9ca-4e5d-be26-9da069c8c08f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 0, 'SOC')" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(3.5, 2.))\n", "\n", "ax.plot(raw_data['soc'], raw_data['voltage'])\n", "ax.set_ylabel('Voltage (V)')\n", "ax.set_xlabel('SOC')" ] }, { "cell_type": "markdown", "id": "54f62b42-5c23-46c3-8601-c6f85754fea5", "metadata": {}, "source": [ "The voltage during charge and discharge are different. Moirae accounts for this by weighing points with lower current more strongly and fitting a [smoothing spline](https://docs.scipy.org/doc/scipy/tutorial/interpolate/smoothing_splines.html#object-oriented-univariatespline).\n", "\n", "> Note: Make the spline fit data more closely by increating the number of SOC points" ] }, { "cell_type": "code", "execution_count": 10, "id": "fb809c0d-adcc-4b9b-8fc5-214c455a0fca", "metadata": {}, "outputs": [], "source": [ "from moirae.extractors.ecm import OCVExtractor\n", "ocv = OCVExtractor(capacity=cap).extract(data)" ] }, { "cell_type": "code", "execution_count": 11, "id": "f9cd15a3-f8f2-46f2-9baf-1720710bd243", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(3.5, 2.))\n", "\n", "ax.plot(raw_data['soc'], raw_data['voltage'], label='Data')\n", "soc = np.linspace(0, 1, 64)\n", "fit = ocv(soc)\n", "ax.plot(soc, fit[0, 0, :], 'r--', label='OCV')\n", "ax.set_ylabel('Voltage (V)')\n", "ax.set_xlabel('SOC')\n", "\n", "ax.legend()" ] }, { "cell_type": "markdown", "id": "fbbecd43-e974-4f95-b139-63a0ccff291f", "metadata": {}, "source": [ "This yields a generally-good representation of the OCV." ] }, { "cell_type": "markdown", "id": "5482cb53-79d2-4bf3-a561-cb10aae2b3ea", "metadata": {}, "source": [ "## Instantaneous Resistance (R0) Extractor\n", "The `R0Extractor` estimates the instantaneous resistance in the battery as a function of SOC from current steps observed in the current-voltage-time data.\n", "\n", "We need to load a CellDataset that contains such details to demonstrate the usage of the extractor. In this case, we use a simulated dataset that represents a hybrid pulse power characterization test commonly used for electric vehicles." ] }, { "cell_type": "code", "execution_count": 12, "id": "39ddf4f8-e806-4e79-af25-0156e22f377f", "metadata": {}, "outputs": [], "source": [ "data = BatteryDataset.from_hdf('files/hppc.h5')\n", "data.tables['raw_data']['state'] = data.tables['raw_data']['state'].str.decode('utf-8')" ] }, { "cell_type": "markdown", "id": "bf86469b-72c0-4b2e-83e2-284d2c8085a2", "metadata": {}, "source": [ "First, we visualize the simulated data:" ] }, { "cell_type": "code", "execution_count": 13, "id": "4a3e45eb-595a-4e6d-9663-4c7f458618d2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 0, 'Time (hr)')" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, axs = plt.subplots(2, 1, figsize=(3.5, 3.), sharex=True)\n", "\n", "raw_data = data.tables['raw_data']\n", "time = (raw_data['test_time'] - raw_data['test_time'].min()) / 3600\n", "axs[0].plot(time, raw_data['voltage'])\n", "axs[0].set_ylabel('Voltage (V)')\n", "axs[1].plot(time, raw_data['current'])\n", "axs[1].set_ylabel('Current (A)')\n", "axs[1].set_xlabel('Time (hr)')" ] }, { "cell_type": "markdown", "id": "8c6f9f03-decb-4405-91a4-ca9d46cfa403", "metadata": {}, "source": [ "Now we employ the extractor to identify the current steps observed in the raw data and estimate the resistance as a function of SOC. The extractor takes as input an optional parameter, `dt_max`, that determines the maximum allowable timestep for the computation of the R0. We set this to 11 seconds, as the data collection frequency for the dataset is 10 seconds. In real applications, a much smaller `dt_max` is recommended." ] }, { "cell_type": "code", "execution_count": 14, "id": "829a0cc0-7b42-4e99-83d3-52d1f1afce6d", "metadata": {}, "outputs": [], "source": [ "from moirae.extractors.ecm import R0Extractor\n", "ext = R0Extractor(capacity=10, dt_max=11)\n", "r0 = ext.extract(data)" ] }, { "cell_type": "code", "execution_count": 15, "id": "e8952740-da78-4b2f-923d-e67c468cf582", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(3.5, 2.))\n", "soc = np.linspace(0, 1, 64)\n", "fit = r0.get_value(soc)\n", "ax.plot(soc, 0.05*np.ones(soc.shape), 'b-', label='ground truth')\n", "ax.plot(soc, fit[0, 0, :], 'r--', label='fit')\n", "ax.set_ylabel('R0 (Ohms)')\n", "ax.set_xlabel('SOC')\n", "ax.set_xlim(0, 1)\n", "ax.set_ylim(0, 0.07)\n", "ax.legend()" ] }, { "cell_type": "markdown", "id": "b6f45d96-58eb-482f-8165-60e1dc4a9cab", "metadata": {}, "source": [ "The extracted R0 is close to the ground truth, with less than 1% error across the SOC range." ] }, { "cell_type": "markdown", "id": "df6220e7-7e67-4bf8-a25b-3ff1516e94a6", "metadata": {}, "source": [ "## Resistor-Capacitor (RC) Couple Extractor\n", "The `RCExtractor` estimates the parameters of the RC couples as a function of SOC from post-discharge or charge rests observed in the current-voltage-time data.\n", "\n", "We will load a version of the HPPC dataset used for the previous example that contains a single RC pair and higher sampling rate." ] }, { "cell_type": "code", "execution_count": 16, "id": "eebea6cc-2373-4bbe-bdda-c5f479f0feff", "metadata": {}, "outputs": [], "source": [ "data = CellDataset.from_hdf('files/hppc_1rc.h5')\n", "data.tables['raw_data']['state'] = data.tables['raw_data']['state'].str.decode('utf-8')" ] }, { "cell_type": "markdown", "id": "124b9909-e1e7-433e-82c6-ce8f5cfd1f9c", "metadata": {}, "source": [ "First, we visualize the simulated data:" ] }, { "cell_type": "code", "execution_count": 17, "id": "0cdb4024-60c5-42a4-a54f-7cf768d7d667", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 0, 'Time (hrs)')" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, axs = plt.subplots(2, 1, figsize=(3.5, 3.), sharex=True)\n", "\n", "raw_data = data.tables['raw_data']\n", "time = (raw_data['test_time'] - raw_data['test_time'].min()) / 3600\n", "axs[0].plot(time, raw_data['voltage'])\n", "axs[0].set_ylabel('Voltage (V)')\n", "axs[1].plot(time, raw_data['current'])\n", "axs[1].set_ylabel('Current (A)')\n", "axs[1].set_xlabel('Time (hr)')\n", "\n", "fig, ax = plt.subplots(figsize=(3.5, 2.))\n", "ax.plot(time.iloc[50000:52000], raw_data['voltage'].iloc[50000:52000])\n", "ax.set_ylabel('Voltage (V)')\n", "ax.set_xlabel('Time (hrs)')" ] }, { "cell_type": "markdown", "id": "5187e153-940a-44dd-ad00-0ba0be6fa241", "metadata": {}, "source": [ "Now we employ the extractor to identify the relevant rests observed in the raw data and estimate the RC parameters as a function of SOC." ] }, { "cell_type": "code", "execution_count": 18, "id": "fe05233b-a4da-4cda-99a7-f53b1ec354c5", "metadata": {}, "outputs": [], "source": [ "from moirae.extractors.ecm import RCExtractor\n", "from battdat.postprocess.integral import StateOfCharge, CapacityPerCycle\n", "ext = RCExtractor(capacity=10)\n", "StateOfCharge().enhance(data.tables['raw_data'])\n", "rc = ext.extract(data)" ] }, { "cell_type": "code", "execution_count": 19, "id": "e4246550-570c-494c-8611-456b977e8fed", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(0.0, 3000.0)" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, axs = plt.subplots(2, 1, figsize=(3.5, 4.))\n", "\n", "soc = np.linspace(0, 1, 64)\n", "fit = rc[0].get_value(soc)\n", "\n", "axs[0].plot(soc, 0.01*np.ones(soc.shape), 'b-', label='ground truth')\n", "axs[0].plot(soc, np.squeeze(fit[0]), 'r--', label='fit')\n", "axs[0].set_ylabel('R (Ohms)')\n", "axs[0].set_xlabel('SOC')\n", "axs[0].set_xlim(0, 1)\n", "axs[0].set_ylim(0, 0.013)\n", "axs[0].legend()\n", "\n", "axs[1].plot(soc, 2500*np.ones(soc.shape), 'b-')\n", "axs[1].plot(soc, np.squeeze(fit[1]), 'r--')\n", "axs[1].set_ylabel('F (Farads)')\n", "axs[1].set_xlabel('SOC')\n", "axs[1].set_xlim(0, 1)\n", "axs[1].set_ylim(0, 3000)" ] }, { "cell_type": "code", "execution_count": null, "id": "6e9adc94-54e9-4600-800c-e74c411511e7", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.16" } }, "nbformat": 4, "nbformat_minor": 5 }