KAGRA重力波データ解析スクール演習

KAGRA 重力波データ解析スクール演習
KAGRA データ解析サブシステム編
ver. 1.2 November 23, 2014
目次
1
はじめに
2
2
Octave の練習
2.1 KAGRA のノイズスペクトラムデータファイルの読み込みとプロット . . . . . .
2.2 合体する連星系からのインスパイラル重力波波形のプロットとサウンド . . . . .
2.3 フーリエ変換 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
3
4
5
3
LIGO データのダウンロードとプロット
9
4
合体する連星系からのインスパイラル重力波波形
12
5
観測されているパルサーからの重力波の上限値
14
1
1
はじめに
今回の演習は Ubuntu 上の octave を想定しています.octave は商用ソフトウエア Matlab と
の互換性を持つように開発されているフリーソフトウエアなので,この演習のサンプルコード
は,Matlab でも動作します.ただし,いくつかの課題(パワースペクトラム密度の計算)では,
追加のパッケージである,Signal Processing Toolkit が必要です.
2
Octave の練習
2
2.1
KAGRA のノイズスペクトラムデータファイルの読み込みとプロット
演習:
この演習のサンプルスクリプトは enshu1.m で,これを実行すれば以下が全て実行されます.
しかし,最初は自分で書いてやってみましょう.
• まず,サンプルコード集 KGLOctave.tar.gz をダウンロードします.
• Linux のターミナルを開き,自分のホームディレクトリ(ターミナルを開いた直後にいる
ディレクトリ)で,ファイルを解凍し,KGLOctave ディレクトリに移動します.
$ tar zxf KGLOctave.tar.gz
$ cd KGLOctave
• octave を起動します.
$ octave
• 以降は octave 内で作業します.まず,環境設定用の初期プログラムを走らせます.
InitKGLOctave
• enshu ディレクトリへ移動します.
cd enshu
• まず,KAGRA のノイズスペクトラムデータファイル noisecurve/BW2009 VRSED.txt の
内容を load コマンドを使って kagra data に読み込みます :
kagra data = load(′ noisecurve/BW2009 VRSED.txt′ );
– コマンドの一番後ろに ; をつけないと、例えば
kagra data = load(′ noisecurve/BW2009 VRSED.txt′ )
とすると、標準出力(コマンドライン)にコマンドの結果が出力されます。1度試
してみましょう。
• kagra data は 2 列の配列になり、1 列目には周波数が格納され、2 列目には対応する周波
数での KAGRA のノイズスペクトラムの値が格納されます。
• fr に kagra data の 1 列目(波数データ)を読み込みます:
fr = kagra data(:, 1);
• 同様に、spec k に kagra data の 2 列名(ノイズスペクトラム)を読み込みます:
spec k = kagra data(:, 2);
• plot コマンドを使って作図をします:
plot(fr, spec k, ′ k−′ );
最後の ′ k−′ はデータ点を黒の実線で結ぶというオプションです.
3
• これでは(linear スケールでは)良く分からないので、loglog コマンドを使って、log-log
でプロットしてみましょう:
loglog(fr, spec k, ′ k−′ );
• 講義で学習した KAGRA のノイズスペクトラムが書けたでしょうか?
• もう少し、図を見やすくしてみましょう。
grid on;
コマンドでグラフにグリッドを追加します.
• xlabel コマンドを使って x 軸にラベルを付けます(フォントサイズ 16pt):
xlabel(′ frequency[Hz]′ ,′ FontSize′ , 16);
• 同様に ylabel コマンドを使って y 軸にラベルを付けます(フォントサイズ 16pt):
ylabel(′ $\sqrt{S_h(f)} \ \ [1 / \sqrt{\rm Hz}] $′ ,′ FontSize′ , 14,′ interpreter′ ,′ latex′ );
もしエラーが出たら :
ylabel(′ 1/rHz′ ,′ FontSize′ , 16);
• axis コマンドを使ってどこの領域をみるか軸の範囲が指定できます :
例えば、axis([10 10000 10^(-25) 10^(-19)]);
を実行してみましょう。また、値を変えてみましょう。
• 次に,この図に,更に LIGO のノイズスペクトラムを重ねて表示しましょう.1 つの図に
2 つ以上のグラフを同時に書くためには,1 つめのグラフをプロットした後,
hold on;
とします.
• LIGO ノイズパワースペクトラム密度のデータをロードします.
ligo data = load(′ noisecurve/ZERO DET high P.txt′ );
• あとは前と同様にやります.
fr = ligo data(:, 1);
spec k = ligo data(:, 2);
• LIGO ノイズスペクトラムをプロットします.今度は線の色を赤にしてみましょう.
loglog(fr, spec k,′ r−′ );
• 図の重ね書きを解除するには,
hold off;
を実行します.
2.2
合体する連星系からのインスパイラル重力波波形のプロットとサウンド
演習:
この演習の内容は enshu2.m というファイルにありますが,最初は自分で書いてみましょう.
4
• 次に,連星合体波形をプロットします.octave 起動後の次のところまでは同じです.
$ cd KGLOctave
$ octave
InitKGLOctave
cd enshu
• 連星合体波形のデータファイルは,chirp.txt という名前で作ってあります.1 列目が時
刻 [秒],2 列目が重力波振幅 h というデータです.まず,データをロードします.そして,
time, h という変数にデータを格納します.
chirpdata = load(′ chirp.txt′ );
time = chirpdata(:, 1);
h = chirpdata(:, 2);
• では,プロットしましょう.plot(time, h,′ b−′ );
• 演習のコンピュータ環境の octave では,sound() コマンドが使えるようになっています.
そのために,まずデータのサンプリングレート [1/秒] を計算します.データは等間隔の時
間間隔でデータが作られているので,次のコマンドでサンプリングレートが得られます.
srate = 1/(time(2) − time(1));
• データの時間的長さ(秒)を確認します.
length(h)/srate;
• サンプルデータの振幅は非常に小さいため,このままでは音も小さくて聞こえません.そ
こで,振幅の最大値を 10 に規格化し直します.
hrenom = h/max(abs(h)) ∗ 10;
• では音を出してみましょう.
sound(hrenom, srate);
サンプルデータは 8 秒間あるので,8 秒間待ちましょう.それでも音が聞こえない場合は,
コンピュータのスピーカー設定を確認して下さい.
2.3
フーリエ変換
フーリエ変換,逆フーリエ変換の定義は次のものを採用します.
∫ ∞
x˜(f ) =
x(t)e−2πif t dt
−∞
∫ ∞
x(t) =
x˜(f )e2πif t df
(1)
(2)
−∞
実際のデータは,無限の長さをもつことは無いので,その有限の時間的長さを T [秒] とします.
また,データは ∆t[秒] の一定の時間間隔(サンプリング間隔)で取得されるとします.T は ∆t
によって N 等分されるとし,∆t = T /N の関係があるとします (以下では N は 2 の倍数である
事を暗に仮定).テータ点の時刻を t = tj = (j − 1)∆t(j = 1, . . . , N ) とします.実際のデータを
5
扱う際には,上記フーリエ変換の積分を和で表し,次のような離散フーリエ変換 (DFT) を計算
します.x(j) ≡ x(tj ) と表し,
ωN ≡ e−2πi/N
(3)
を定義しておきます.すると,離散フーリエ変換は次のように定義されます.
X(k) ≡
N
∑
(j−1)(k−1)
x(j)ωN
j=1
=
N
∑
x(j)e−2πi(j−1)(k−1)/N
(4)
j=1
N
1 ∑
−(j−1)(k−1)
x(j) =
X(k)ωN
N k=1
=
N
1 ∑
X(k)e2πi(j−1)(k−1)/N
N k=1
(5)
この式と,(1), (2) とを見比べると,次のことが分かります.
• X(k) のインデックス k の前半 k = 1 . . . N/2 + 1 は正の周波数 f = fk = (k − 1)/T に対応
し,後半 k = N/2 + 2 . . . N は負の周波数 f = (k − 1 − N )/T に対応する.
このような周波数範囲の了解ものとで,もともとの x(t) のフーリエ変換 x
˜(f ) と X(k) は x˜(fk ) =
∆tX(k) の関係があります.DFT からフーリエ変換に直す際には ∆t の係数が必要となること
に注意が必要です.
Octave/Matlab では,離散フーリエ変換は,fft,ifft によって行います.これは高速フー
リエ変換 (FFT) のアルゴリズムを使って効率的に離散フーリエ変換の計算を行います.
演習:
この演習の内容は enshu3.m というファイルにありますが,最初は自分で書いてみましょう.
• まず,正弦波を適当な時間生成します.ここでは,周波数が 1Hz の波を,サンプリング周
波数 10Hz で生成します.
N=1000;
dt=0.1;
time=(0:N-1)*dt;
freq=1;
data=sin(2*pi*freq .*time);
figure;
plot(time,data,’b-’);
• 次に離散フーリエ変換を fft によって行います.
X=fft(x);
figure;
6
plot(abs(X));
• ピークが2つ現れるのが分かると思います.1つは正の周波数成分,1つは負の周波数成
分に対応します.この図の横軸はインデックス値のままなので,横軸を周波数にします.
まずビンの周波数間隔を定義して,周波数リストを作ります.
df=1/(dt*N);
freqlist=(0:N-1)*df;
インデックスが N/2+2 以上はマイナスの周波数に対応しますが,そうするとプロットす
るのが面倒になるので,便宜上,周波数は 0Hz からサンプリング周波数までとします.
• では横軸を周波数にしてプロットします.
figure;
plot(freqlist,abs(X));
xlabel(’Frequency [Hz]’,’FontSize’,16);
ピークの周波数が,生成した正弦波の周波数と一致しているのが分かったでしょうか.も
しずれていたら,プログラムに間違いがあるということなので,デバックしましょう.
• 最後に,X を ifft して x に戻ることを確認します.ifft してもとの x との差の最大値を
確認します.微少量になっているはずです.
x2=ifft(X);
max(abs(x-x2))
演習:
この演習の内容は enshu4.m というファイルにありますが,最初は自分で書いてみましょう.
前の章で読み込んだ chirp.txt をフーリエ変換しましょう.
• まず chirp.txt を読み込みます.
chirpdata=load(’chirp.txt’);
time=chirpdata(:,1);
h=chirpdata(:,2);
npoint=length(h);
• データより,サンプリング間隔,データの時間的長さ,FFT をかけた後の周波数間隔と
周波数リストを計算します.
dt=time(2)-time(1);
T=npoint*dt;
df=1/T;
freq=(0:npoint/2)*df;
• では FFT してプロットしてみましょう.今回は FFT した後のデータのインデックスの前
半部分のみ(つまり正の周波数成分のみ)をプロットしてみましょう.
7
hf=fft(h);
abshf=abs(hf(1:npoint/2+1));
loglog(freq,abshf);
hold on;
• 最後に周波数スペクトルの傾きが大体 f −7/6 になっていることを確かめましょう.f −7/6
の線を同じグラフに書いてみます.
loglog(freq,freq.^(-7/6)/10^15,’r-’);
hold off;
xlim([10,2500]); 確認できたでしょうか.
8
3
LIGO データのダウンロードとプロット
演習:LIGO データのダウンロード
アメリカの LIGO は今年 8 月に,2005 年から 2007 年に取得された,LIGO の 5 回目の観
測データである S5 データを LIGO Open Science Center で一般公開しました.ホームページ
は https://losc.ligo.org/ にあります.
まず,ここからデータをダウンロードしてみましょう.
• まず,Firefox などで https://losc.ligo.org/にアクセスします.
• 左の欄にある”Data& Catalogs”をクリック.
• ”The S5 Data Release” をクリック.
• 下の方の”Get S5 Data” の”S5 Data Archive”をクリック.
• ここでダウンロード出来ます.試しに,
”Next choose your gravitational wave detector:” 欄で ”L1 in S5”を選ぶ.
”Choose your output format:”は一番上の”Time series data in HDF5 and Frame files”と
する.
GPS time は表示されているままにして,一番下の”Continue”をクリック.
• Timeline, UTC, Mbytes, HDF5, Frame, Percent, というリストが表示される.
この中から適当な Timeline の行の,”Frame”をクリックすると,Frame データファイル
がダウンロードされる.
• ダウンロードされたファイルは,例えば,L-L1 LOSC 4 V1-842657792-4096.gwf となって
います.これは,重力波業界が共通で使っている Frame データ形式という形で保存されて
いるファイルです.このファイルのデータを読み出すには,Frame Library という特別な
ソフトウエアが必要です.今回は Ubuntu 上でコンパイルされたプログラムを利用します.
• プログラムは KGLOctave/bin にある,read proc data です.Ubuntu のコマンドプロン
プトで,コマンドを実行します.
$ ~/KGLOctave/bin/read proc data データファイル名 チャンネル名 データ長 [秒]
と実行します (最初の˜は必要です.これは自分のホームディレクトリを表しています).
データファイル名はダウンロードしたファイル名,チャンネル名は
– 検出器が L1 の場合は,L1:LOSC-STRAIN
– 検出器が H1 の場合は,H1:LOSC-STRAIN
– 検出器が H2 の場合は,H2:LOSC-STRAIN
となります.データ長はファイルから取り出したいデータの時間的長さ (秒)です.
9
• このコマンドを実行すると,時刻,検出器出力データの2列のデータが出力されます.そ
れをファイルに保存するには,例えば,
$ ~/KGLOctave/bin/read proc data L-L1 LOSC 4 V1-842657792-4096.gwf \
L1:LOSC-STRAIN 8 > tmp.txt
とします.データは tmp.txt にテキストデータとして保存されます.
演習:
この演習は enshu5.m というファイルにあります.
前の演習でダウンロードして,テキストファイルに保存したデータをプロットしてみましょう.
あらかじめダウンロードしたデータファイルも,LIGOdataorig.txt, LIGOdatasample.txt の
2つ用意してあります.LIGOdataorig.txt はもとのデータそのもの,LIGOdatasample.txt は
少し加工したものです.それぞれ,時刻と LIGO データの2列から成ります.それぞれ 32 秒の
データです.以下では,あらかじめ用意してあるデータファイルを用います.
• まず LIGOdataorig.txt のデータを読み込みます.
A=load(’LIGOdataorig.txt’)
t=A(:,1);
x=A(:,2);
• 時系列のデータをプロットします.
figure(1);
plot(t,x);
かなり振幅が変動して見えます.
• 次にこのデータのパワースペクトラム密度を見てみます.まず,データ点の数 (npoint),
データの時間間隔 (dt [秒]),サンプリングレート (srate [Hz]),を確認します.
npoint=length(x)
dt=t(2)-t(1)
srate=1/dt;
• 次にパワースペクトラム密度を計算しプロットします.ここでは,次のコマンドを打ちま
す.
[Px,freq]=pwelch(x,npoint/8,[],npoint,srate,’onesided’);
figure(2);
loglog(freq,Px,’b-’);
この pwelch() というのは,ウェルチの方法と呼ばれる方法で,パワースペクトラム密度
を評価する octave の関数です.
これをみると,20Hz 付近に大きなピークがあることが分かります.また,このスペクト
ラムはあまり正確には評価されていないことが後で分かります.
10
• 次に,少し加工されたデータ LIGOdatasample.txt を読み込みます.
A=load(’LIGOdatasample.txt’)
t=A(:,1);
x=A(:,2);
• 時系列のデータをプロットします.
figure(1);
plot(t,x);
こんどは,あまり大きな振幅の変動が見えないことが分かります.
• 次にこのデータのパワースペクトラム密度を見てみます.まず,前と同じくデータ点の数
(npoint),データの時間間隔 (dt [秒]),サンプリングレート (srate [Hz]),を確認します.
npoint=length(x)
dt=t(2)-t(1)
srate=1/dt;
• 次にパワースペクトラム密度を計算しプロットします.前と同じコマンドを打ちます.
[Px,freq]=pwelch(x,npoint/8,[],npoint,srate,’onesided’);
figure(2);
loglog(freq,Px,’b-’);
前の図とずいぶん違っているはずです.実はこのデータは,元のデータから 40Hz 以下の
成分をハイパスフィルタで除去したものになっています.従って,スペクトラムの 40Hz
以下はもとのデータとは全く異なっています.
必要な周波数帯だけ見るために,x 軸を制限します.
xlim([30 2500]);
• pwelch() のなかの引数 npoint/8 はいろいろ変えられます.例えば,npoint/16 と小さ
くすると,スペクトラムのばらつきが小さくなり,グラフの線がよりシャープになります.
• 連星合体信号と同じく,このデータを音で聞いてみましょう.次のようにすれば良いはず
です.
sound(x,srate);
当然再生時間も 30 秒ほどかかります.
11
合体する連星系からのインスパイラル重力波波形
4
定義
M t = m1 + m2 ,
m1 m2
m1 m2
,
η=
,
Mt
Mt2
g = 1.989 × 1030 kg,
µ=
M⊙ = 1.989 × 1033
−11
G = 6.673 × 10
3
Mc = Mt η 3/5
2
m /sec /kg,
c = 299792458 m/sec,
GM⊙
T⊙ =
= 4.925491 × 10−6 sec,
c3
1pc = 3.086 × 1016 m.
(6)
(7)
(8)
(9)
(10)
(11)
D : 重力波源までの距離
(θ, ϕ) : 検出器から重力波源の方向
ι : レーザ干渉計からみた連星の軌道面傾斜角
合体するコンパクト連星系のインスパイラル期から放出される重力波の波形は,
5/3
h+
h×
4Mc
1 + cos2 ι
2/3
=
ωorb (t)
cos 2φorb (t),
D
2
5/3
4Mc
2/3
=
ωorb (t) cos ι sin 2φorb (t),
D
(12)
(13)
Mc = Mt η 3/5 (チャープ質量),Mt = m1 + m2 , η = m1 m2 /Mt2 , D: 観測者からの距離,ι: 連星
の軌道傾斜角,ωorb (t) = 2πforb :軌道角振動数である.
ωorb と φorb の具体的な表式は以下の通りである。
ωorb (t) = 2πforb (t)
[
(
)
]
M⊙
743
11
−3/8
−5/8
=
Θ
+
+ η Θ
+ ... ,
8Mt T⊙
2688 32
[
(
)
]
3715 55
1
5/8
3/8
φorb (t) = φc −
Θ +
+
Θ + ... ,
η
8064 96
ηM⊙
Θ ≡
(tc − t).
5T⊙ Mt
(14)
(15)
(16)
ここで,M⊙ = 1.989 × 1033 g は太陽質量,T⊙ = GM⊙ /c3 = 4.925491 × 10−6 sec, tc は2つの質
点が合体する時刻,φc は合体時の位相である.この表式には最低次の効果と,1次だけ高次の
ポストニュートニアンの効果が含まれている。
検出器で受ける重力波信号は,検出器のアンテナパターン関数 F+ , F× とあわせて,
[
]
1 + cos2 ι
h(t) = A F+
cos 2φorb (t) + F× cos ι sin 2φorb (t)
(17)
2
5/3
4Mc
A =
D
2/3
ωorb (t)
(18)
となる.
12
演習:
h+ (t) を計算するプログラムを作ってみよう.そして,いろいろな m1 , m2 について h+ (t) を
プロットしてみよう.また,その音も聞いてみましょう.
この演習のサンプルプログラムは enshu/enshu6.m ですが,最初は自分で書いてみよう.
13
5
観測されているパルサーからの重力波の上限値
パルサーを一様回転楕円体として,ある主軸の周りを剛体回転していると近似する.パルサー
の回転角振動数を Ω,慣性モーメントを I とする.このときに重力波によって放出されるエネ
ルギーは四重極公式によって
dE
32 G 2 2 6
= −
I εΩ,
dt
5 c5
(19)
ここで,ε は楕円率であり,回転面内にある2つの半主軸の長さを a, b とすると,
ε≡
(a − b)
,
(a + b)/2
(20)
で与えられる.
˙ である.もし,このエ
回転エネルギーは E = 21 IΩ2 であるので,その時間微分は E˙ = IΩΩ
ネルギー変化がすべて重力波の放出により引き起こされているとすると,この式と (19) が等し
いので,dE/dt を消去すると,
ε2 =
˙
5 c5 |Ω|
,
32 G IΩ5
(21)
を得る.
楕円率 ε,慣性モーメント I の物体が Ω の角振動数で回転している場合,放出される重力波
の振幅 h は
h=
4G 2
Ω Iε,
r c4
(22)
で与えられる.これに (21) を代入すると,
h=
4
r
√
5
32
√
√
G 1/2
I
c3
|f˙rot |
,
frot
(23)
を得る.ここで,r はパルサーまでの距離,frot は回転振動数で,Ω = 2πfrot である.この重力
波振幅は,観測されているパルサーの振動数の減少が全て重力波放出のみで引き起こされてい
ると仮定して導かれたものである.実際のパルサーでは電磁波などの放射が振動数変化により
寄与していると考えられており,ここで得られた重力波振幅は,原理的にあり得る上限値であ
り,実際にはこの振幅よりも小さいと考えるべきである.
以上の他,考慮すべき効果がいくつかある.まず重力波の四重極放射を考えると,重力波の
振動数は,パルサーの回転振動数の 2 倍になることは重要な点である.従って,重力波の振動
数 f は f = 2frot で与えられる.
もう一つは,パルサーからの重力波は常に放出され続けているという点である.従って,マッ
チドフィルターを長時間分行うと,長時間積分の効果で信号がノイズに対してより卓越してく
√
る効果が存在する.この効果は,長時間積分する時間を Tobs [秒] とすると,(23) に Tobs を掛
けることで取り入れらる.
最後に,重力波の放射方向によって重力波振幅が変わってくる効果もある.(23) 式は,最も強
く放射される方向での振幅であり,平均するとこの振幅より弱くなる.また,誤ってノイズを
14
信号と見なす確率や本物の信号を偽物として却下してしまう確率を小さくたもつための統計的
な議論により導かれる係数も取り入れられる.これら2つの効果を入れた重力波振幅の表式は
√
√ √
√
4 5 G 1/2 f˙rot Tobs
up
h =
I
, [1/Hz1/2 ]
(24)
r 32 c3
frot 11.4
となる (Tobs /11.4 の係数については,参考文献 ([13]) の (6) 式参照).この量は [1/Hz1/2 ] の次元
を持っており,このままパワースペクトラム密度の図にプロットすることができる.パルサー
の慣性モーメントは,典型的な値としては,I = 1045 g cm2 程度である.
演習:
enshu ディレクトリに,ATNF Pulsar Catalogue に掲載されているパルサーのデータファイ
ル ATNFPulsarCatalogue.txt が置かれてあります.
ファイルは,
• 1列目 パルサーの回転振動数 frot [Hz]
• 2列目 パルサーの回転振動数の時間微分 f˙rot [Hz/sec]
• 3列目 パルサーの距離 [kpc] (kpc= 3.08568 × 1018 cm)
となっています.
このファイルのデータを読み込み,重力波振幅の上限値を計算し,ノイズパワースペクトラ
ム密度の図と一緒にプロットしよう.
15
参考文献
[1] 東京大学教養学部統計学教室編「統計学入門」「自然科学の統計学」東大出版会
[2] 日野幹雄「スペクトル解析」朝倉書店
[3] C.W. Helstrom, ”Statistical theory of signal detection”, (1968).
[4] L.A. Wainstein and V.D. Zubakov, ”Extraction of signal from noise” (1962).
[5] P. Jaranowski and A. Krolak, ”Analysis of Gravitational-wave data” (2009).
[6] P. Jaranowski and A. Krolak, Living Rev. Relativity 15 (2012), 4.
[7] M. Maggiore, ”Gravitational Waves volume 1: Theory and experiments”, (Oxford, 2008).
[8] J.D.E. Creighton and W.G. Anderson, ”Gravitational-wave physics and astronomy”
(2011).
[9] B.S. Sathyaprakash and B. F. Schutz, Living Rev. Relativity 12 (2009), 2.
[10] L.S. Finn, ”Detection, measurement, and gravitational radiation”, Phys. Rev. D 46, 5236
(1992).
[11] C. Cutler and E.E. Flanagan, Phys. Rev. D 49, 2658 (1994).
[12] B.J. Owen, Phys. Rev. D 53, 6749 (1996).
[13] A. Watts et al., Monthly Notices of the Royal Astronomical Society, Vol. 389, 839-868
(2008), arXiv:0803.4097 (http://jp.arxiv.org/abs/0803.4097).
16