qtransform spectrogram seems to misrepresent frequencies
Created by: andrew-lundgren
I tried doing a Qscan of a few sine-Gaussians in white noise. The resulting spectrogram looks good, but the centers of the injections on the spectrogram are consistently below the central frequency. Here's a test plot, with four injections and lines through the central frequencies:
The code to produce this is:
from gwpy.timeseries import TimeSeries
from numpy import *
from numpy.random import normal
from scipy import signal
tlen_sec = 32
srate = 4096
inj_halflen=4
inj_step = 0.25
data = normal(0.,0.1,size=int(srate*tlen_sec))
time = arange(-inj_halflen,inj_halflen, 1./srate)
# Injection parameters
Q = 30.
bw = 3.3245/Q
frequencies = [32.,64.,128.,256.]
injs = []
for num, ff in enumerate(frequencies):
inj = signal.gausspulse(time, fc=ff, bw=bw)
idx=(len(data)-len(inj))/2
offset=idx + num*int(inj_step*srate)
data[offset:offset+len(inj)] += inj
data = TimeSeries(data, sample_rate=srate, name='fake', epoch=0)
result = data.q_transform(frange=(10,500))
plot = result.crop(tlen_sec/2.- inj_step, tlen_sec/2.+ inj_step*len(frequencies)).plot(figsize=[8, 6])
ax = plot.gca()
ax.set_yscale('log')
for ff in frequencies:
ax.axhline(ff)
plot.add_colorbar(clim=[0, 400], label='Normalized energy')
plot.show()