クイックスタート

簡単な時系列データの作成と解析を行います。

Note

より詳しい学習パスは getting_started を参照してください。

GWpyからの移行

GWpyコードをGWexpyで使用するには、importを置き換えるだけです:

# GWpy (従来)
# from gwpy.timeseries import TimeSeries
# from gwpy.frequencyseries import FrequencySeries

# GWexpy(推奨)
from gwexpy.timeseries import TimeSeries, TimeSeriesDict, TimeSeriesMatrix
from gwexpy.frequencyseries import FrequencySeriesMatrix

複数チャンネル時系列データの生成とプロット

実験的なノイズモデルから複数チャンネルの時系列データを生成します:

import numpy as np
from gwexpy.timeseries import TimeSeriesDict
from gwexpy.signal.noise import PowerLawNoise

# ノイズモデルの設定 (1/f ノイズ: beta=1)
noise_model = PowerLawNoise(beta=1, dt=1/1024)

# 複数チャンネル時系列データの生成
tsd = TimeSeriesDict()
tsd["H1:STRAIN"] = noise_model.generate(duration=64)  # Hanford
tsd["L1:STRAIN"] = noise_model.generate(duration=64)  # Livingston

# プロット
plot = tsd.plot()
plot.show()

TimeSeriesMatrixから周波数行列への一括変換

複数チャンネルの時系列データをFrequencySeriesMatrixに変換し、クロススペクトル密度(CSD)を計算します:

# TimeSeriesDictをmatrixに変換
ts_matrix = tsd.to_matrix()

# CSD計算(Welch法、重なり50%)
csm = ts_matrix.csd(
    fftlength=4,
    overlap=0.5,
    window='hann'
)

# 周波数行列としてプロット
freq_plot = csm.plot()
freq_plot.show()

# 具体的な周波数領域の解析
print(f"周波数範囲: {csm.frequencies[0]:.1f} - {csm.frequencies[-1]:.1f} Hz")
print(f"H1-L1相互スペクトル (10 Hz): {csm['H1:STRAIN', 'L1:STRAIN'].interpolate(10).value:.2e}")