Note
Go to the end to download the full example code.
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 Calculate 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.
These data are available as part of the Auxiliary Channel Three Hour Release.
First, we import the TimeSeriesDict
from gwpy.timeseries import TimeSeriesDict
and then get()
the data for the differential-arm
length servo control loop error signal (H1:LSC-DARM_IN1_DQ
) and the
PSL periscope accelerometer (H1:PEM-CS_ACC_PSL_PERISCOPE_X_DQ
):
data = TimeSeriesDict.get(
["H1:LSC-DARM_IN1_DQ", "H1:PEM-CS_ACC_PSL_PERISCOPE_X_DQ"],
1186741560,
1186742160,
host="nds.gwosc.org",
)
darm = data["H1:LSC-DARM_IN1_DQ"]
acc = data["H1:PEM-CS_ACC_PSL_PERISCOPE_X_DQ"]
/home/duncan.macleod/gwpy-nightly-build/conda/envs/gwpy-nightly-3.11/lib/python3.11/site-packages/igwn_auth_utils/requests.py:46: DeprecationWarning: Support for identity-based X.509 credentials for LIGO.ORG is being dropped.
Calls to this utility will stop working on/around 20 May 2025.
For details on this change please see
https://computing.docs.ligo.org/guide/compsoft/roadmap/LVK/x509_retirement/
If you have questions about this message, or its implications, please
consider opening an IGWN Computing Help Desk ticket:
https://git.ligo.org/computing/helpdesk/-/issues/new
return func(*args, **kwargs)
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 = darm.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, 2000)
ax.set_title(
"Coherence between PSL periscope motion and LIGO-Hanford strain data",
)
ax.grid(visible=True, which="both", axis="both")
ax.colorbar(label="Coherence", clim=[0, 1], cmap="plasma")
plot.show()

Total running time of the script: (0 minutes 3.649 seconds)