gwpy.frequencyseries.FrequencySeries

FrequencySeries とは?

gwpy.frequencyseries.FrequencySeries は、周波数領域(スペクトル)のデータを扱うクラスです。 TimeSeries が「時間 vs 値」であるのに対し、FrequencySeries は「周波数 vs 値」の情報を持ちます。

主に以下の用途で使われます。

データの作成・取得

FrequencySeries を一から手動で作ることは稀で、通常は以下の2通りの方法で入手します。

1. TimeSeries から計算する

最も一般的な方法です。TimeSeries オブジェクトの .asd().fft() メソッドの結果として生成されます。 (計算方法は TimeSeriesのページ を参照)

from gwpy.timeseries import TimeSeries

# データの取得とASD計算
data = TimeSeries.fetch_open_data('H1', 1126259462, 1126259494)
asd = data.asd(fftlength=4, method='welch')

print(asd)
# <FrequencySeries([ 3.99...e-20, 3.63...e-20, 4.39...e-20, ...,
#                    4.72...e-24, 4.75...e-24, 4.80...e-24]
#                  unit=Unit("1 / Hz(1/2)"),
#                  name='Strain',
#                  epoch=<Time object: scale='utc' format='gps' value=1126259462.0>,
#                  f0=<Quantity 0. Hz>,
#                  df=<Quantity 0.25 Hz>)>

2. ファイルから読み込む

保存されたスペクトルデータ(HDF5やXML形式、テキストファイルなど)を読み込む場合です。 KAGRAの感度カーブ(設計感度や過去の観測感度)を読み込んで比較する際によく使います。

from gwpy.frequencyseries import FrequencySeries

# テキストファイル (2列: 周波数, 感度) を読む例
# frequency_data.txt:
# 10.0  1e-19
# 11.0  2e-20 ...
spectrum = FrequencySeries.read('frequency_data.txt')

データのプロット (Plot)

TimeSeries と同様に .plot() メソッドを使います。 スペクトルデータは桁が大きく変わるため、通常は **対数軸 (Log-Log plot)** で表示します。

plot = asd.plot()
ax = plot.gca()

# X軸, Y軸を対数スケールにする (必須)
ax.set_xscale('log')
ax.set_yscale('log')

# 範囲の調整
ax.set_xlim(10, 2000)  # 10Hz ~ 2kHz
ax.set_ylim(1e-24, 1e-18)

plot.show()

基本的な操作

単位の変換

例えば、変位スペクトル [m/rtHz] に キャリブレーション係数 [N/m] を掛けて 力雑音 [N/rtHz] に変換する場合など、単なる掛け算が可能です。Astropyの単位系が自動で追従します。

# 単純な定数倍
new_asd = asd * 100

# 単位情報の更新 (手動で上書きする場合)
import astropy.units as u
new_asd.unit = u.meter

再サンプリング (Interpolate / Resample)

異なる周波数分解能 (df) を持つ2つのスペクトルを比較したり、割り算したりする場合、周波数軸を揃える必要があります。

# asd2 の周波数軸を asd1 に合わせて補間する
asd2_interp = asd2.interpolate(asd1.frequencies)

# 比率を取る (Transfer Functionの確認など)
ratio = asd1 / asd2_interp

属性へのアクセス (Attributes)

プロットではなく、数値データとして解析に使いたい場合に参照する属性です。

属性名

説明

asd.value

numpy.ndarray

スペクトルのY軸データ(振幅やパワー)。

asd.frequencies

astropy.units.Quantity

X軸の周波数配列。asd.frequencies.value で数値配列取得。

asd.df

astropy.units.Quantity

周波数分解能 (Frequency bin size)。FFT長が4秒なら0.25Hz。

asd.f0

astropy.units.Quantity

開始周波数(通常は0Hz)。

asd.unit

astropy.units.Unit

データの単位。ASDなら 1/sqrt(Hz)。

例: 特定の周波数の値を取得する

配列のインデックス番号ではなく、「何Hzの値が欲しい」というアクセスをする場合、自分でインデックスを探す必要があります。

import numpy as np

target_freq = 50.0  # 50Hzの値を知りたい
df = asd.df.value   # 周波数分解能 (例: 0.25Hz)

# インデックスを計算
idx = int(target_freq / df)

print(f"{target_freq} Hz の値: {asd.value[idx]}")

データの保存 (Write)

計算したASDやコヒーレンスをファイルに保存しておくと、後で再利用できて便利です。 HDF5形式が推奨されます。

# HDF5形式で保存
asd.write('my_spectrum.hdf5', format='hdf5')

読み出すときは FrequencySeries.read('my_spectrum.hdf5') で復元できます。

KAGRA/Subgroups/PEM/PythonMemoJP/gwpy_FrequencySeries (last edited 2026-01-02 00:28:13 by tatsuki.washimi)