Note

このページは Jupyter Notebook から生成されました。 ノートブックをダウンロード (.ipynb)

ASD 解析パイプライン

このチュートリアルでは、SegmentTable を使用して、複数セグメントにわたる一括 ASD(振幅スペクトル密度)解析パイプラインを構築する方法を学びます。各セグメントの切り出し(crop)、ASD計算、可視化までを流れるように実行します。

[ ]:
import numpy as np
from gwpy.segments import Segment
from gwexpy.table import SegmentTable
from gwpy.timeseries import TimeSeries

def get_synthetic_data():
    return TimeSeries(np.random.randn(1024), sample_rate=64)

segs = [Segment(i*16, i*16+16) for i in range(4)]
st = SegmentTable.from_segments(segs)
st.add_series_column("raw", data=[get_synthetic_data()]*len(st), kind="timeseries")
st

切り出し (Crop) と ASD 計算

crop()asd() という便利な Sugar API を使って、全セグメントを一括処理できます。

[ ]:
# 各行の期間 (span) でデータを切り出し
st_cropped = st.crop("raw", out_col="cropped")
# セグメントごとに ASD を計算
st_asd = st_cropped.asd("cropped", out_col="asd", fftlength=2.0)
st_asd.display()

解析結果の集計

map() を使うことで、独自関数(例:特定の周波数帯域の RMS 計算)を適用してテーブルに結果を統合できます。

[ ]:
def calc_rms(fs):
    return np.sqrt(np.sum(fs.value**2)) # 簡略化した例

st_asd.map("asd", calc_rms, out_col="band_rms", inplace=True)
st_asd.display()