開発版ドキュメント · 0.2.3 30c2f8ba · 入門例の検証対象 0.2.3 · 版情報 · 既知の制限

TimeSeries: 基本#

電圧信号を作成し、メタデータを確認し、時間区間を選択してプロットを保存します。前提知識はクイックスタートです。追加の解析パッケージや外部データは不要です。説明を読んで実行する所要時間の目安は約 15 分です。

1. 信号の作成#

クイックスタートと同じ 40 Hz の正弦波と、乱数シードを固定したセンサーノイズを使います。TimeSeries はサンプル値に加えて、単位、開始時刻、サンプリング間隔を保持します。

from gwexpy.noise.wave import gaussian, sine

settings = dict(duration=16, sample_rate=512, t0=0, unit="V")
signal = sine(frequency=40, **settings) + gaussian(std=0.3, seed=10, **settings)
signal.name = "Sensor A"

2. 値とメタデータの確認#

value はサンプル値の配列を保持し、unitt0sample_rate はその値の意味を表します。dt はサンプル間の時間間隔です。別のツールへ値を出力する場合は、これらの属性も保持してください。

print(signal[:5])
print("Unit:", signal.unit)
print("Start:", signal.t0)
print("Sample rate:", signal.sample_rate)
print("Cadence:", signal.dt)
assert signal.size == 16 * 512
TimeSeries([-0.33100153,  0.25388934,  0.59692804,  1.07527748,
             0.84930531],
           unit: V,
           t0: 0.0 s,
           dt: 0.001953125 s,
           name: Sensor A,
           channel: None)
Unit: V
Start: 0.0 s
Sample rate: 512.0 Hz
Cadence: 0.001953125 s

3. 時間区間の選択#

区間は 2 秒から始まり、4 秒の直前までを含みます。元のデータ全体を保持するため、戻り値の時系列を別の名前に代入します。TimeSeriesDict のコレクションを保持する場合は、channels.copy().crop(...) を使ってください。

segment = signal.crop(2, 4, copy=True)
assert segment.size == 2 * 512
assert signal.size == 16 * 512

4. プロットと保存#

短い区間を表示すると、一つ一つの振動を確認できます。プロットにはサンプルの単位が表示され、savefig でログやスライドに使える図を保存できます。

plot = signal.crop(2, 2.1, copy=True).plot()
plot.savefig("timeseries.png")
../_images/cde7fa97b34f551245930f63e905687f077c8bc81887de17c2d39958b166e17e.png

5. ASD の推定#

平均化には 16 秒間のデータ全体を使います。Hann 窓を適用した 2 秒の区間を 1 秒ずつ重ねると、周波数ビン幅は 0.5 Hz になります。ASD の単位は V/√Hz で、個々の正弦波の振幅を表すものではありません。

spectrum = signal.asd(fftlength=2, overlap=1, window="hann", method="welch")
plot = spectrum.plot(xlim=(1, 256))
plot.savefig("timeseries-asd.png")
assert spectrum.unit.is_equivalent(signal.unit / signal.sample_rate.unit**0.5)
../_images/f6f2e51e78507ad6c6fb2a34b566b79a71451d28c50a8f157c197fd5757d25eb.png

次の学習#