gw_generator
收藏资源简介:
一个双探测器(H1 + L1)事件级合成引力波数据集生成器,用于GW-YOLO风格机器学习基准测试。每个天体物理事件在探测器之间共享一个物理啁啾信号,而每个探测器级样本具有独立的噪声实现、探测器效应、应变文件、Q变换图像、YOLO标签和配对元数据。
An event-level synthetic gravitational wave dataset generator with two detectors (H1 and L1), designed for GW-YOLO-style machine learning benchmark testing. Each astrophysical event shares a single physical chirp signal across the two detectors, while each detector-level sample includes independent noise realizations, detector effects, strain files, Q-transform images, YOLO labels, and paired metadata.
数据集概述
gw_generator 是一个面向 GW-YOLO 风格机器学习基准测试的合成引力波数据集生成器,基于双探测器(H1 + L1)的事件级别合成数据。每个天体物理事件在探测器之间共享同一个物理啁啾信号,而每个探测器级别的样本拥有独立的噪声实现、探测器效应、应变文件、Q变换图像、YOLO标签和配对元数据。
该数据集是 GW-YOLO 风格的研究/教育近似实现,并非任何已发布 GW-YOLO 数据集的官方复现。
基准任务
| # | 任务 | 模型类型 | 标签 |
|---|---|---|---|
| 1 | 单探测器啁啾/毛刺检测 | YOLO 目标检测 | labels_yolo/ |
| 2 | 跨探测器同啁啾匹配 | Siamese / 配对分类器 | match_pairs.csv, negative_pairs.csv, pair_metadata.csv |
| 3 | 一致性事件级检测 | 事件级融合 | event_metadata.csv |
| 4 | 低信噪比鲁棒性与毛刺抑制 | 上述任意类型,分层 | metadata.csv(信噪比分箱,毛刺标志) |
核心特性
- 共享啁啾,独立探测器:每个事件一个波形加内在参数;每个探测器独立噪声、可选的毛刺、到达时间延迟(±10毫秒)、幅度缩放、可选的符号翻转以及每个探测器独立的信噪比。
- 物理波形:通过 PyCBC 生成(BBH/BNS),并提供一个解析吸气啁啾回退方案(由啁啾质量和低频截止频率设置频率扫描),使流水线无需科学栈即可运行。
- LIGO Q变换:默认使用 GWpy(Omega Q扫描),并提供仅需 numpy/scipy 的内置常数Q(高斯滤波器组)回退方案。
- aLIGO着色噪声:对应变进行着色(地震墙、约215 Hz桶、散粒噪声上升);GWpy 的
q_transform返回归一化能量(每频率中位数归一化),因此 Q变换图像由 GWpy 本身直接处理,无需单独的应变白化步骤。 - 无泄漏:事件级训练/验证/测试集划分,并附带构建后验证器。
- 丰富的元数据:包含探测器样本、事件、正/负/组合配对表,以及完整的
dataset_config.json以保证可复现性。
安装
bash pip install -r requirements.txt
核心依赖(numpy、scipy、matplotlib、pillow)可运行所有功能。pycbc 和 gwpy 为可选但推荐安装,用于物理波形和真实的 LIGO Q变换。
快速开始
bash
默认:GWpy Q变换 + PyCBC 波形
python build_dataset.py --num-events 5 --detectors H1 L1 --duration 4.0 --output-dir out_smoke --seed 42
无需科学栈(内置常数Q + 解析啁啾)
python build_dataset.py --num-events 5 --detectors H1 L1 --duration 4.0 --output-dir out_smoke --qtransform-backend scipy --no-pycbc --seed 42
运行测试(无需 PyCBC/GWpy——它们使用离线回退方案):
bash python -m unittest discover -s tests -v
频率坐标系(固定)
Q变换窗口、显示轴和 YOLO y 归一化均使用硬编码的对数 20–1000 Hz 系统,确保图像和标签始终共享一个坐标框架。啁啾插入按源类型限制在经验证的 LIGO 频段:
| 类型 | 插入频段 | 依据 |
|---|---|---|
| BBH | 20–350 Hz | GW150914 从35→250 Hz 扫描,FLSO 约220 Hz |
| BNS | 20–1000 Hz | 从约10 Hz 到约1 kHz 并合的吸气扫描 |
| NSBH | 20–400 Hz | 典型 FLSO 约400 Hz |
输出布局
<output-dir>/ metadata.csv 每个探测器级别样本一行(丰富模式) event_metadata.csv 每个天体物理事件一行 match_pairs.csv 正(同啁啾,跨探测器)配对 negative_pairs.csv 负配对(7种类型,含困难负样本) pair_metadata.csv 正+负配对组合表(pair_label 0/1) task_protocols.yaml 四个基准任务定义+规则 gw_data.yaml YOLO 数据配置文件(指向 qtransform_normalized) dataset_config.json 完整 DatasetConfig 转储(来源信息) raw_series/{train,val,test}/{H1,L1}/{sample_id}.npy normalized_series/{...}/{sample_id}.npy qtransform_raw/{...}/{sample_id}.png 纯频谱图(分析用) qtransform_normalized/{...}/{sample_id}.png 默认 YOLO 输入 qtransform_display_raw/{...}/{sample_id}.png 带坐标轴和0–25颜色条 qtransform_display_normalized/{...}/{sample_id}.png labels_yolo/{train,val,test}/{H1,L1}/{sample_id}.txt
元数据模式(亮点)
metadata.csv 记录样本 ID 与关系(sample_id/event_id/chirp_id/counterpart_sample_ids)、类别与信噪比(global_class/snr_bin/detector_snr/network_snr)、探测器效应(detector_time_delay/amplitude_scale/phase_or_sign_flip)、频率坐标来源、所有文件路径、能量统计、噪声/毛刺 ID,以及为单表机器学习使用而反范式化的物理参数(mass1/2、spin1z/2z、chirp_mass、total_mass、mass_ratio、chi_eff、distance、f_lower、waveform_approximant、waveform_source)、YOLO 啁啾边界框(chirp_yolo_cx/cy/w/h、has_label、num_boxes)、毛刺时频细节和采集字段(sample_rate、duration、n_samples)。
模块映射
| 文件 | 职责 |
|---|---|
config.py |
DatasetConfig + 所有 CSV 模式(单一事实来源) |
waveform_generator.py |
PyCBC BBH/BNS + 解析啁啾回退方案 |
noise_generator.py |
aLIGO 着色高斯噪声 + 合成毛刺 |
injection.py |
目标信噪比注入、并合锚定、探测器效应 |
preprocessing.py |
将应变带限至 Q变换窗口(能量归一化由 GWpy 负责) |
coords.py |
共享的频率↔图像坐标映射 |
qtransform.py |
GWpy / 常数Q变换、能量归一化、训练+显示图像 |
label_generator.py |
瞬时频率标签 + Q脊线回退方案 |
pairs.py |
正/负/组合配对生成 |
validation.py |
泄漏与配对一致性验证器 |
protocols.py |
task_protocols.yaml + gw_data.yaml 写入器 |
build_dataset.py |
DatasetBuilder + 命令行界面 |
注意事项与限制
- 解析波形为前导阶(牛顿/四极)吸气近似;如需生产级保真度,请使用 PyCBC。
- 常数Q
scipy后端近似 Q变换;GWpy 才是真实的 Omega Q扫描。 - 每个探测器的延迟/幅度是采样得到的,并非从天球位置+天线响应推导得出(因此不存储
ra/dec/inclination字段)。




