GlitchGAN is a class-conditional generative model that synthesizes realistic
gravitational-wave detector glitches directly in the time domain.
It is built on the cDVGAN (Conditional Derivative GAN) architecture,
which uses a first-derivative discriminator alongside the standard signal
discriminator to enforce temporal smoothness in generated waveforms.
The model is trained on high-quality glitch reconstructions produced by
DeepExtractor, a U-Net framework
for glitch reconstruction from LIGO strain data, covering seven common glitch
classes observed during LIGO's third observing run (O3).
1from cdvgan import GlitchGAN
2
3# Download pretrained weights automatically (cached after first call)
4model = GlitchGAN.from_pretrained()
5
6# Generate 10 Blip glitches at SNR 50
7blips = model.generate("Blip", n=10, snr=50)
8# blips.shape → (10, 8192) — 2 s at 4096 Hz
9
10# Generate a mix of classes
11glitches = model.generate(["Blip", "Tomte", "Whistle"], n=3, snr=30)
12
13# Class interpolation — hybrid Blip/Koi Fish morphology
14hybrids = model.interpolate([0.5, 0, 0.5, 0, 0, 0, 0], n=5)
The model was trained on DeepExtractor reconstructions of real LIGO glitches
from O3 (2019–2020), curated using
Gravity Spy
classifications.
Seven glitch classes were selected with balanced class sizes.
Waveforms are whitened and normalized before training; the generator
therefore learns a normalized waveform distribution and SNR scaling is
applied at inference time.
UMAP embeddings show strong overlap between real and synthetic samples
for most classes. Whistle glitches show partial separation, attributed to
the model's difficulty with fine-scale high-frequency structure.
1@article{Dooney2026GlitchGAN,
2 title = {Realistic Time-Domain Synthesis of Gravitational-Wave Detector
3 Glitches using Class-Conditional Derivative Generative Adversarial Networks},
4 author = {Dooney, Tom and de Boer, Mees and Narola, Harsh and Lopez, Melissa
5 and Bromuri, Stefano and Tan, Daniel Stanley and Van Den Broeck, Chris},
6 journal = {Physical Review D},
7 year = {2026},
8}