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)

../../../_images/coherence-41.png