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
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 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e5033c431efaad63a6b3b70bec58fa6b114018c68795b574b6545374c56cb895
|
|
| MD5 |
b3c66c2b7a9d4998096216015d0421b8
|
|
| BLAKE2b-256 |
b221b1aa45859accebe29b43a6eea6f7362d40b88b3132c3fd48082e6416d98b
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ba48a0066b757ecf9f5df12e9869f32224c113f1ec28567bdf197fa399948fb8
|
|
| MD5 |
1c7a907b5c9491704e38ecbbc6402d48
|
|
| BLAKE2b-256 |
1560cb2bdf466d3a76c06b951382070d137999fd0b20aeb6b94de4bf1d1c4c1e
|