Note
Go to the end to download the full example code.
Wheeler-Kiladis Space-Time Spectra#
The Wheeler-Kiladis (WK) Space-Time Spectra is a diagnostic tool used in meteorology to analyze tropical atmospheric waves by decomposing their variability in both wavenumber (space) and frequency (time) domains. It extends traditional Fourier analysis by applying a two-dimensional (2D) spectral decomposition to isolate and characterize different wave modes (e.g., Kelvin waves, Rossby waves, and mixed Rossby-gravity waves) based on their dispersion relations.
Key Features#
Uses symmetrical (eastward/westward) and antisymmetrical (north-south) Fourier transforms to separate wave types.
Compares observed spectra with theoretical dispersion curves of shallow-water waves to identify dominant modes.
Helps distinguish convectively coupled waves (linked to tropical rainfall) from uncoupled waves.
Applications in Meteorology#
Tropical Wave Analysis: Identifies and tracks Kelvin waves, equatorial Rossby waves, and Madden-Julian Oscillation (MJO) signals.
Convective Coupling Studies: Examines how waves interact with tropical convection (e.g., in monsoon systems).
Model Validation: Evaluates whether climate models correctly simulate tropical wave dynamics.
Extreme Weather Prediction: Helps understand precursors to tropical cyclogenesis and organized convection.
The WK method is particularly useful for studying large-scale tropical variability and remains a fundamental tool in tropical meteorology and climate research.
Before proceeding with all the steps, first import some necessary libraries and packages
import xarray as xr
import matplotlib.pyplot as plt
import easyclimate as ecl
The example here is to avoid longer calculations, thus we open the pre-processed result data directly.
Tip
You can download following datasets here: Download olr_smooth_data.nc
data = xr.open_dataset('olr_smooth_data.nc')['olr'].sel(lat = slice(-15, 15))
data
Setting the basic parameters and removing the dominant signal

<matplotlib.contour.QuadContourSet object at 0x7ff9e41bcc70>
Separation of symmetric and asymmetric parts
data_as = ecl.field.equatorial_wave.decompose_symasym(data_dt)
data_as.isel(time = 0).plot.contourf(levels = 21)

<matplotlib.contour.QuadContourSet object at 0x7ff9e1ffc130>
Calculation of spectral coefficients
Drawing asymmetric parts

And drawing symmetric parts

Total running time of the script: (0 minutes 4.101 seconds)