Skip to main content

Pure Python wavelet, cross-wavelet and wavelet coherence analysis

Project description

PIWavelet

A modern Python library for continuous wavelet analysis, cross-wavelet transforms, and wavelet coherence.

PIWavelet provides a modular and scientifically robust implementation of:

  • Continuous Wavelet Transform (CWT)
  • Cross-Wavelet Transform (XWT)
  • Wavelet Coherence (WTC)
  • Torrence & Webster smoothing operators
  • Cone of Influence (COI)
  • Multiple mother wavelets
  • Publication-quality visualization tools

The library is designed for scientific computing, signal analysis, geophysics, astrophysics, climatology, and time-frequency analysis applications.


Features

Continuous Wavelet Transform

  • Complex and real wavelets
  • FFT-based implementation
  • Scale-frequency conversion
  • Cone of Influence estimation
  • Multi-scale time-frequency analysis

Cross-Wavelet Transform

  • Cross-wavelet power
  • Relative phase analysis
  • Shared spectral energy detection

Wavelet Coherence

  • Magnitude-squared wavelet coherence
  • Torrence-Webster smoothing operators
  • Scale-aware temporal smoothing
  • Localized time-frequency coherence analysis
  • Phase relationship visualization

Supported Wavelets

  • Morlet
  • Paul
  • DOG (Derivative of Gaussian)
  • Mexican Hat

Visualization

  • Wavelet power spectrum plots
  • Cross-wavelet plots
  • Wavelet coherence plots
  • Cone of Influence overlay
  • Phase arrows
  • Log-period axis formatting
  • Publication-ready figures

Installation

pip install piwavelet

Development installation:

git clone <repository-url>
cd piwavelet
pip install -e .

Quick Start

Continuous Wavelet Transform

import numpy as np

from piwavelet.transforms import cwt
from piwavelet.wavelets import Morlet

# synthetic signal

dt = 0.25

time = np.arange(0, 512) * dt

signal = (
    np.sin(2 * np.pi * time / 32)
    + 0.5 * np.sin(2 * np.pi * time / 8)
)

result = cwt(
    signal=signal,
    dt=dt,
    wavelet=Morlet(),
)

Wavelet Coherence

import numpy as np

from piwavelet.transforms import wavelet_coherence
from piwavelet.wavelets import Morlet

np.random.seed(42)

# ------------------------------------------------------------------
# synthetic signal
# ------------------------------------------------------------------

dt = 0.25

time = np.arange(0, 512) * dt

# localized coherent structure
period = 16

shared = np.sin(
    2 * np.pi * time / period
)

x = shared.copy()

x += 0.4 * np.sin(
    2 * np.pi * time / 6
)

x += 0.5 * np.random.randn(len(time))

window = np.exp(
    -0.5 * ((time - 64) / 5) ** 2
)

y = (
    window * shared
    + 0.8 * np.random.randn(len(time))
)

# ------------------------------------------------------------------
# wavelet coherence
# ------------------------------------------------------------------

result = wavelet_coherence(
    x,
    y,
    dt=dt,
    wavelet=Morlet(),
)

This example produces a localized coherence region centered approximately at:

  • time ≈ 64
  • period ≈ 16

which demonstrates proper time-frequency localization.


Plotting

Wavelet Coherence Plot

from piwavelet.plotting import plot_wavelet_coherence

fig = plot_wavelet_coherence(
    result,
    title="Wavelet Coherence",
    show_phase=True,
)

Scientific Background

PIWavelet follows the classical formulations presented in:

  • Torrence, C. & Compo, G. P. (1998) "A Practical Guide to Wavelet Analysis"

  • Torrence, C. & Webster, P. J. (1999) "Interdecadal Changes in the ENSO-Monsoon System"

  • Grinsted, A., Moore, J. C., & Jevrejeva, S. (2004) "Application of the cross wavelet transform and wavelet coherence to geophysical time series"

Implemented features include:

  • scale-normalized coherence
  • Torrence-Webster smoothing
  • scale-dependent temporal smoothing
  • cone of influence estimation
  • phase relationship analysis

Architecture

The project is organized into modular components:

piwavelet/
├── transforms/
├── wavelets/
├── smoothing/
├── plotting/
├── significance/
└── utils/

Development Goals

Planned and ongoing features:

  • Significance testing
  • Monte Carlo coherence significance
  • Partial wavelet coherence
  • Multivariate coherence
  • GPU acceleration
  • Streaming transforms
  • Better statistical diagnostics
  • Xarray integration
  • Interactive plotting

License

MIT License


Contributing

Contributions, issues, and suggestions are welcome.

Please open an issue or submit a pull request.

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

piwavelet-2.0.0a1.tar.gz (854.1 kB view details)

Uploaded Source

Built Distribution

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

piwavelet-2.0.0a1-py3-none-any.whl (33.2 kB view details)

Uploaded Python 3

File details

Details for the file piwavelet-2.0.0a1.tar.gz.

File metadata

  • Download URL: piwavelet-2.0.0a1.tar.gz
  • Upload date:
  • Size: 854.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for piwavelet-2.0.0a1.tar.gz
Algorithm Hash digest
SHA256 fe1c6036c325af7ccb367964b1678ed78e0201b10572f942a69e7b336c531aad
MD5 291038bb8059230f5b3037a765ab7045
BLAKE2b-256 d0c092bda0a55b2c6025c4afbad4fe86def39f339db8aa01223fe6b13c3945f7

See more details on using hashes here.

File details

Details for the file piwavelet-2.0.0a1-py3-none-any.whl.

File metadata

  • Download URL: piwavelet-2.0.0a1-py3-none-any.whl
  • Upload date:
  • Size: 33.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for piwavelet-2.0.0a1-py3-none-any.whl
Algorithm Hash digest
SHA256 15ad0a5d91605c87e6ff23ff623480d0d77ed63e63f51f67a22081bc69e34cb3
MD5 9232ced705993c24cdab93f41f68bdbc
BLAKE2b-256 cf6d6d64e9bbd9bd1bbf6d5ec8a1a01eff938ee7ac9847f930d85ae6a7491765

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