4. Calculating the time-dependent coherence between two channels¶
The standard coherence calculation outputs a frequency series
(FrequencySeries
) giving a time-averaged measure
of coherence. See Calculating the coherence between two channels for an
example.
The TimeSeries
method coherence_spectrogram()
performs the
same coherence calculation every stride
, giving a time-varying coherence
measure.
First, we import the TimeSeriesDict
from gwpy.timeseries import TimeSeriesDict
and then get()
the data for the strain output
(H1:GDS-CALIB_STRAIN
) and the PSL periscope accelerometer
(H1:PEM-CS_ACC_PSL_PERISCOPE_X_DQ
):
data = TimeSeriesDict.get(
['H1:GDS-CALIB_STRAIN', 'H1:PEM-CS_ACC_PSL_PERISCOPE_X_DQ'],
1126260017,
1126260617,
)
hoft = data['H1:GDS-CALIB_STRAIN']
acc = data['H1:PEM-CS_ACC_PSL_PERISCOPE_X_DQ']
We can then calculate the coherence()
of one
TimeSeries
with respect to the other, using an 2-second Fourier
transform length, with a 1-second (50%) overlap:
coh = hoft.coherence_spectrogram(acc, 10, fftlength=.5, overlap=.25)
Finally, we can plot()
the
resulting data
plot = coh.plot()
ax = plot.gca()
ax.set_ylabel('Frequency [Hz]')
ax.set_yscale('log')
ax.set_ylim(10, 8000)
ax.set_title(
'Coherence between PSL periscope motion and LIGO-Hanford strain data',
)
ax.grid(True, 'both', 'both')
ax.colorbar(label='Coherence', clim=[0, 1], cmap='plasma')
plot.show()
(png
)