A dynamic estimator for power systems
Project description
PowerDynamicEstimator
a Dynamic State Estimator for Power Systems
About
PowerDynamicEstimator is a dynamic state estimation (DSE) tool for power systems modeled by nonlinear Differential-Algebraic Equations (DAEs).
It is based on the Iterated Extended Kalman Filter (IEKF) and combines dynamic evolution equations, algebraic network equations, and phasor measurements to recursively estimate dynamic and algebraic states. It is especially suitable for centralized power systems DSE, when some component models are missing or unknown.
Features
- Simultaneous dynamic and algebraic (nodal voltage) states estimation
- Supports nonlinear DAE power system models
- Works with missing or unknown component models (unknown injectors)
- Supports bounds (limits) on differential states
- Supports explicit (forward Euler) and implicit (backward Euler and trapezoidal rule) integration schemes
- Supports 50 Hz and 60 Hz systems
- Configurable as Extended Kalman Filter (EKF) for fast execution or Iterated Extended Kalman Filter (IEKF) for more accurate estimation
- Possible to simulate any power system topology
- Easy to configure Kalman filter settings
- User-defined dynamic and static models can be integrated.
Installation
To get started with PowerDynamicEstimator, follow these steps:
Option 1: Install from Source (with venv)
- Clone the repository:
git clone https://gitlab.nccr-automation.ch/mkatanic/powerdynamicestimator
cd PowerDynamicEstimator
- Create and activate a virtual environment:
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
- Install Dependencies:
pip install -r requirements.txt
Option 2: Install from Source (with conda)
- Clone the repository:
git clone https://gitlab.nccr-automation.ch/mkatanic/powerdynamicestimator
cd PowerDynamicEstimator
- Create the
condaenvironment:
conda env create -f environment.yaml
conda activate pydynamicestimator
Option 3: Install from PyPI
pip install pydynamicestimator
Documentation
Full documentation is available online at:
👉 https://powerdynamicestimator-34b372.pages.nccr-automation.ch/
Alternatively, the documentation following the Sphinx standard and can be found locally by opening ./docs/build/html/index.html from the root folder:
Windows:
start docs/build/html/index.html
Linux:
xdg-open docs/build/html/index.html
macOS:
open docs/build/html/index.html
Usage
Running the Estimator
- Navigate to the root directory:
cd pydynamicestimator
- Run the main script:
python -m main
Examples
You can check out the available examples in ./examples directory and get started with the estimator. See the docu for more details about the test cases.
Basic Usage
An interactive demo showcasing how to use the PowerDynamicEstimator package is available on Kaggle:
IEEE 39 bus with renewables
The test case includes grid-forming and grid-following converters.
Important Notes
- Injector Limitation: Currently, the system supports only one injector per node due to initialization ambiguity. To handle multiple injectors per node, you can create a new node connected via a branch with very small impedance to simulate this behavior.
Parameters
System dynamic and static parameters, including the topology, are specified in the ./data subfolder. You can define the loads, generators, and their characteristics at specific nodes in the power system. Refer to the documentation for additional details.
Phasor Measurement Units (PMUs) used for estimation and their associated characteristics are defined in the file: ./data/.../est_param.txt.
Kalman Filter Settings
Adjust parameters related to the recursive state estimation process (e.g., noise covariance, initial error) in the ./config.py file. Refer to the documentation for additional details.
Acknowledgments
PowerDynamicEstimator was developed at Power Systems Laboratory at ETH Zurich. This work was supported as a part of NCCR Automation, a National Centre of Competence in Research, funded by the Swiss National Science Foundation (grant number 51NF40_225155).
If you use PowerDynamicEstimator in your research, please cite the following paper:
- Katanic, Milos, Lygeros, John, Hug, Gabriela. "Recursive dynamic state estimation for power systems with an incomplete nonlinear DAE model." IET Generation, Transmission & Distribution, 18(22), 3657-3668, 2024.
DOI: https://doi.org/10.1049/gtd2.13308
@article{powerdynamicestimator,
author = {Katanic, Milos and Lygeros, John and Hug, Gabriela},
title = {Recursive dynamic state estimation for power systems with an incomplete nonlinear DAE model},
journal = {IET Generation, Transmission \& Distribution},
volume = {18},
number = {22},
pages = {3657-3668},
keywords = {differential algebraic equations, Kalman filters, state estimation},
doi = {https://doi.org/10.1049/gtd2.13308},
url = {https://ietresearch.onlinelibrary.wiley.com/doi/abs/10.1049/gtd2.13308},
eprint = {https://ietresearch.onlinelibrary.wiley.com/doi/pdf/10.1049/gtd2.13308},
year = {2024}
}
Some proofs were omitted due to page limitation. Full version of the paper is available on ArXiv.
Version
Version 0.4.2 released on 13.05.2025
DOI: 10.5905/ethz-1007-842
License
This software is licensed under the GNU General Public License v3.0 (GPL-3.0).
Contact
For any questions or if you desired to contribute to this project, please contact me at mkatanic@ethz.ch.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pydynamicestimator-0.4.2.tar.gz.
File metadata
- Download URL: pydynamicestimator-0.4.2.tar.gz
- Upload date:
- Size: 6.0 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.2 CPython/3.8.2 Windows/10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
53812943dc3b8dc50517f603bd5d9fdeebfe6e59803e364214addcba47601a2d
|
|
| MD5 |
f36ae770d8ed18f4bf94284940d1dc5b
|
|
| BLAKE2b-256 |
4f9a93c80414961893079e1b805171205ccf43304239caf37a447834af78a8cc
|
File details
Details for the file pydynamicestimator-0.4.2-py3-none-any.whl.
File metadata
- Download URL: pydynamicestimator-0.4.2-py3-none-any.whl
- Upload date:
- Size: 5.9 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.2 CPython/3.8.2 Windows/10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
69abacf4638895f71200e4e4946f4c4970409e87fb9841ee3e1c3968881db605
|
|
| MD5 |
8d465d266da767df13e0c123f484301f
|
|
| BLAKE2b-256 |
2ecfb40941c16bb2792b00f5e774b6520a17ccf22c9d9fbcad9dd2b053bb8281
|