OscilloWatch
PMU data monitoring tool that detects and gives early warnings for poorly damped low-frequency oscillations in power systems.
Uses the Hilbert-Huang transform (HHT) on segments of data samples and uses an algorithm to find and characterize oscillatory modes from the Hilbert spectrum. Raises an alarm if a sustained with poor damping is found.
Made for my master's thesis, which describes how it works in great detail. It will be linked here when published.
Please note that this is meant as a proof of concept and something that can be built upon to become useful. It does not have a proper UI and is unlikely to be very useful in an actual control room its current state.
Basic Usage
Installation
To install with pip:
pip install OscilloWatch
pip install synchrophasor @ git+https://github.com/hallvar-h/pypmu
(Synchrophasor (pyPMU) must be installed manually because it uses a specific fork only accessible through direct GitHub link, which PyPI does not allow.)
You can also install it by downloading the zip file with the source code or by cloning with Git. The following dependencies must then be installed manually:
- numpy
- scipy
- matplotlib
- pyPMU (this fork)
Settings
Settings are assigned by creating an OWSettings object with the
desired settings as constructor parameters. All settings are explained
here. They are split into basic settings, which most
users likely need to check/change, and advanced settings, which is
intended only for advanced users who know how the application works.
Signal Analysis Modes
There are two options for analyzing a signal: Signal snapshot
analysis and real-time analysis. Below are basic explanations for
how to use them. See example scripts in the examples folder for
practical examples.
Signal Snapshot Analysis Mode
Analyzes a pre-given signal as if it were analyzed in real time.
- Obtain signal in a list or array.
- Create
OWSettingsobject with the settings you want. - Create
SignalSnapshotAnalysisobject with yourOWSettingsobject and input signal as parameters. - Run analysis.
# input_signal contains the signal that will be analyzed
settings = OWSettings(
segment_length_time=10,
extension_padding_time_start=10,
extension_padding_time_end=2,
minimum_frequency=0.1
minimum_amplitude=1e-4
)
sig_an = SignalSnapshotAnalysis(input_signal, settings)
sig_an.analyze_whole_signal()
Real-Time Analysis Mode
Connects to a PMU or PDC and analyzes the data in real time.
- Create
OWSettingswith the settings you want, including details on the device you want to connect to. - Create
RealTimeAnalysisobject with yourOWSettingsobject as a parameter. - Run analysis.
settings = OWSettings(
ip="192.168.1.10",
port=50000,
sender_device_id=1410,
pmu_id=1410,
channel="VA",
phasor_component="magnitude",
segment_length_time=10,
extension_padding_time_start=10,
extension_padding_time_end=2,
minimum_frequency=0.1
minimum_amplitude=1e-4
)
rta = RealTimeAnalysis(settings)
rta.start() # Infinite loop
Results
Numerical results are stored in table form in a CSV file. Explanations
for the results are given here. They are split into
basic and advanced results, similar to the settings. By default, only
the basic results are included by default. Advanced results can be
included by enabling the setting include_advanced_results.
Additionally, results are stored in a PKL file with the Pickle library.
This allows advanced users to access all variables, plots etc. from the
analysis, and it can be used for the post-processing methods in the
examples/post_processing folder.
Metadata
Release files for OscilloWatch 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| oscillowatch-0.1.0.tar.gz | 48.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| oscillowatch-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 106.0 kB
Release files / oscillowatch-0.1.0.tar.gz
| Download URL | oscillowatch-0.1.0.tar.gz |
|---|---|
| Size | 48.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
59759ce1b4dc75af2022ea8bbf4da96f0f1f66edfed8427bed01b4d0e77c3ed7
|
|
BLAKE2b-256 checksum How to use checksums |
7141e3d678d4590a602a78b79191d2b2e99c7f67f6d416ee058f427f29fd1e39
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.0 CPython/3.10.11
|
Release files / oscillowatch-0.1.0-py3-none-any.whl
| Download URL | oscillowatch-0.1.0-py3-none-any.whl |
|---|---|
| Size | 57.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f810ade18510bb22e4b1eac2d2b458432e5f7177d75ec3f48f0e67770e0318e2
|
|
BLAKE2b-256 checksum How to use checksums |
d0fb4a27085f26e040423f7a0bde3dd0f02bb21a060791f9e63873acaf31877c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.0 CPython/3.10.11
|