= gwpy.frequencyseries.FrequencySeries = <> == FrequencySeries とは? == [[https://gwpy.github.io/docs/stable/api/gwpy.frequencyseries.FrequencySeries/|gwpy.frequencyseries.FrequencySeries]] は、周波数領域(スペクトル)のデータを扱うクラスです。 {{{TimeSeries}}} が「時間 vs 値」であるのに対し、{{{FrequencySeries}}} は「周波数 vs 値」の情報を持ちます。 主に以下の用途で使われます。 * '''ASD (振幅スペクトル密度)''': 感度カーブのプロット * '''PSD (パワースペクトル密度)''': ノイズパワーの評価 * '''伝達関数''': フィルタの特性や、チャンネル間の伝達効率(複素数を持つ場合あり) == データの作成・取得 == {{{FrequencySeries}}} を一から手動で作ることは稀で、通常は以下の2通りの方法で入手します。 === 1. TimeSeries から計算する === 最も一般的な方法です。{{{TimeSeries}}} オブジェクトの {{{.asd()}}} や {{{.fft()}}} メソッドの結果として生成されます。 (計算方法は [[../TimeSeries|TimeSeriesのページ]] を参照) {{{ from gwpy.timeseries import TimeSeries # データの取得とASD計算 data = TimeSeries.fetch_open_data('H1', 1126259462, 1126259494) asd = data.asd(fftlength=4, method='welch') print(asd) # , # f0=, # df=)> }}} === 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')}}} で復元できます。