# 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()
``````