2012年6月27日水曜日

SACとアスキーの変換

追記 2015/06/10

SACとはIRISが配布してる地震波の解析をするためのツール。
http://www.iris.edu/software/sac/manual.html

簡単にプロットしたいときとかフィルターとか、地震波に限らずいろいろ便利だから、アスキーファイルとの変換について。

SAC ファイルのフォーマットは上のページで公開されてるから、それにしたがって単純にファイルの読み書きをするファイルを java で作ってみた。

その jar ファイル。
SacTool.jar

参考までに使い方は
.bashrc とかに

SACTOOL={ダウンロードしたSacTool.jarのフルパス}
alias sac2ascii='java -cp $SACTOOL SacToAscii'
alias ascii2sac='java -cp $SACTOOL AsciiToSac'

と記述する。
source .bashrc
と設定を有効にしたのちに、SAC からアスキーへは
sac2ascii {SAC ファイル名} {変換後のアスキーファイル名}
アスキーから SACへは
ascii2sac {アスキーファイル名} {変換後の SAC ファイル名}
とする。

ちなみに、SAC からアスキーに変換するとき3つ目の引数に整数値を指定すると、その数に1つの割合でしか値を変換しないようにする。
これは、GMT とかでプロットするためだけに SAC からアスキーに変換したいけど、重くなるから間引いてプロットしたい場合に役立つ。
ただし、デシメーションフィルタはかけずにそのまま間引いてるので、処理する際には注意が必要。。

sac2ascii {SAC ファイル名} {変換後のアスキーファイル名} {間引きの間隔}

例えば間引きの間隔を 4 にすると、データサイズは4分の1になる。

追記 2015/06/10 ----
GMT の psxy コマンドはバイナリファイルが読めることを知ったので、
sac からpsxy用バイナリに変換するプログラムを追加した。
単精度で書き出しているので、psxy を使う際に "-biS" オプションを付ける。

現在、使用可能なクラスは

・アスキー → sac
 AsciiToSac <asciiFileName> <sacFileName>

・KiK-netアスキー → sac
 KiknetToSac <KiknetFileName> <SacFileName>

・sac → アスキー
 SacToAscii <sacFileName> <asciiFileName> (sampleStep)

・sac → アスキー(0位相バタワース型バンドパスフィルタをかける)
 SacToAsciiBP <sacFileName> <f1> <f2> <order> <asciiFileName> (sampleStep)

・sac → アスキー(バンドパスフィルタ適用後、2乗エンベロープにする)
 SacToAsciiEnv <sacFileName> <f1> <f2> <order> <asciiFileName> (sampleStep)

・sac → バイナリ(単精度)
 SacToBin <sacFileName> <binaryFileName> (sampleStep)

・sac → バイナリ(0位相バタワース型バンドパスフィルタをかける)
 SacToBinBP <sacFileName> <f1> <f2> <order> <binaryFileName> (sampleStep)

・sac → バイナリ(バンドパスフィルタ適用後、2乗エンベロープにする)
 SacToBinEnv <sacFileName> <f1> <f2> <order> <binaryFileName> (sampleStep)

(sampleStep) はオプション(省略は 1 と等価)。

----

0 件のコメント:

コメントを投稿