The FrequencySeries

While gravitational-wave detectors are time-domain instruments, their sensitivity is frequency dependent and so is often measured as a power-spectral-density over the range of interesting gravitational-wave frequencies (~10-10,000 Hz). Additionally, the auxiliary channels used to sense and control instrumental operations each have their own frequency-domain characteristics, contributing to the overall sensitivity spectrum.

The FrequencySeries object is used to represent any frequency series, including the power-spectral (and amplitude-spectral) density series describing instrument performance.

Analogously to the TimeSeries, a new FrequencySeries can be generated from any data sequence along with the minimal f0 and df metadata:

>>> from gwpy.frequencyseries import FrequencySeries
>>> spec = FrequencySeries([1,2,3,4,5,6,7,8,9,10], f0=0, df=1)
>>> print(spec)
FrequencySeries([ 1  2  3  4  5  6  7  8  9 10],
                name: None,
                unit: None,
                epoch: None,
                channel: None,
                f0: 0 Hz,
                df: 1 Hz,
                logf: False)

The full set of metadata that can be provided is as follows:

name Name for this data set
unit The physical unit of these data
epoch GPS epoch associated with these data
f0 Starting frequency for this FrequencySeries
df Frequency spacing of this FrequencySeries

Generating a FrequencySeries from a TimeSeries

The frequency-spectrum of a TimeSeries can be calculated using either of the following methods:

TimeSeries.psd Calculate the PSD FrequencySeries for this TimeSeries
TimeSeries.asd Calculate the ASD FrequencySeries of this TimeSeries

In this example we expand upon plotting a TimeSeries, by calculating the amplitude-spectral density of the gravitational-wave strain data from LHO:

from gwpy.timeseries import TimeSeries
gwdata = TimeSeries.fetch('H1:LDAS-STRAIN', 'September 16 2010 06:40', 'September 16 2010 06:50')
spectrum = gwdata.asd(8, 4)

where the result is an average spectrum calculated using the Welch method.

Reading/writing frequency-domain data

Plotting a FrequencySeries

Similary to the TimeSeries, the FrequencySeries object comes with its own plot() method, which will quickly construct a FrequencySeriesPlot:

from gwpy.timeseries import TimeSeries
gwdata = TimeSeries.fetch('H1:LDAS-STRAIN', 'September 16 2010 06:40', 'September 16 2010 06:50')
spectrum = gwdata.asd(8, 4)
plot = spectrum.plot()
ax = plot.gca()
ax.set_xlim(40, 4000)
ax.set_ylabel(r'GW strain ASD [strain$/\sqrt{\mathrm{Hz}}$]')
ax.set_ylim(1e-23, 1e-19)
plot.show()

(png)

../_images/spectrum_plot.png

FrequencySeries reference

FrequencySeries A data array holding some metadata to represent a frequency series
SpectralVariance A 2-dimensional array containing the variance histogram of a