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.0.tar.gz (2.0 MB 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.0-py3-none-any.whl (40.0 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for piwavelet-2.0.0.tar.gz
Algorithm Hash digest
SHA256 e5033c431efaad63a6b3b70bec58fa6b114018c68795b574b6545374c56cb895
MD5 b3c66c2b7a9d4998096216015d0421b8
BLAKE2b-256 b221b1aa45859accebe29b43a6eea6f7362d40b88b3132c3fd48082e6416d98b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: piwavelet-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 40.0 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ba48a0066b757ecf9f5df12e9869f32224c113f1ec28567bdf197fa399948fb8
MD5 1c7a907b5c9491704e38ecbbc6402d48
BLAKE2b-256 1560cb2bdf466d3a76c06b951382070d137999fd0b20aeb6b94de4bf1d1c4c1e

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