Quickstart

Create and analyze time series data from multiple channels.

Note

For a more detailed learning path, see getting_started.

Migration from GWpy

To use GWpy code with GWexpy, simply replace the imports:

# GWpy (legacy)
# from gwpy.timeseries import TimeSeries
# from gwpy.frequencyseries import FrequencySeries

# GWexpy (recommended)
from gwexpy.timeseries import TimeSeries, TimeSeriesDict, TimeSeriesMatrix
from gwexpy.frequencyseries import FrequencySeriesMatrix

Generate and Plot Multi-channel Time Series

Generate multiple channels of time series data from an experimental noise model:

import numpy as np
from gwexpy.timeseries import TimeSeriesDict
from gwexpy.signal.noise import PowerLawNoise

# Setup noise model (1/f noise: beta=1)
noise_model = PowerLawNoise(beta=1, dt=1/1024)

# Generate multi-channel time series
tsd = TimeSeriesDict()
tsd["H1:STRAIN"] = noise_model.generate(duration=64)  # Hanford
tsd["L1:STRAIN"] = noise_model.generate(duration=64)  # Livingston

# Plot
plot = tsd.plot()
plot.show()

Batch CSD Conversion: Time Series to Frequency Matrix

Transform multiple channels from time domain to frequency domain, computing cross-spectral densities:

# Convert TimeSeriesDict to matrix
ts_matrix = tsd.to_matrix()

# Compute CSD (Welch's method, 50% overlap)
csm = ts_matrix.csd(
    fftlength=4,
    overlap=0.5,
    window='hann'
)

# Plot frequency matrix
freq_plot = csm.plot()
freq_plot.show()

# Analyze specific frequency bins
print(f"Frequency range: {csm.frequencies[0]:.1f} - {csm.frequencies[-1]:.1f} Hz")
print(f"H1-L1 cross-spectrum (10 Hz): {csm['H1:STRAIN', 'L1:STRAIN'].interpolate(10).value:.2e}")