Skip to main content

PMU data monitoring tool for giving early warnings for low-frequency oscillations in power systems.

Project description

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:


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.

  1. Obtain signal in a list or array.
  2. Create OWSettings object with the settings you want.
  3. Create SignalSnapshotAnalysis object with your OWSettings object and input signal as parameters.
  4. 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.

  1. Create OWSettings with the settings you want, including details on the device you want to connect to.
  2. Create RealTimeAnalysis object with your OWSettings object as a parameter.
  3. 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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

oscillowatch-0.1.0.tar.gz (48.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

oscillowatch-0.1.0-py3-none-any.whl (57.2 kB view details)

Uploaded Python 3

File details

Details for the file oscillowatch-0.1.0.tar.gz.

File metadata

  • Download URL: oscillowatch-0.1.0.tar.gz
  • Upload date:
  • Size: 48.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.10.11

File hashes

Hashes for oscillowatch-0.1.0.tar.gz
Algorithm Hash digest
SHA256 59759ce1b4dc75af2022ea8bbf4da96f0f1f66edfed8427bed01b4d0e77c3ed7
MD5 0d7892d983067257beba78876b3bc017
BLAKE2b-256 7141e3d678d4590a602a78b79191d2b2e99c7f67f6d416ee058f427f29fd1e39

See more details on using hashes here.

File details

Details for the file oscillowatch-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: oscillowatch-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 57.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.10.11

File hashes

Hashes for oscillowatch-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f810ade18510bb22e4b1eac2d2b458432e5f7177d75ec3f48f0e67770e0318e2
MD5 e700f03753492b277a779f8ab4512872
BLAKE2b-256 d0fb4a27085f26e040423f7a0bde3dd0f02bb21a060791f9e63873acaf31877c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page