{ "cells": [ { "cell_type": "markdown", "id": "b1ac7dbd-41fd-48c6-95f5-09740ccebdf6", "metadata": {}, "source": [ "# Tuning ECM Models with Online Estimation\n", "This tutorial describes how to monitor battery health with online estimation \n", "if you already know an Equivalent Circuit Model (ECM) for its behavior." ] }, { "cell_type": "markdown", "id": "f55b612a-b45c-4adc-ba1c-96200a03f04e", "metadata": {}, "source": [ "## Load Example Data\n", "We'll use the data from a simple battery model as a demonstration" ] }, { "cell_type": "code", "execution_count": 1, "id": "44ac381d-337e-4675-8ea7-5ae8250f6609", "metadata": {}, "outputs": [], "source": [ "from pathlib import Path\n", "from shutil import copyfileobj\n", "import requests" ] }, { "cell_type": "code", "execution_count": 2, "id": "bbc57d6d-5ad4-4dc8-afda-7d7ac2aadc1f", "metadata": {}, "outputs": [], "source": [ "data_url = 'https://github.com/ROVI-org/battery-data-toolkit/raw/refs/heads/main/tests/files/example-data/single-resistor-complex-charge_from-discharged.hdf'\n", "data_path = Path('files') / 'complex-cycle-data.hdf'" ] }, { "cell_type": "code", "execution_count": 3, "id": "adab61c1-ccac-44c1-a289-b834b96a9c62", "metadata": {}, "outputs": [], "source": [ "if not data_path.is_file():\n", " data_path.parent.mkdir(exist_ok=True)\n", " data_path.write_bytes(requests.get(data_url).content)" ] }, { "cell_type": "markdown", "id": "c55101f8-e320-4d05-b82d-b419492ed57b", "metadata": {}, "source": [ "Load it as a battery-data-toolkit dataset object" ] }, { "cell_type": "code", "execution_count": 4, "id": "58755da2-551f-49b2-bb86-8527eee7013c", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/lward/miniconda3/envs/moirae/lib/python3.10/site-packages/battdat/data.py:57: UserWarning: Metadata was created in a different version of battdat. supplied=0.4.0, current=0.4.1.\n", " warnings.warn(f'Metadata was created in a different version of battdat. supplied={supplied_version}, current={__version__}.')\n" ] } ], "source": [ "from battdat.data import CellDataset\n", "data = CellDataset.from_hdf(data_path)" ] }, { "cell_type": "code", "execution_count": 5, "id": "39577c65-e1f9-4cd7-b85b-864a40959ebc", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAVQAAAC+CAYAAABqOvflAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAOu5JREFUeJztnXdck1f7/z8ZjAAhKluQ5UARVDa4kKporVVb27oqUhWLVdvqY62jraM/RVtr7RIVFevEfqu29KmPSq1gHYAMi4ioKAgiiIAM2UnO74+QSAQ0CQkZnPfrdb80J+c+93UIfHKddV0MQggBhUKhUDoMU90GUCgUiq5ABZVCoVCUBBVUCoVCURJUUCkUCkVJUEGlUCgUJUEFlUKhUJQEFVQKhUJRElRQKRQKRUmw1W1AZ8Pn85Geng4rKyswmfT7hEJRFUKhEI8ePYKHhwfY7K4hNV2jly1IT0+Hr6+vus2gULoMycnJ8PHxUbcZnUKXE1QrKysAog/ZxsZGzdZQKLpLUVERfH19JX9zLyMiIgInTpxAdnY2OBwOhg4dii1btsDFxUXFliqPLieo4mG+jY0N7Ozs1GwNhaL7yDq1lpCQgEWLFsHHxwd8Ph9r1qxBcHAwsrKyYGxsrGIrlUOXE1QKhaKZnD59Wup1dHQ0LC0tkZqaipEjR6rJKvmggtoVIAS4ehUoLxe9dnEBnJzUa5OCCIUEtx5Vw8WKCyaToW5zKCqksrISANCjRw81WyI7VFC7Ar/8Akyf/uy1vj5QVARo0S8qADTwBfjgUBrOZZdg3euuCB2mnV8KXY3q6mpUVVVJXhsYGMDAwOCF9xBCsGzZMgwfPhxubm6qNlFp0H1DXYH790X/9ugBMJlAYyPw6JF6bZKT+iYBwg+m4lx2CQCgsKJOzRZRZMXV1RU8Hk9yRUREvPSexYsXIyMjA0ePHu0EC5UH9VC7EpMmAX/8AZSViaYBtIT6JgHCD6Ui/tZjSZlQe8zv8mRlZcHW1lby+mXe6ZIlSxAbG4sLFy5o3cIxFdSuQEvxFK+4CoXqsUVO6psEWHAwFRduP4ahHhOD7bohKbccQi36QujqcLlcmJqavrQeIQRLlizByZMnER8fDyctnOenQ/6uBqN5IUcLBKm+SYCwAykSMd0X6gNfJ9G8rxaYT5GTRYsW4dChQzhy5Ai4XC6Ki4tRXFyMujrtmd6hgtqVYDCeeagarkh1jQLM/zkF/9wpBUePhehQXwztbQ5G8xeCgI75dY7IyEhUVlZi1KhRsLGxkVzHjh1Tt2kyo1ZBjYyMxKBBg2BqagpTU1MEBATgf//73wvvSUhIgJeXFwwNDeHs7IydO3d2krVaTEvxFHuoGjzkr2sUYP6Bq7iYUwojfRb2v+eDgN5mAADxTik65Nc9CCFtXqGhoeo2TWbUKqh2dnbYvHkzUlJSkJKSgldeeQWTJ0/GjRs32qyfm5uLCRMmYMSIEUhPT8fq1avx4Ycf4vjx451suRaj4UP+2kY+5u6/iks5Zc1i6gs/ZzPJ+6xm+6mDStFE1Loo9frrr0u93rhxIyIjI5GYmIiBAwe2qr9z507Y29tj+/btAIABAwYgJSUFW7duxdSpUzvDZO2m5ZBfAz1UsZgm3iuHsT4L++f6wsdReq+seDM/zX5O0UQ0Zg5VIBAgJiYGNTU1CAgIaLPOlStXEBwcLFU2btw4pKSkoKmpqc17GhoaUFVVJbmqq6uVbrvG09aQX8MEqaaBj9BokZiaGLBxYF5rMQVazFhomP0UCqABgnr9+nWYmJjAwMAA4eHhOHnyJFxdXdusW1xc3CpyjZWVFfh8PkpLS9u8JyIiQmpTcXttdxk0cFGqpoGP96KvIjm3HNxmMfVyaPsUF5MO+SkajNoF1cXFBdeuXUNiYiIWLlyIOXPmICsrq9364lVeMeKh3/PlYlatWoXKykrJ9aK2dRaxeDIYGrco9bSBj9DoZCTnPRNTT/vu7dani1IUTUbtG/v19fXRp08fAIC3tzeuXr2K7777Drt27WpV19raGsXFxVJlJSUlYLPZMDMza1UfaH1uuOWZ4i6JBnmo1fVNCI2+itT7T8A1ZOPgPD8M6dXthfeIPVQNMJ9CaYXaPdTnIYSgoaGhzfcCAgIQFxcnVXb27Fl4e3tDT0+vM8zTbjTIQ62ub8KcfclIvf8EpoZsHJ7/cjEFno1EqIdK0UTU6qGuXr0ar776Knr16oXq6mrExMQgPj5eEhdx1apVKCwsxIEDBwAA4eHh+PHHH7Fs2TKEhYXhypUr2Lt3r9YFUOh02jp6qkZBqmoW0/T8CvA4ejg0zw/udjyZ7hUP+dW9sV8gELS7EKpr6Ovr0/xrMqJWQX306BFmz56NoqIi8Hg8DBo0CKdPn8bYsWMBiFIo5OfnS+o7OTnh1KlTWLp0KX766Sf07NkT33//Pd0yJQ9q9lAr65oQsi8Z/xaIxPTwfD+42compgDAYqp3yE8IQXFxMSoqKtRjgBpgMplwcnKCvr6+uk3ReNQqqHv37n3h+/v3729VFhgYiLS0NBVZpOO0HPKrQZEqa5swe18SMh5UopuRyDOVR0wB9Q/5xWJqaWkJIyOjdhdDdQWhUIiHDx+iqKgI9vb2Ot/fjqL2RSlKJ6ABQ/7K2ia8uzcJ1wsr0d1ID4fn+8O158sjED2POlf5BQKBREzbWwTVRSwsLPDw4UPw+Xy6VvES6MRIV0MNQ/6K2kbM2puI64WV6GGsjyNhiokpoN59qOI5UyMjo85/uBoRD/UFAoGaLdF8qIfalVBDtKknNY2YtScJWUVVzWLqh/7Wiokp8MxDraprAiFELUPQrjbs7Wr97QjUQ+0KqCnaVHlNI2Y2i6mZsT6Ohvl3SEwBoK8VFwCQlFuOrWdv0TP9FI2CCmpXo5M81PKaRsyMSsTNoiqYm+jj6AJ/uFhzO9yup313rH1ddHz4p/N38dUZKqqyMGjQIKxdu7bN9zZt2oTu3bvj8ePHbb5PkR25hvyVlZU4efIk/vnnH+Tl5aG2thYWFhbw8PDAuHHjMHToUFXZSVEGnbTKX/a0AbP2JCG7uBrmJgaIWeCHPpYdF1Mx7w1zApPBwNrYG4iMvwshIVg5vj8dmr6AQYMG4fr1663Ki4uLERERgY0bN8LCwkINlqkHVWmZTB5qUVERwsLCYGNjgw0bNqCmpgZDhgzB6NGjYWdnh/Pnz2Ps2LFwdXXVqujaXYZOHPKXPm3AzCiRmFpwDRCzwF+pYipmzlBHbJgsCvG4K+EeIv6XTT3VF+Du7o7MzMxW5atXr4aDgwM++OADNVjV+ahay2TyUAcPHoyQkBAkJye3myO7rq4Ov/32G7Zt24aCggIsX75cbmMonYAKh/yPqxswMyoRd0qewpJrgKML/NHbwkTpzxETEuAIBoOBz3/LxO4L9yAUEqx5bQD1VNvA3d0dd+/eRV1dHTgcDgAgPT0dP//8M+Li4sBmd431aVVrmUw/xRs3brx0OMDhcDBjxgzMmDGDzsVoGp0Qbaqkuh4zo5KQU/IUVqYGOBrmD2cViqmY2f4OYDKANSczsediLgSE4IuJrp0mqoQQ1DV1/nYijh5Lrj66u7tDKBTi5s2b8PT0BAB8/PHHeOONN/DKK6+oykyNQ9VaJpOgWlhY4LfffsPrr78OFoslU32KhqICD7Wkqh4zohJx93ENrE0NcXSBP5zMjZXW/suY5ecAJoOBVSeuI/pSHggB1r7eOaJa1ySA6xdnVP6c58naMA5G+rJ7lb169UK3bt1w/fp1eHp64tdff8XVq1dx8+ZNFVqpeciiTQKBAH/88QemTJkit5bJvMr/1ltvwdbWFp9++imys7PleghFQ1DBolRJVT2mN4upDc8QMZ0spmJm+Npjy1R3MBjA/st5WBt7g86pPod4HrWhoQErVqzAihUr4ODgoG6zNIbs7GysWLECPXv2xDvvvKNQGzJ/xeXn5yM6Oho///wztm7dioCAAMybNw/vvPMOjI07/w9I5fzyC3Dnjrqt6BgsFvD2220fPT12DMjI6FDzT+v5+COlAK/WNMLUkI13fHqh+67EDrUpE1wuEBICdOsmVTzNxx4MMPDpiQwcuHIfQkKwYZKbJA+VKuDosZC1YZzK2n/Rc+VFLKjbtm2DQCDAp59+qgLLtIuamhocO3YMe/fuRWJiIoKCgrBx40ZMmTJFsQaJAsTHx5OQkBBiYmJCuFwumTdvHrl8+bIiTXU6BQUFBAApKCh4ccVJkwgRSZF2X+PHE7J2rej/CxcSMmaM+m1SxrVxY7sf3S9X84njyv8Sh0//S1afyCACgVApvzt1dXUkKyuL1NXVKaW9ziYyMpKYm5sTLpdL/u///k/m+xTtt8x/a2rg8uXLZO7cucTExIR4eHiQrVu3EhaLRW7cuNGhdhVa2gsMDERgYCB++uknxMTEIDo6GsOHD0f//v3bTQGtdQQHA8/lr9Iq8vKAuDigZZg5BgOIiAD69AE6cC67tpGPczdLUN3Ah7E+G6MHWMLEoJNWiZOSRJ51eXm7Vd727gUmg4Hlv/6Lw0n5EBJg4xTVeqragLu7O0pLSxEUFIS33npL3eaoDVdXV9TW1mLmzJlISkqS5JlbuXJlh9vu0F+BiYkJgoKCkJeXh+zsbNy+fbvDBmkMixap24KOERsrElSxTyfG21t0KUhhRR1m7E5EvnUt7LpzcDTMHyY9OjFYyIoVMk1VTPWyA5MJ/OeXf3E0OR+EEGx6w71Li+qwYcPovDKAnJwcTJ8+HUFBQRgwYIBS21bo6GltbS1+/vlnBAYGol+/fjh27BiWLVuGvLw8pRpH0SwePKnF9N1XkF9ei149OIhZ4I9enSmmgFyLam942OHbaUPAZAAxVwuw8kQGhDRdapcnNzcXLi4uWLhwIezs7LB8+XKkp6crZVeIXIJ66dIlzJs3D9bW1li4cCF69eqFv/76C3fu3MGaNWtga2vbYYMoSqIt4enAL0xBeS2m705EQXkd7HsYIWZBAOy6qzGMnYye1uQhttg+3QNMBvBLygOsOJ6h9vQpFPVia2uLNWvWICcnBwcPHkRxcTGGDRsGPp+P/fv3d2ikLfOQv1+/frh79y48PDywZcsWzJw5EzweT+EHUzqRDg7zxGJaWFEHBzMjxCzwhw2PoyTj5ESBL4VJg3uCAeDjY9fwa+oDEAJ89dYgSToVStfllVdewSuvvILKykocPnwY+/btw9atW+Hm5oYMBXbByOyhjh8/HmlpaUhJScHChQupmGo6Stpv2lJMncyNcWxBgPrEFFC4X68P7onvp3uAxWTgeNoDfPJ//1JPlSKBx+Phgw8+QEpKCtLS0jBq1CiF2pHZQ/3+++8VegBFA2h59FQO8stEc6YPK+vhbG6MI2H+sOYZqsBABVDgi+K1QTZgMoAlR9NxIr0QQkLwzTtDqKdKkWLIkCEK651MHur48eNx+fLll9arrq7Gli1b8NNPPylkDEWJdNBDvV9Wg2liMbUwxtEFGiKmHVw4eNXdBj/O9ACbycBv1x5i2S/XwBeoJwMspfNRtZbJ5KG+/fbbeOedd8DlcjFp0iR4e3ujZ8+eMDQ0xJMnT5CVlYWLFy/i1KlTmDhxIr7++mu5jKB0EgwGNv8vGwXltfhhhke7W4jySmswfXciiqvq0dvCGEfD/GFpqgFiCihlKmO8mw1+msXAosNp+P3aQwgJ8O07g8Fm0Xjruo6qtUwmQZ03bx5mz56NX3/9FceOHUNUVJQkLzmDwYCrqyvGjRuH1NRUuLi4yN1JigpoKTzN4lNSXY+dCXcBAMuC+7UZWi+3tAbTd1/Bo6oG9LE0wZEwP1hyNURMAaXNDY8baI0dszyx6Ega/vj3IYSE4LtpQ6io6jiq1jKZ51D19fUxc+ZMzJw5E4Ao4nVdXR3MzMxoalktIT2/Amg+/NXWfsy7j59ixu5ElFQ3oK+lCY6E+cOCa9C5RsqKEjaoBw+0RuQsLyw8nIo/M4pACMF30z2gR0VVp1Gllin8m8Pj8WBtbU3FVIt4WFkv+f/zcpRT8kxM+1mZ4OgCDRVTJYfkG+NqhZ3vekGfxcSp68VYciQdTXROtUuhTC2jX8W6ShtD/pa0LMopqcaMKJGY9rfm4miYP8xNNFBMAZXkxBo9wAq7ZotE9fSNYiw+koZGvu6J6siRIzF37lx1m6HTUEHtAhRV1AEAmAwGDPVEH7mwWZDuPKrG9N1JeNwspofn+8FMU8W0JUo+kx7U3xK7Q7ygz2bizI1HWKRjokoIwbVr1yTR+imqgQqqrtLCkyuqEg31e5kZw9RQT1yM249Enmnp0wYMsDHFkTB/zRdTFUbhH+ViiagQb+izmYjLeoQPDqeigd/56U1UwZ07d1BdXQ0vLy91m6LTUEHtCjQvQLFZDIkeZRdXYcbuRJQ+bcTAnqY4Mt8PPYz11WikjKg4DXZgPwvsCfGGAZuJv26W4INDaTohqqmpqWCxWBg8eLC6TdFpFBLUiooK7NmzB6tWrUJ5c1zKtLQ0FBYWKtU4SgdoITxi6WEAYEBUvuyXf1FW0wg3W1Mcnu+H7togpoDKBRUARvazwN45PjBgM3EuuwThB1NR314iPkKAmprOv+Tsf1paGvr37w8jIzUGtNEwnJ2dUVZW1qq8oqICzs7OCrUpdzzUjIwMjBkzBjweD3l5eQgLC0OPHj1w8uRJ3L9/HwcOHFDIEIpqkNodxWCguOrZSr+7LQ+H5vmBZ6SFOzVUHNdzeF9z7Av1wbyfr+L8rccIP5SK794a2LpibS1govrsrq14+hSQI/VQamoqnT99jry8PAjaCLTe0NCgsHMot6AuW7YMoaGh+Oqrr8DlciXlr776qmRfF0X9/HbtIaYAePikFiDixRUGzE30Ufq0Ed2M9HBovh94HC0T005KDw0Aw/qIRHXu/quIv/UYX8TewPseahBPJZCeno5Jkyap2wyNIDY2VvL/M2fOSAV6EggEOHfuHBwdHRVqW25BvXr1Knbt2tWq3NbWFsXFxQoZQVEu2/+6jdS0B5gCoEkgfBYbBcDqCQNwNa8cK18doH1iCnTKkL8lQ3ubY/97vngv+ipS8srxVj99OLZ0+42MRN5iZyPH0P3evXuoqKigC1LNiBPwMRgMzJkzR+o9PT09ODo64ptvvlGobbkF1dDQEFVVVa3Kb926JXcOa4pyIYTg27/u4PtzdzAcYk+OSEWbetPTDm962qnNxg7TyYIKAP7OZtj/ng9W/5qG+iYhCitq0dvQUBQLgcGQa+itDlJTU8FgMDBkyBB1m6IRCIWiEZuTkxOuXr0Kc3NzpbUt96LU5MmTsWHDBjQ1NQEQqXx+fj5WrlyJqVOnKs0winwQQvBt3G18f06U+nqQXfMwRmoOtfPt0hX8nM2weao7mAygtlGAvLIarUmnkpaWhr59+0pN0VFEqVCUKaaAAh7q1q1bMWHCBFhaWqKurg6BgYEoLi5GQEAANm7cqFTjKLJBCME3Z2/jx/M5AIDPXhsA7zu14ndbaKoOKKoaPFQx7rbdkF1bBgaDgacNfOSV1cDBzFjj46lGREQgIiJC3WZoJOfOncO5c+dQUlIi8VzF7Nu3T+725BZUU1NTXLx4EX///TfS0tIgFArh6emJMWPGyP1wSschhODrM7ewI14URerzia6YN9wJ13JSmysAUpOo2o4aBRUADNhMWHXnoKhaIBFVRy0QVUpr1q9fjw0bNsDb2xs2NjZKSdKncBppcS6WjhAREYETJ04gOzsbHA4HQ4cOxZYtW14YNis+Ph5BQUGtym/evIn+/ft3yB5tgxCCLadvSULyrX3dFe8NcwIAMJii2RyGbvmnGoGRPhuO5obIK61BDRVVpbNjxw58/fXXKCoqwsCBA7F9+3aMGDFC6c/ZuXMn9u/fj9mzZyutTbkFtb3UAAwGA4aGhujTpw9GjhwJFov10rYSEhKwaNEi+Pj4gM/nY82aNQgODkZWVhaMXzLRf+vWLZiamkped7UFMUIINv8vG7su3AMArJ80EHOGOkreb7Ek9WwetRO3HKkMNXuoYowN2HAyN0auWFRLa+BoTkW1oxw7dgwff/wxduzYgWHDhmHXrl149dVXkZWVBXt7e6U+q7GxEUOHDlVqm3IL6rfffovHjx+jtrYW3bt3ByEEFRUVMDIygomJCUpKSuDs7Izz58+jV69eL2zr9OnTUq+jo6NhaWmJ1NRUjBw58oX3Wlpaolu3bvKarxMQQrDp1E1E/ZMLANgweSBCAhyl6jAYzR6qlKLqABoiqABgZMCGk0WzqDZSUVUG27Ztw7x58zB//nwAwPbt23HmzBlERkYqfR54/vz5OHLkCD7//HOltSn3Kv+mTZvg4+ODO3fuoKysDOXl5bh9+zb8/Pzw3XffIT8/H9bW1li6dKncxlRWVgIAevTo8dK6Hh4esLGxwejRo3H+/Pl26zU0NKCqqkpyVVdXy22XJkEIwf/785mYfjnFrZWYAtLOqII5+jQTDRJUQDT8d2oW0ZpGPnJLayAQ6k6UKmVQXV0t9TfY0NDQZr3GxkakpqYiODhYqjw4OFimPFDyUl9fj23btiEwMBBLlizBsmXLpC5FkNtD/eyzz3D8+HH07t1bUtanTx9s3boVU6dOxb179/DVV1/JvYWKEIJly5Zh+PDhcHNza7eejY0Ndu/eDS8vLzQ0NODgwYMYPXo04uPj2/RqIyIisH79erls0VQIIdjw3yxEX8oDAGx8ww2z/BzariwlPCLxIXQWVSmQ58RcLKq5pTWobeQjt7QWTuZGYDF1I/bQ8/2VF1dXV6nXa9euxbp161rVKy0thUAggJWVlVS5lZWVSg4NZWRkSPbmZmZmSr2n6AKV3IJaVFQEPp/fqpzP50s63bNnT7k9wcWLFyMjIwMXL158YT0XFxepRauAgAAUFBRg69atbQrqqlWrpL5tCgsLW33A2gAhBOv/yML+y3kAgIg33THDt/05JalfB+qhKgVxRPfa2lpwOByp94z02XA2N8Y9HRTVxsZGAJBpXaQtsrKyYGtrK3ltYPDiEJHPixkhRCkr8M/zopGtosgtqEFBQXj//fexZ88eeHh4ABCdE164cKFk1f/69etwcnKSuc0lS5YgNjYWFy5cgJ2d/Kd4/P39cejQoTbfMzAwkPoA2zrlpekQQrA29gYOXLkPBgPY/KY7pvm8eIKe0TyPxyB0H6qyYLFY6NatG0pKSgAARkZGUn/oDAC2JiwUVNShprYROUUNsO3OAVuLRVUoFOLx48cwMjICm63YpiAulyu1gNwe5ubmYLFYrbzRkpKSVl6rMsnJycHdu3cxcuRIcDicDgm43D+hvXv3Yvbs2fDy8pJ8Y/P5fIwePRp79+4FAJiYmMh0FpYQgiVLluDkyZOIj4+XS4Rbkp6eDhsbG4Xu1XSEQoIvYjNxKDEfDAaw5c1BeMfnxYt9wLNveSnZ0QE9VbebbW1tDQASUW0LIhCirLoBAgIUFzJgbmzQbspubYDJZMLe3l4lXmJL9PX14eXlhbi4OLzxxhuS8ri4OEyePFnpzysrK8M777yD8+fPg8Fg4M6dO3B2dsb8+fPRrVs3hc7zyy2o1tbWiIuLQ3Z2Nm7fvg1CCPr37y81DG9rn2hbLFq0CEeOHMHvv/8OLpcr+Wbi8XiSIdWqVatQWFgoCQu4fft2ODo6YuDAgWhsbMShQ4dw/PhxHD9+XN6uaDxCIcHnv2ficJJITL9+azDe8pLNgxf/8jNAWkSb0iHUtCjFYDBgY2MDS0tLyfHrtmCVPMUnv/6Lyrom9LPi4qupg8DVxmA0EAkds5O87GXLlmH27Nnw9vZGQEAAdu/ejfz8fISHhyv9WUuXLoWenh7y8/MxYMAASfm0adOwdOnSzhFUMf379+/wRvrIyEgAwKhRo6TKo6OjERoaCkA0Z5ufny95r7GxEcuXL0dhYSE4HA4GDhyIP//8ExMmTOiQLZqGUEiw5rdMHE0Wiek3bw+WK6iJlDOhQwelNGWVn8VivXBOcaC9IbbN9MHMqCScz6nAe4eu4dA8P3Qz0pJA3mpi2rRpKCsrw4YNG1BUVAQ3NzecOnUKDg7tLL52gLNnz+LMmTOtphn79u2L+/fvK9SmQoL64MEDxMbGIj8/XzJhLWbbtm0ytyPL6uH+/fulXq9YsQIrVqyQ+RnaiFBIsPrkdcRcLQCTAXzzzmC84SHn3HLzPtSWq/ySMm1GQwRVFvpbm+JomD9mRiUis7AKM6OStCs7gpr44IMP8MEHH6j8OTU1NW1mMCgtLX3pwll7yC2o586dw6RJk+Dk5IRbt27Bzc0NeXl5IITQiOBKQCgkWHkiA7+kPACTAXw7bQgmD7F9+Y3P0dY+VErn42LNxdEFIlHNKqrCzD0iUdWK/F06zsiRI3HgwAF8+eWXAETTOUKhEF9//bXM05bPI7fLsmrVKvznP/9BZmYmDA0Ncfz4cRQUFCAwMBBvv/22QkZQRAiEBCuOPxPT7dM9FBJToJ19dFq8MCJBizxUMf2suIhZ4A9zEwPcLKrCzKhElNc0vvxGikr5+uuvJUdbGxsbsWLFCri5ueHChQvYsmWLQm3KLag3b96URLlms9moq6uDiYkJNmzYoLARlGYx/TUDv6Y+AIvJwHfTPTBpcE+F2xNLJ4M8CzCtA3KqlYIKAH0sRaJqwTVAdnE1ZkYlouxp2yeGKJ2Dq6srMjIy4Ovri7Fjx6KmpgZvvvkm0tPTpQ4uyYPcQ35jY2PJ0bGePXvi7t27GDhQlLystLRUISO6OgIhwSf/9y9OpBeCxWTg++keeG1Qx7aBtbltShfQ4tMJfSxNELPAHzN2JzaLahIOh/nB3ESx+TqK4jQ1NSE4OBi7du1S6klKuT1Uf39/XLp0CQDw2muv4T//+Q82btyIuXPnwt/fX2mGdRX4AiGW/XINJ9ILwWYy8OOMjosp0M7Gfi0Wo1ZomYcqpreFSFStTA1w61E1ZuxOxONq6ql2Nnp6esjMzFT63lq5BXXbtm3w8/MDAKxbtw5jx47FsWPH4ODgINnYT5ENkZj+i9+vPRSJ6UwPvOqunAMKUr8nQjrk1yScLUwQsyAA1qaGuFPyFDOiElFSXf/yGylKJSQkROmaJfeQ39nZWfJ/IyMj7NixQ6kGdRX4AiE+PnYN/80oApvJwE+zPDFuoLXyHiDZItVy25TymlcbOiCoAOBkbiwa/kclIqfkKWbsTsTRMH9Ymhqq27QuQ2NjI/bs2YO4uDh4e3u3isEszxZQMXJ7qM7OzigrK2tVXlFRISW2lPZpEgjxUYxITPVYDOxQtpiixYI+gW6e5dcBHJtFtSfPEHcf12D67kQ8qqKeameRmZkJT09PmJqa4vbt20hPT5dc165dU6hNuT3UvLw8CASCVuUNDQ0oLCxUyIiuhEhM03HqejH0WAxEzvLCGFcVBH4QB5gGdCtivxgt91DFOJgZI2ZBAGZEJeJeqUhUj4b5w5pHPVVVIhAIsG7dOri7u8sUf1lWZBbU2NhYyf/PnDkDHo8nZdy5c+fg6OioNMN0kSaBEEuOpOP0jWLos5iIfNcToweoJoqOtHbSOVRNxt7MCDEL/DF9dyJyS2swffcVHF3gDxse5+U3UxSCxWJh3LhxuHnzpnoEdcqUKQBE23HE+1DF6OnpwdHRUaFgAl2FRr4QS46m4cyNR9BnMbFrtheC+luq7HnPhvzP9qHqhIeqC31og149jCRzqnlltRJPtWc3Kqqqwt3dHffu3VM4yl1byDyHKhQKIRQKYW9vL8lhLb4aGhpw69YtTJw4UWmG6RKNfCEWHWkWUzYTu0NUK6YidFN4JOiQhypGLKq9enBwv1lUCyvq1G2WzrJx40YsX74c//3vf1FUVCSVpkXRuMlyz6Hm5uYq9KCuSgNfgEWH0/DXzRLos5mICvFGYD/VZ2gV70MFIRAKddBD1UFBBQC77kaiOdXdicgvrxUN/8P8Yde9dRAPSscYP348AGDSpElS+1HFAabbWit6GTIJanupo9viww8/lNsIXaWBL8AHh9JwLrsEBs1iOrITxBQALLii0zeEEOSX1wLQEZ9VF74UXoJtN45k+H+/xfC/Vw8qqspEbSlQvv32W5kaYzAYVFCbqW8SYOGhVJy/9RgGbCb2zvHB8L7mnfZ8fT3RR8sA0MBvDjCtC1qk4x6qmJ5iUd39bE5VNB1ARVVZBAYGKr1NmQSVDvPlo75JgPBDqYi/9RiGeiIxHdan88S0JVIBpnTJu9NxQQUAGx5HsqUqt3lLFRVV5XHhwoUXvt9W0s+XoXDEfuBZgGhV55rRJuqbBFhwMBUXbovEdF+oD4b2VoOYNn8mpoZsUcQp6IiedhEPVYw1z1Diqd4rrcG0XVcQsyAA9mZUVDvK85lCAGktU2QOVaEQ7gcOHIC7uzs4HA44HA4GDRqEgwcPKtKUTlHfJEDYgRRcuP0YHD0WokN91SOmLTA2YIOjJ07VoQOKqhPfCvJhZSoS1d4WxnhYWY9pu6/gflmNus3Sep48eSJ1lZSU4PTp0/Dx8cHZs2cValNuD3Xbtm34/PPPsXjxYgwbNgyEEFy6dAnh4eEoLS3F0qVLFTJE26lrFInpxZxSGOmzEB3qAz9nM/UZ1Cw8TELg72wGJImOOuoMXcRDFWNpatgc+T8JOSVPMW2XaPivU59pJ9PycJKYsWPHwsDAAEuXLkVqaqrcbcotqD/88AMiIyMREhIiKZs8eTIGDhyIdevWdUlBrWsUYP6Bq7iUUwYjfRb2v+cLXyflnb7oKA49RJvDdSLuZhcb8rfEkmsoyVF1p+QppjVvqXK2MFG3aTqFhYUFbt26pdC9cgtqUVERhg4d2qp86NChKCoqUsgIbaa2kY95+1Nw5V4ZjPVZ+HmuL7wdNUBMdVV4uuCQvyUWXANJjqrbj56KtlQt8EdvKqpyk5GRIfWaEIKioiJs3rwZgwcPVqhNuQW1T58++OWXX7B69Wqp8mPHjqFv374KGaGt1DbyMXf/VSTeK4eJARs/z/WBl4MGiGl76IIYifsQFweoILWwNmAO4H+EoPRpI5oEQrC+ZqCJawC9zs4ZtmsX0Lw5XhsZMmQIGAxGq+zL/v7+2Ldvn0Jtyi2o69evx7Rp03DhwgUMGzYMDAYDFy9exLlz5/DLL78oZIQ2UtPAx3v7ryI5txxcAzZ+nucLT/vu6jbrGS09VF3yUl1cRP/W1wP5+eq1RY2wAEiF1alUgxF12n0s9vntoEwmExYWFjA0VDzSl8yCeu3aNQwZMgRTp05FUlISvv32W/z2228ghMDV1RXJycnw8PBQ2BBt4mkDH+9FJ+Nq3hNwDdg4MM8XHpokprrMsGFAXh7w+LG6LdEIKuua8PlvmcgtrUE3Iz1snOIGe7NOWqhSMJGdpuCgghGOzILq6ekJDw8PzJ8/HzNnzsShQ4eUbow28LSBj9B9yUi5/wRcQzYOzvPDkF7d1G1Wa9ryUHVhyA+IhvpddLj/PDwA6z29MGtPEv4pqsIbyY04EuYJF2uuuk3TWP7++28sXrwYiYmJMDU1lXqvsrISQ4cOxc6dOzFixAi525Z5H+qlS5fg6emJlStXwsbGBrNnz1bJWVhNprq+CXOaxdTUkI3D8zVUTCldiu7G+jgS5oeBPU1RVtOImVGJyC5WLFpSV2D79u0ICwtrJaaAaCvV+++/r1D6E0AOQQ0ICEBUVBSKi4sRGRmJgoICjBkzBr1798bGjRvx4MEDhQzQFqrqmxCyLxmp95+Ax9HD4fn+GGTXTd1mtU9b3qiueKiUVnQz0sfh+X5wt+U1i2oSbhZRUW2Lf//9VxJpqi2Cg4MV2oMKKHBSisPhYM6cOYiPj8ft27cxY8YM7Nq1C05OTpgwYYJCRmg6VfVNCNmbjPT8imYx9YO7XetNwRqJri1KUdqlm5E+Ds3zwyA7HsqbPdWsh1RUn+fRo0fQ09Nr9302m43HCs7RK3T0VEzv3r2xcuVKrFmzBqampjhz5kxHmtNIKuuaMHtvMq4VVKCbkUhM3Wy1REwpXQ6ekR4OzvPDYDsentQ2YeaeRNx4qI4tAJqLra0trl+/3u77GRkZsLFRLJ27woKakJCAOXPmwNraGitWrMCbb76JS5cuKdqcRlJZ24TZe5Pwb0EFuhvp4ch8f+0R07Y29tMhf5eAx9HDweb5/YraJsyMSkJmIRVVMRMmTMAXX3yB+vrWGWbr6uqwdu1ahbOPyCWoBQUF+PLLL9G7d28EBQXh7t27+OGHH/Dw4UNERUXB399fISM0kcraJry7NwkZDyrRw1gfR8L84dqz9SS2VkCH/F0OU0O95u183VBZ14RZe5Jw/QEVVQD47LPPUF5ejn79+uGrr77C77//jtjYWGzZsgUuLi4oLy/HmjVrFGpb5m1TY8eOxfnz52FhYYGQkBDMnTsXLuJN1joGXyDE7H1JuF4oFlM/9LfWMjHV1aOnFJkxNdTDgbm+mLMvGWn5FZi1JxGH5vtp9mJqJ2BlZYXLly9j4cKFWLVqlVQY0nHjxmHHjh2wslIsG7HMgsrhcHD8+HFMnDgRLBbr5TdoMWwWEzN87fGw4jYOz/fTnT19dMjf5eAa6uHAPD/J3ulZe5JwaJ4fBnfx7X4ODg44deoUnjx5gpycHBBC0LdvX3Tv3rEDOjILamxsbIcepG3M8LXHa4NsYGrY/mqgRqOrR08pcmNiwMb+ub6S033v7kmip/ua6d69O3x8fJTWXodW+XUdrRVTCuU5TAzYkrCS1Q18hOwV7ammKBcqqLqKLh89pSiEsQEb+9/zgb+zSFTn7EtG6v1ydZulU1BBpVC6EEb6bOwL9UGAsxmeNnuqKXlUVJWFWgU1IiICPj4+4HK5sLS0xJQpU2SKlJ2QkAAvLy8YGhrC2dkZO3fu7ARrtQy6yk9pB7GoDu1thppGAUL2JSM5l4qqMlCroCYkJGDRokVITExEXFwc+Hw+goODUVPTfgKy3NxcTJgwASNGjEB6ejpWr16NDz/8EMePH+9Ey7UMOuSnPAdHn4W9c3wwvI85ahsFCI1ORtK9MnWbpfV0KI10Rzl9+rTU6+joaFhaWiI1NbXdnNg7d+6Evb09tm/fDgAYMGAAUlJSsHXrVkydOlXVJmsP1EOlvASOPgt75ngj7EAK/rlTitDoq4h+z0eU1JGiEBo1h1pZKTrJ0aNH+2lErly5guDgYKmycePGISUlBU1NTa3qNzQ0oKqqSnJVV1cr12htgnqolOcw1GMhKsQbI/tZoK5JgPeir+Ly3VJ1m6W1aIygEkKwbNkyDB8+HG5ubu3WKy4ubnWKwcrKCnw+H6WlrX8RIiIiwOPxJJerq6vSbddI6D5UiowY6rGwe7YXAptFde7+q7icQ0VVETRGUBcvXoyMjAwcPXr0pXUZz3laLY+OPc+qVatQWVkpubKyspRjMIWiQxjqsbBrtheCXCxQ3yTEe/uv4uIdKqryohGCumTJEsTGxuL8+fOws7N7YV1ra2sUFxdLlZWUlIDNZsPMrPXcj4GBAUxNTSUXl6sjx0hfBo02RZETQz0Wds72wiv9LdHAF2Lez1fxzx2au0se1CqohBAsXrwYJ06cwN9//w0nJ6eX3hMQEIC4uDipsrNnz8Lb2/uFQWO7NHTIT5ERAzYLke96YswAsaimIOE2FVVZUaugLlq0CIcOHcKRI0fA5XJRXFyM4uJi1LVIT7tq1SqEhIRIXoeHh+P+/ftYtmwZbt68iX379mHv3r1Yvny5OrqgudBVfoqCGLBZ2DHLC2NdrdDIFyLsQArib5Wo2yytQK2CGhkZicrKSowaNQo2NjaS69ixY5I6RUVFyG+Rf93JyQmnTp1CfHw8hgwZgi+//BLff/893TIlC3TIT5ERfTYTP830RHCzqC44kIrz2Zohqnl5eZg3bx6cnJzA4XDQu3dvrF27Fo2Njeo2Tb37UIkM3tP+/ftblQUGBiItLU0FFukQdJWf0kH02Uz8NMsTS46k4/SNYrx/MBU7Z3vilf6KxQpVFtnZ2RAKhdi1axf69OmDzMxMhIWFoaamBlu3blWrbRqxKEWhUDQTPRYTP8z0wKtu1mgUCPH+wVT8lfVIrTaNHz8e0dHRCA4OhrOzMyZNmoTly5fjxIkTarULoIKqu4g9VKEQEOfOoUN+igLosZj4foYHXnO3QZOAYOHhVJy9UfzyGzuRysrKFx4I6iyooOo6VVWADHt7KZQXocdi4rvpQzBxkEhUPzichjMyimp1dbXUacWGhgal2ibObRceHq7UdhWBCqqu4ugIDB787HW3bkBgoLqsoegAbBYT26cNwaTBPcFmMWQOwO7q6ip1WjEiIqLNeuvWrQODwXjhlZKSInXPw4cPMX78eLz99tuYP39+h/vYURhElpUhHeLBgwfo1asXCgoKXnqIQOt5/qOlQ36KEuALhMh5/PSliSvFf2tZWVmwtbWVlBsYGMDAwKBV/dLS0jaPj7fE0dERhoaGAERiGhQUBD8/P+zfvx9Mpvr9Q7Wu8lNUDBVQigpgs5hyZQHmcrkwNX15fXNzc5ibm8vUZmFhIYKCguDl5YXo6GiNEFOACiqFQtEyHj58iFGjRsHe3h5bt27F48fPTnJZW1ur0TIqqBQKRcs4e/YscnJykJOT02raTt0zmF1OUIVCIQDRCSwKhaI6xH9j4r85ZREaGorQ0FCltqksupygPnok2pTs6+urZksolK7Bo0ePYG9vr24zOoUut8rP5/ORnp4OKyurF05kV1dXw9XVFVlZWToV8o/2S7vQ5n4JhUI8evQIHh4eYLO7hu/W5QRVVqqqqsDj8VBZWSnTCqW2QPulXehqv3QVzdhrQKFQKDoAFVQKhUJRElRQ28HAwABr165t80SHNkP7pV3oar90FTqHSqFQKEqCeqgUCoWiJKigUigUipKggkqhUChKggpqO+zYsQNOTk4wNDSEl5cX/vnnH3WbBACIiIiAj48PuFwuLC0tMWXKFNy6dUuqDiEE69atQ8+ePcHhcDBq1CjcuHFDqk5DQwOWLFkCc3NzGBsbY9KkSXjw4IFUnSdPnmD27NmSOJazZ89GRUWFqrsIQNRPBoOBjz/+WFKmrf0qLCzEu+++CzMzMxgZGWHIkCFITU3V+n5R2oBQWhETE0P09PRIVFQUycrKIh999BExNjYm9+/fV7dpZNy4cSQ6OppkZmaSa9eukddee43Y29uTp0+fSups3ryZcLlccvz4cXL9+nUybdo0YmNjQ6qqqiR1wsPDia2tLYmLiyNpaWkkKCiIDB48mPD5fEmd8ePHEzc3N3L58mVy+fJl4ubmRiZOnKjyPiYnJxNHR0cyaNAg8tFHH2l1v8rLy4mDgwMJDQ0lSUlJJDc3l/z1118kJydHq/tFaRsqqG3g6+tLwsPDpcr69+9PVq5cqSaL2qekpIQAIAkJCYQQQoRCIbG2tiabN2+W1Kmvryc8Ho/s3LmTEEJIRUUF0dPTIzExMZI6hYWFhMlkktOnTxNCCMnKyiIASGJioqTOlStXCACSnZ2tsv5UV1eTvn37kri4OBIYGCgRVG3t16effkqGDx/e7vva2i9K29Ah/3M0NjYiNTUVwcHBUuXBwcG4fPmymqxqn8rKSgCQJCjLzc1FcXGxlP0GBgYIDAyU2J+amoqmpiapOj179oSbm5ukzpUrV8Dj8eDn5yep4+/vDx6Pp9Kfw6JFi/Daa69hzJgxUuXa2q/Y2Fh4e3vj7bffhqWlJTw8PBAVFaX1/aK0DRXU5ygtLYVAIICVlXTucSsrKxQXa1amR0IIli1bhuHDh8PNzQ0AJDa+yP7i4mLo6+uje/fuL6xjaWnZ6pmWlpYq+znExMQgLS2tzZxD2tqve/fuITIyEn379sWZM2cQHh6ODz/8EAcOHNDqflHapmuEgFEAxnPpQwghrcrUzeLFi5GRkYGLFy+2ek8R+5+v01Z9Vf0cCgoK8NFHH+Hs2bOSnEFtoW39EgqF8Pb2xqZNmwAAHh4euHHjBiIjIxESEtKuTZreL0rbUA/1OczNzcFisVp9q5eUlLTyItTJkiVLEBsbi/Pnz0tFLRengHiR/dbW1mhsbMSTJ09eWEccO7Yljx8/VsnPITU1FSUlJfDy8gKbzQabzUZCQgK+//57sNlsyTO1rV82NjZwdXWVKhswYADy8/Ml9gDa1y9K21BBfQ59fX14eXkhLi5OqjwuLg5Dhw5Vk1XPIIRg8eLFOHHiBP7++284OTlJve/k5ARra2sp+xsbG5GQkCCx38vLC3p6elJ1ioqKkJmZKakTEBCAyspKJCcnS+okJSWhsrJSJT+H0aNH4/r167h27Zrk8vb2xqxZs3Dt2jU4OztrZb+GDRvWalvb7du34eDgAEB7Py9KO6hnLUyzEW+b2rt3L8nKyiIff/wxMTY2Jnl5eeo2jSxcuJDweDwSHx9PioqKJFdtba2kzubNmwmPxyMnTpwg169fJzNmzGhzG46dnR3566+/SFpaGnnllVfa3IYzaNAgcuXKFXLlyhXi7u7eqdtwWq7ya2u/kpOTCZvNJhs3biR37twhhw8fJkZGRuTQoUNa3S9K21BBbYeffvqJODg4EH19feLp6SnZlqRuALR5RUdHS+oIhUKydu1aYm1tTQwMDMjIkSPJ9evXpdqpq6sjixcvJj169CAcDodMnDiR5OfnS9UpKysjs2bNIlwul3C5XDJr1izy5MmTTuiliOcFVVv79ccffxA3NzdiYGBA+vfvT3bv3i31vrb2i9IaGm2KQqFQlASdQ6VQKBQlQQWVQqFQlAQVVAqFQlESVFApFApFSVBBpVAoFCVBBZVCoVCUBBVUCoVCURJUUCkUCkVJUEGlqJR169ZhyJAhanv+559/jgULFshUd/ny5fjwww9VbBFFl6EnpSgK87KwcHPmzMGPP/6IhoYGmJmZdZJVz3j06BH69u2LjIwMODo6vrR+SUkJevfujYyMjFZBZygUWaCCSlGYliHnjh07hi+++EIqshKHwwGPx1OHaQCATZs2ISEhAWfOnJH5nqlTp6JPnz7YsmWLCi2j6Cp0yE9RGGtra8nF4/HAYDBalT0/5A8NDcWUKVOwadMmWFlZoVu3bli/fj34fD4++eQT9OjRA3Z2dti3b5/UswoLCzFt2jR0794dZmZmmDx5MvLy8l5oX0xMDCZNmiRV9uuvv8Ld3R0cDgdmZmYYM2YMampqJO9PmjQJR48e7fDPhtI1oYJK6XT+/vtvPHz4EBcuXMC2bduwbt06TJw4Ed27d0dSUhLCw8MRHh6OgoICAEBtbS2CgoJgYmKCCxcu4OLFizAxMcH48ePR2NjY5jOePHmCzMxMeHt7S8qKioowY8YMzJ07Fzdv3kR8fDzefPNNtByk+fr6oqCgAPfv31ftD4Gim6gx0hVFh4iOjiY8Hq9V+dq1a8ngwYMlr+fMmUMcHByIQCCQlLm4uJARI0ZIXvP5fGJsbEyOHj1KCCFk7969xMXFhQiFQkmdhoYGwuFwyJkzZ9q0Jz09nQCQCnGXmppKALwwrm1lZSUBQOLj41/aZwrleWhOKUqnM3DgQDCZzwZHVlZWkiSDAMBisWBmZoaSkhIAovQoOTk54HK5Uu3U19fj7t27bT6jrq4OAKTyUw0ePBijR4+Gu7s7xo0bh+DgYLz11ltSye84HA4AkVdMocgLFVRKp6Onpyf1msFgtFkmFAoBiBLdeXl54fDhw63asrCwaPMZ5ubmAERDf3EdFouFuLg4XL58GWfPnsUPP/yANWvWICkpSbKqX15e/sJ2KZQXQedQKRqPp6cn7ty5A0tLS/Tp00fqam8XQe/evWFqaoqsrCypcgaDgWHDhmH9+vVIT0+Hvr4+Tp48KXk/MzMTenp6GDhwoEr7RNFNqKBSNJ5Zs2bB3NwckydPxj///IPc3FwkJCTgo48+woMHD9q8h8lkYsyYMVIptpOSkrBp0yakpKQgPz8fJ06cwOPHjzFgwABJnX/++QcjRoyQDP0pFHmggkrReIyMjHDhwgXY29vjzTffxIABAzB37lzU1dXB1NS03fsWLFiAmJgYydSBqakpLly4gAkTJqBfv3747LPP8M033+DVV1+V3HP06FGEhYWpvE8U3YRu7KfoLIQQ+Pv74+OPP8aMGTNeWv/PP//EJ598goyMDLDZdHmBIj/UQ6XoLAwGA7t37wafz5epfk1NDaKjo6mYUhSGeqgUCoWiJKiHSqFQKEqCCiqFQqEoCSqoFAqFoiSooFIoFIqSoIJKoVAoSoIKKoVCoSgJKqgUCoWiJKigUigUipKggkqhUChKggoqhUKhKIn/D8Vgt4rO1qIhAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "from matplotlib import pyplot as plt\n", "fig, ax = plt.subplots(figsize=(3.5, 2.))\n", "\n", "raw_data = data.raw_data\n", "ax.plot(raw_data['test_time'], raw_data['voltage'], label='$V$')\n", "ax.set_xlabel('Time (s)')\n", "ax.set_ylabel('Voltage (V)')\n", "\n", "ax2 = ax.twinx()\n", "ax2.plot(raw_data['test_time'], raw_data['current'], color='red', label='$I$')\n", "ax2.set_ylabel('Current (A)')\n", "\n", "fig.legend(loc=(0.6, 0.6))\n", "fig.tight_layout()" ] }, { "cell_type": "markdown", "id": "e67a643f-0586-45dc-b309-93849834435b", "metadata": {}, "source": [ "## Recreate the ECM Parameters with Moirae\n", "Moirae includes a Python implementation of a Thevenin ECM.\n", "\n", "Define the parameters for the ECM model as [Moirae-compatible Health parameter objects](../system-models.html#health-parameters)\n", "\n", "All components of the model will eventually be combined to form a `ECMASOH` object,\n", "and we'll only show the basic ones here (OCV, capacity, serial resistance)\n", "\n", "> Here, we assume that good guesses for parameters are already known. Use [extractors](../extractors/index.html) to make guesses otherwise." ] }, { "cell_type": "code", "execution_count": 6, "id": "8075aaa9-dee8-4631-8f94-cc789838d8a3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "q_t Maximum theoretical discharge capacity (Qt).\n", "ce Coulombic efficiency (CE)\n", "ocv Open Circuit Voltage (OCV)\n", "r0 Series Resistance (R0)\n", "c0 Series Capacitance (C0)\n", "rc_elements Tuple of RC components\n", "h0 Hysteresis component\n" ] } ], "source": [ "from moirae.models.ecm import ECMASOH\n", "for name, field in ECMASOH.model_fields.items():\n", " if name != \"updatable\":\n", " print(name, field.description)" ] }, { "cell_type": "markdown", "id": "44d78f19-a182-4bdc-a3b2-e3620d5897e1", "metadata": {}, "source": [ "The OCV is described using SOC-dependent variable defined using interpolation points.\n", "Interpolation points are assumed to be evenly-spaced across [0, 1]\n", "and the values at each point are defined as \"base values\"" ] }, { "cell_type": "code", "execution_count": 7, "id": "fe027671-de18-4bef-bbd8-8a29c9850d51", "metadata": {}, "outputs": [], "source": [ "from moirae.models.ecm.components import OpenCircuitVoltage, SOCInterpolatedHealth\n", "ocv = OpenCircuitVoltage(\n", " ocv_ref=SOCInterpolatedHealth(base_values=[2, 3.])\n", ")" ] }, { "cell_type": "code", "execution_count": 8, "id": "01d5dfa8-f6b2-4cad-9051-ac958680c409", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, 'V')" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "fig, ax = plt.subplots(figsize=(3.5, 2.))\n", "\n", "soc = np.linspace(0., 1, 32)[None, :]\n", "v = ocv(soc)\n", "ax.plot(soc.flatten(), v.flatten())\n", "\n", "ax.set_xlabel('SOC')\n", "ax.set_ylabel('V')" ] }, { "cell_type": "markdown", "id": "4b9c4e27-28ee-4d90-8f73-85fe2541db9c", "metadata": {}, "source": [ "The resistance can be dependent on both SOC and temperature, but we'll choose to make it insensitive to both\n", "by defining only a single interpolation point." ] }, { "cell_type": "code", "execution_count": 9, "id": "290139ce-48da-4c10-9957-52b2623de680", "metadata": {}, "outputs": [], "source": [ "from moirae.models.ecm.components import Resistance\n", "r0 = Resistance(base_values=[0.080])" ] }, { "cell_type": "code", "execution_count": 10, "id": "688ae7d1-61c0-414f-965d-0dca8c3fc452", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, 'R (m$\\\\Omega$)')" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "fig, ax = plt.subplots(figsize=(3.5, 2.))\n", "\n", "soc = np.linspace(0., 1, 32)[None, :]\n", "r = r0.get_value(soc)\n", "ax.plot(soc.flatten(), r.flatten() * 1000)\n", "\n", "ax.set_xlabel('SOC')\n", "ax.set_ylabel('R (m$\\\\Omega$)')" ] }, { "cell_type": "markdown", "id": "ff85c162-d866-44e5-86ae-930da0d879ab", "metadata": {}, "source": [ "Capacity is defined as a \"max theoretical capacity,\" which allows for capacity to change with parameters such as temperature" ] }, { "cell_type": "code", "execution_count": 11, "id": "d00920ab-9ca0-454b-84e6-72df46cd9573", "metadata": {}, "outputs": [], "source": [ "from moirae.models.ecm.components import MaxTheoreticalCapacity\n", "q_t = MaxTheoreticalCapacity(base_values=1.)" ] }, { "cell_type": "markdown", "id": "d16d07f0-907b-43ab-931f-add3580032c9", "metadata": {}, "source": [ "Finally, combine them together" ] }, { "cell_type": "code", "execution_count": 12, "id": "323bc4a3-8c27-4099-bc92-5d103d51fe68", "metadata": {}, "outputs": [], "source": [ "asoh = ECMASOH(\n", " q_t=q_t,\n", " ocv=ocv,\n", " r0=r0,\n", ")" ] }, { "cell_type": "markdown", "id": "9f92d04d-414c-41b5-a078-49cef789b78d", "metadata": {}, "source": [ "We're now ready to fit the parameters" ] }, { "cell_type": "markdown", "id": "72a29ba9-10ee-47d6-8945-ee8097058946", "metadata": {}, "source": [ "## Run the model\n", "Let's start by running the model using the same input currents as provided in the data.\n", "Moirae provides a simple interface to running a model given input data from a battery-data-toolkit BatteryDataset.\n", "\n", "The first step is to make an interface to running the ECM." ] }, { "cell_type": "code", "execution_count": 13, "id": "f908f5ea-4840-480a-8530-1eed0310f6f2", "metadata": {}, "outputs": [], "source": [ "from moirae.models.ecm import EquivalentCircuitModel\n", "model = EquivalentCircuitModel()" ] }, { "cell_type": "markdown", "id": "cac7e85a-e1be-47f3-8ccf-ba9bcbc382b0", "metadata": {}, "source": [ "We then create a \"transient state\" which defines the initial state of charge of the system." ] }, { "cell_type": "code", "execution_count": 14, "id": "5d122b94-9bbe-40e8-bd6d-d1178df002a1", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ECMTransientVector(soc=array([[0.]]), q0=None, i_rc=array([], shape=(1, 0), dtype=float64), hyst=array([[0.]]))" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from moirae.models.ecm.transient import ECMTransientVector\n", "state = ECMTransientVector.from_asoh(asoh)\n", "state" ] }, { "cell_type": "markdown", "id": "50020599-a645-43c6-ac8a-f7c2616c19af", "metadata": {}, "source": [ "Then run it" ] }, { "cell_type": "code", "execution_count": 15, "id": "55a0c606-be01-492b-964d-c6a54eac83fa", "metadata": {}, "outputs": [], "source": [ "from moirae.interface import run_model\n", "output = run_model(\n", " model=model,\n", " dataset=data,\n", " asoh=asoh,\n", " state_0=state\n", ")" ] }, { "cell_type": "code", "execution_count": 16, "id": "4a9964b4-1440-43fe-ad69-bc46418ebcc4", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "fig, ax = plt.subplots(figsize=(3.5, 2.))\n", "\n", "ax.plot(raw_data['test_time'], raw_data['voltage'], 'k--', label='Actual')\n", "ax.plot(raw_data['test_time'], output['terminal_voltage'], color='r', label='Model')\n", "ax.set_xlabel('Time (s)')\n", "ax.set_ylabel('Voltage (V)')\n", "\n", "fig.legend()\n", "fig.tight_layout()" ] }, { "cell_type": "markdown", "id": "aa92d15f-068c-4360-a7df-fb1e1662daee", "metadata": {}, "source": [ "The result is close, but not quite the on point. We might have an issue with the resistance." ] }, { "cell_type": "markdown", "id": "85f7f68d-bfbd-4ff6-bf54-b8513ccad53d", "metadata": {}, "source": [ "## Fitting ASOH with Online State Estimation\n", "Online state estimation works by adjusting the estimates for the state of a dynamic system based on \n", "discrepancies between values predicted by a model for that system and what is actually measured.\n", "The \"online\" portion in the algorithm refers to it why it works: gradually adjusting with every new measurement.\n", "\n", "The ['online estimator' classes](../estimators/index.html#online-estimators) in Moirae define \n", "online estimation algorithms.\n", "For simplicity, we'll make one which estimates the resistance value and the SOC.\n", "\n", "Start by marking the interpolation point for serial resitance (\"r0.base_values\") as updatable." ] }, { "cell_type": "code", "execution_count": 17, "id": "e7ac6846-b0a9-4f42-8bbd-397acca91f77", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "('r0.base_values',)" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "asoh.mark_updatable('r0.base_values')\n", "asoh.updatable_names" ] }, { "cell_type": "markdown", "id": "c81492e8-778b-4a34-af41-03367ee3889b", "metadata": {}, "source": [ "Then define uncertainties in the transient state (SOC and hysteresis values)\n", "and the resistance. Each are expressed using covariance matrices." ] }, { "cell_type": "code", "execution_count": 18, "id": "cda8b489-def8-481a-aa43-a063ee5a6eb5", "metadata": {}, "outputs": [], "source": [ "asoh_covar = np.array([[0.001]])\n", "tran_covar = np.diag([0.0001, 1e-7])" ] }, { "cell_type": "markdown", "id": "a91610cc-b53d-4b8a-a925-a6cce1366806", "metadata": {}, "source": [ "The state estimator requires estimates for the noise in the model and measurement.\n", "We'll make them all rather small" ] }, { "cell_type": "code", "execution_count": 19, "id": "30c75b15-87d1-4455-9b3a-c4e7c1350587", "metadata": {}, "outputs": [], "source": [ "voltage_err = 1.0e-03 # mV voltage error\n", "noise_sensor = ((voltage_err / 2) ** 2) * np.eye(1)\n", "noise_asoh = 1.0e-10 * np.eye(asoh_covar.shape[0])\n", "noise_tran = 1.0e-08 * np.eye(2)" ] }, { "cell_type": "code", "execution_count": 20, "id": "6bcecd82-d5c8-430b-84b3-90e783e7ecde", "metadata": {}, "outputs": [], "source": [ "from moirae.estimators.online.joint import JointEstimator\n", "from moirae.models.ecm.ins_outs import ECMInput\n", "estimator = JointEstimator.initialize_unscented_kalman_filter(\n", " cell_model=EquivalentCircuitModel(),\n", " initial_asoh=asoh.model_copy(deep=True),\n", " initial_inputs=ECMInput(\n", " time=0,\n", " current=0,\n", " ),\n", " initial_transients=state.model_copy(deep=True),\n", " covariance_asoh=asoh_covar,\n", " covariance_transient=tran_covar,\n", " transient_covariance_process_noise=noise_tran,\n", " asoh_covariance_process_noise=noise_asoh,\n", " covariance_sensor_noise=noise_sensor\n", ")" ] }, { "cell_type": "markdown", "id": "2859824d-e1ff-4baa-b56d-5b092b1c9fae", "metadata": {}, "source": [ "Use the estimator with a BatteryDataset through Moirae's `run_online_estimate` interface" ] }, { "cell_type": "code", "execution_count": 21, "id": "34a5f406-abfd-4de7-ac73-af8a88de7a6d", "metadata": {}, "outputs": [], "source": [ "from moirae.interface import run_online_estimate\n", "estimates, estimator = run_online_estimate(\n", " dataset=data,\n", " estimator=estimator,\n", ")" ] }, { "cell_type": "markdown", "id": "bc09ad60-67fa-4658-a75a-228c7a588389", "metadata": {}, "source": [ "The interface returns the estimator after running over the data" ] }, { "cell_type": "code", "execution_count": 22, "id": "fb1e541d-f2cc-46ad-b005-fc32eee4bc8a", "metadata": {}, "outputs": [], "source": [ "est_state, est_asoh = estimator.get_estimated_state()" ] }, { "cell_type": "code", "execution_count": 23, "id": "0c582f6a-a7ac-41c5-a988-a03950562b30", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Original r0: 80.0 mOhm\n", "Fit r0: 100.6 mOhm\n" ] } ], "source": [ "print(f'Original r0: {asoh.r0.base_values.item() * 1000:.1f} mOhm\\n'\n", " f'Fit r0: {est_asoh.r0.base_values.item() * 1000:.1f} mOhm')" ] }, { "cell_type": "markdown", "id": "c5fd0c01-1385-420e-a832-a3fdd9251875", "metadata": {}, "source": [ "Note how the estimated resistance has changed from 80 to 100 mΩ after running the filter.\n", "\n", "The other output is a dataframe showing how the estimates for resistance and the other variables\n", "changed over time." ] }, { "cell_type": "code", "execution_count": 24, "id": "e58f40af-f0f2-4cf6-8dfe-c4ab820b9b29", "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", "
sochystr0.base_valuessoc_stdhyst_stdr0.base_values_stdterminal_voltageterminal_voltage_std
00.0018680.0000020.0986810.0000911.099890e-070.0000912.0800001.100370e-03
10.0024240.0000020.0986830.0000911.139484e-070.0000912.1011065.201244e-07
20.0029800.0000020.0986830.0000911.175263e-070.0000912.1016643.998351e-07
30.0035350.0000020.0986840.0000911.207015e-070.0000912.1022213.635216e-07
40.0040910.0000020.0986840.0000911.234826e-070.0000912.1027773.477670e-07
\n", "
" ], "text/plain": [ " soc hyst r0.base_values soc_std hyst_std \\\n", "0 0.001868 0.000002 0.098681 0.000091 1.099890e-07 \n", "1 0.002424 0.000002 0.098683 0.000091 1.139484e-07 \n", "2 0.002980 0.000002 0.098683 0.000091 1.175263e-07 \n", "3 0.003535 0.000002 0.098684 0.000091 1.207015e-07 \n", "4 0.004091 0.000002 0.098684 0.000091 1.234826e-07 \n", "\n", " r0.base_values_std terminal_voltage terminal_voltage_std \n", "0 0.000091 2.080000 1.100370e-03 \n", "1 0.000091 2.101106 5.201244e-07 \n", "2 0.000091 2.101664 3.998351e-07 \n", "3 0.000091 2.102221 3.635216e-07 \n", "4 0.000091 2.102777 3.477670e-07 " ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "estimates.head()" ] }, { "cell_type": "code", "execution_count": 25, "id": "77c1af86-5a10-4bb6-ad39-655bad07ed0b", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "fig, ax = plt.subplots(figsize=(3.5, 2.))\n", "\n", "ax.plot(raw_data['test_time'].iloc[1:], estimates['r0.base_values'] * 1000)\n", "\n", "ax.set_ylim([90, 110])\n", "\n", "ax.set_xlabel('Time (s)')\n", "ax.set_ylabel('R0 (m$\\\\Omega$)')\n", "\n", "fig.tight_layout()" ] }, { "cell_type": "markdown", "id": "341d4073-91e6-48c2-abfa-ad2ef67912bd", "metadata": {}, "source": [ "Note how the resistance is corrected very quickly and becomes exact around 1800 seconds, which corresponds to the current pulse.\n", "The agreement both shows how online estimators can quickly find the value of parameter values and, importantly,\n", "that their accuracy is contingent on whether the data provided allows changes in the model parameters to have a large effect." ] } ], "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 }