基本原理
Q变换是一种自适应时间-频率分辨率的时频表示方法,由 Chatterji 等人(2004)提出,广泛用于处理瞬态引力波信号的可视化与特征提取,论文地址https://arxiv.org/pdf/gr-qc/0412119.pdf。其核心数学表达式为
x ( τ , f ) = ∫ − ∞ ∞ x ( t ) w ( t − τ , f ) e − i 2 π f t d t x(\tau, f)=\int^\infty_{-\infty}x(t)w(t-\tau, f)e^{-i2\pi ft}\mathrm dt x(τ,f)=∫−∞∞x(t)w(t−τ,f)e−i2πftdt
式中, w ( t − τ , f ) w(t-\tau, f) w(t−τ,f)是以 τ \tau τ为中心的时域窗口,其宽度与 f f f成反比,从而高频处窗窄,低频处窗宽。其有效带宽 Δ f ≈ f Q \Delta f\approx\frac{f}{Q} Δf≈Qf。其中, Q Q Q为品质因子,无量纲,其定义为
Q = f c σ f Q=\frac{f_c}{\sigma_f} Q=σffc
其中 f c f_c fc是中心频率, σ f \sigma_f σf为带宽。
也就是说,Q变换通过Q值实现了对频率的自适应调节,从而在处理未知频率特征信号时,能够在效率和准确性上达成均衡。
gwpy封装
在gwpy中,提供了q_gram和q_transform两种封装,前者为底层计算函数,返回Q变换的原始复数系数矩阵,后者为高层封装函数,直接返回 Spectrogram 对象。
gwpy官网提供了基于q_transform的可视化示例,绘图如下

该图可以明显看到引力波出现的过程,绘图代码如下
from gwpy.timeseries import TimeSeries
# hdata = TimeSeries.get("H1", 1126259446, 1126259478) # 获取GW150914
# hdata.save("gw150914.hdf5")
hdata = TimeSeries.read("gw150914.hdf5")
qspecgram = hdata.q_transform(outseg=(1126259462.2, 1126259462.5))
plot = qspecgram.plot(figsize=[8, 4])
ax = plot.gca()
ax.set_xscale("seconds")
ax.set_yscale("log")
ax.set_ylim(20, 500)
ax.set_ylabel("Frequency [Hz]")
ax.grid(visible=True, axis="y", which="both")
ax.colorbar(cmap="viridis", label="Normalized energy")
plot.show()
参数
q_gram和q_transform中的核心参数是qrange和frange,二者功能为
- qrange 为搜索Q范围,覆盖不同纵横比的爆发信号,默认是(4,64)
- frange 频率搜索区间;限制计算量,避免低频噪声主导
- mismatch 最大允许失配度,用于控制时频网格密度
在上面的示例中,试用q_transform时输入了outseg参数,用于截取输出时段;减少内存占用,聚焦感兴趣区间。
小结
Q变换是一种自适应时频分析方法,由Chatterji等人提出,用于处理引力波信号。其核心在于通过品质因子Q实现频率自适应调节,高频区使用窄窗,低频区使用宽窗。gwpy库提供了q_gram和q_transform两种实现,后者可直接生成时频谱图。关键参数包括qrange(Q值范围)、frange(频率区间)和mismatch(网格密度控制)。示例代码展示了如何用q_transform分析GW150914引力波事件数据,通过设置outseg参数聚焦关键时段,生成能量归一化的对数频率时频谱图。该方法在未知频率信号

604

被折叠的 条评论
为什么被折叠?



