注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

notes

@-@

 
 
 

日志

 
 
 
 

SAC指南  

2009-11-04 11:06:48|  分类: 数据 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

SAC是一个命令驱动的程序,命令行可以在终端或者宏文件中执行。SAC命令可以分为三大类:参数设置,命令执行和数据设置操作。

SAC2000可在任何时候使用INICM命令重新初始化。

地震数据信号都被存储在单独的数据文件中,每个数据文件都包含了一个头文件用以描述文件的内容。

可以使用READ命令把地震信号从磁盘中读入内存,CSS3.0格式的可以使用READCSS命令。SAC可以同时处理多达200道的地震信号。

你还可以使用WRITE命令保存操作的结果。

SAC头文件中包含了一个参考时或者零时,用六个整形数据来存储,分别是 NZYEAR,NZJDAY,NZHOUR,NZMIN,NZSEC,NZMSEC,但常用相当于数字格式打印出来,如KZDATE和KZTIME。这个 参考时间可以任意修改,一般可以是开始数据点的时间,也可以是地震事件的时间,午夜,你的生日或者其他的。它甚至没有必要包含数据本身的一段时间。其他的 时间都是以参考时间为起点的以秒为计的偏移量,他们以浮点型存储于头文件中。

B 文件的开始
E 文件的结束
O 事件开始时间
A 初至时间
F 信号结束时间
Tn 时间标志 n从0 到9.

许多SAC命令要和头文件变量结合起来使用。特别是CUT命令。它允许你在使用READ命令前,以时间偏移量截取你所需的数据。

可以在终端中使用QUITENDEXITDONE来结束SAC程序。

FUNCGEN可以在内存中产生函数,这在测试其他命令时很有用。

DATAGEN会在内存中读入三个地震事件(一个当地,一个区域,一个远震),用来玩的。

NEWS用以显示SAC的版本信息,HELPSYNTAX会显示特定命令的信息,REPORT会给你重要参数的当前值。

MACRO执行一个宏文件

SETMACRO定义宏文件的搜寻路径

INSTALLMACRO使得你系统上的其他用户也能使用宏

你可以使用“黑板blackboard”进行存储(SETBB)和获得(GETBB)信息,并进行算术计算(EVALUATE)。

其他命令在宏文件中也是很有用的,比如MESSAGE用来向终端发送信息,ECHO用来重复命令,暂停命令PAUSE

你可以用FORTRAN或者C来写最近的SAC命令,然后用SAC的LOAD命令来装载它们.

TRACE用来跟踪SAC中头文件变量和黑板变量,把改变了的值返回给屏幕.

TRANSCRIPT控制SAC的转录功能,保存命令行,错误信息,警告信息,或者其他输出,并把它们放到一个文本文件中

COMCOR提供命令修正。当SAC在执行过程中探测到错误的时候,如果这个选项被选择,那么SAC允许用户修正命令并继续执行。

CD用来更改SAC的当前工作路径。

你还可以在SAC下执行系统命令,需用到SYSTEMCOMMAND

READHDRWRITEHDR读和写头文件,不需要打开数据。

LISTHDR列出头文件内容,CHNHDR改变头文件内容,COPYHDR把头文件从一个文件拷贝到其他文件。

SYNCHRONIZE会在内存中改变头文件内容,所有的数据都会有相同的参考时间,你必须在使用CUT之前使用这个命令,因为它们往往有不同的参考时间。

你可以使用READALPHA 读入几乎所有的数字字母文件(是不是文本文件呀?)

CONVERT用来转换二进制的SAC格式和数字字母格式

DELETECHANNEL 允许你删除一个或多个通道

FFT离散傅立叶变换

IFFT傅立叶反变换

一系列的无限脉冲响应滤波器,如BANDPASS, BANDREJ, LOWPASS, HIGHPASS

有限脉冲响应滤波器FIR

自适应维纳滤波器WIENER

两个专门滤波器BENIOFFKHRONHITE

CORRELATE 计算相关函数

CONVOLVE 计算卷积

FFT等函数会在内存中产生谱值,可用PLOTSP绘出,WRITESP将其写入文件,再把它读进来可用READSP,你可以在频率域做积分(DIVOMEGA)和微分(MULOMEGA

HANNING对数据应用汉宁窗

HILBERT 应用希尔博特变换

ENVELOPE 通过希尔博特变换计算包络

KEEPAM 在内存中保持谱文件的振幅分量

加一个常数 (ADD)

减一个常数(SUB),

乘一个常数 (MUL),

除一个常数 (DIV).

对每一个数据点求平方(SQR),求平方根(SQRT),绝对值(ABS),自然对数(LOG),常用对数(LOG10),指数(EXP),以10为底的指数(EXP10),还可以做积分(INT)和微分(DIF

MERGE 把两个文件在内存中合并在一起

ADDF 把一系列文件添加到数据中

SUBF 在内存中移除一系列文件

MULF 在内存中用数据乘以一系列文件

DIVF 在内存中用一系列文件除以某数

RQ 在谱中移除Q值

RTREND 去趋势

RMEAN 去平均

RGLITCHES 移除干扰和时间标志

SMOOTH 平滑算法

STRETCH 过抽样

STRETCH 抽样

INTERPOLATE 插值,可平均也可不平均

INTERPOLATE 计算最佳线性拟合

REVERSE 逆转数据次序

自动波形识别,APK

手动波形识别,PPK

震相用HYPO格式存储,可用OHPF打开,用CHPF关闭,用WHPF保存。震相保存在头文件中。

TRANSFER 去除仪器响应

SPECTROGRAM 谱计算

GRAYSCALE 计算灰度图

CONTOUR 等值线

ARRAYMAP 用内存中所有的数据形成一张阵列图

BBFK 用内存中所有的数据计算宽带FK谱值

GMTMAP 产生一个GMT格式的台站/事件图

SAC下有三类图形显示“设备”,SGF,XWINDOWS,SUNWINDOW

BEGINDEVICES 选择一个或更多图像显示设备

ENDDEVICES 取消选择

ERASE 擦除图形显示区域

VSPACE 控制最大尺寸和绘图形状

SGF SAC图形控制文件的一些控制选项

PLOT 单个绘图

PLOT1 所有数据都绘在一张图上,这张图有相同的X轴,却有不同的Y轴

PLOT2 所有数据都绘在一张图上,这张图有相同的X轴相同的Y轴

PLOTPK 绘出含有到时,震相,尾波等的图,跟PLOT1类似。鼠标用来挑选震相,这些被挑选出来的震相被写进了头文件中,而且也可以写入HYPO震相文件(OHPF)或字母数字震相文件(OAPF)

PLOTPM 绘出质点震动图像

FILEID 文件ID

FILENUMBER 控制显示的文件数

PICKS 控制显示震相

SETDEVICE 允许选择一个默认的图形显示设备

PLOTC 用鼠标绘图

PLOTALPHA 读入数字字母的数据文件并绘图

PLOTDY 带有误差棒的显示图

PLOTXY 多个数据的对比图

XLIMYLIM 控制绘图范围

XVPORTYVPORT 控制在绘图区域内的绘图位置

TITLE 指定标题

XLABELYLABEL 坐标轴名称

LINE 线条样式

SYMBOL 绘标志

COLOR 颜色选择

GTEXT 显示文本

TSIZE 文本属性

XLIN and XLOG 线性和对数的X坐标

YLIN and YLOG

LINLIN, LINLOG, LOGLIN, and LOGLOG 不同坐标

XDIV and YDIV 坐标间隔

SAC的数学函数

ADD
SYNTAX: ( ADD v1 v2 ... vn)
PURPOSE: Add (sum) a set of numbers.
SINE
SYNTAX: ( SINE v)
PURPOSE: Take the sine of a number.
SUBTRACT
SYNTAX: ( SUBTRACT v1 v2 ... vn)
PURPOSE: Subtract a set of numbers.
ARCSINE
SYNTAX: ( ARCøSINE v)
PURPOSE: Take the arcsine of a number.
MULTIPLY
SYNTAX: ( MULTIPLY v1 v2 ... vn)
PURPOSE: Multiply a set of numbers.
COSINE
SYNTAX: ( COSINE v)
PURPOSE: Take the cosine of a number.
DIVIDE
SYNTAX: ( DIVIDE v1 v2 ... vn)
PURPOSE: Divide a set of numbers.
ARCCOSINE
SYNTAX: ( ARCøCOSINE v)
PURPOSE: Take the arccosine of a number.
SQRT
SYNTAX: ( SQRT v)
PURPOSE: Take the square root of a number.
TANGENT
SYNTAX: ( TANGENT v)
PURPOSE: Take the tangent of a number.
EXP
SYNTAX: ( EXP v)
PURPOSE: Exponentiate a number.
ARCTANGENT
SYNTAX: ( ARCøTANGENT v)
PURPOSE: Take the arctangent of a number.
ALOG
SYNTAX: ( ALOG v)
PURPOSE: Take the natural logarithm of a number.
INTEGER
SYNTAX: ( INTEGER v)
PURPOSE: Convert a number to an integer.
POWER
SYNTAX: ( POWER v)
PURPOSE: Raise a number to its power of 10.
PI
SYNTAX: ( PI v)
PURPOSE: Return the value of pi.
ALOG10
SYNTAX: ( ALOG10 v)
PURPOSE: Take the log to base 10 of a number.
MAXIMUM
SYNTAX: ( MAXIMUM v1 v2 ... vn)
PURPOSE: Compute the maximum value of a set of numbers.
MINIMUM
SYNTAX: ( MINIMUM v1 v2 ... vn)
PURPOSE: Compute the minimum value of a set of numbers.
ABSOLUTE
SYNTAX: ( & #248;ABSOLUTE v)
PURPOSE: Take the absolute value of a number.

字符串函数

CHANGE
SYNTAX: ({CHA}NGE} s1 s2 s3)
PURPOSE: Change one text string (s1) to another ( s2) in a third text string ( s3).
SUBSTRING
SYNTAX: ({SUBS}TRING n1 n2 s)
PURPOSE: Return substring with characters n1 through n2 of text string (s).
DELETE
SYNTAX: ({DEL}ETE s1 s2)
PURPOSE: Delete a text string (s1) within another text string (s2).
CONCATENATE
SYNTAX: ({CONC}ATENATE s1 s2 ... sn})
PURPOSE: Concatenate (i.e., place end to end) one or more text strings.
BEFORE
SYNTAX: ({BEF}ORE s1 s2)
PURPOSE: Return the portion of a text string (s2) that occurs before another text string (s1).
REPLY
SYNTAX: ({REP}LY s1)
PURPOSE: Send a message to the terminal and get a reply.
AFTER
SYNTAX: ({AFT}ER s1 s2)
PURPOSE: Return the portion of a text string (s2) that occurs after another text string (s1).


如何在SAC中保存图片
1. 首先键入bg sgf
2. 进行绘图操作,会在当前目录先生成一个叫f001.sgf的文件
3. 退出SAC,然后使用sgftops程序来转换:sgftops f001.sgf f001.ps

SAC中宏的应用
2008-12-16 17:20
一个简单的例子
* This certainly is a simple little macro *是用来注释的
READ ABC DEF XYZ 读入三个数据文件
MUL 4 8 9 每个文件乘以不同的常数
FFT 傅里叶变换
BG SGF 打开画图开关
PSP AM 绘反应谱

把这些东西写到一个文件中,比如保存为mystuff,在SAC中这样调用:MACRO MYSTUFF
在宏运行的过程中,终端是不显示过程的,如果你需要显示的话,在终端输入ECHO就可以了。

上面那个例子只能读入特定名称的文件,如果要读入不同的文件,反复修改宏代码不太好,可以把需要读入的数据文件名作为宏的输入参数,就是下面这个例子:
一个修改的例子
READ $1 $2 $3
MUL 4 8 9
FFT
BG SGF
PSP AM
上面的
$1 $2 $3分别代表三个文件名,在SAC中调用的时候可以这样:MACRO MYSTUFF ABC DEF XYZ

那么肯定还有人说了,我每次要读的文件数不确定,乘的常数的个数也要做相应的变化,上面这个例子还是要修改宏代码。那么利用关键词驱动参数就可以做到了:
再次修改的例子
$KEYS FILES VALUES 这行定义了两个关键词,分别叫做FILES和VALUES
READ $FILES 读入FILES
MUL $VALUES 读入VALUES
FFT
BG SGF
PSP AM
在SAC中可以这样调用:
MACRO MYSTUFF FILES ABC DEF XYZ VALUES 4 8 9
或者这样:
MACRO MYSTUFF VALUES 4 8 9 FILES ABC DEF XYZ
这样的话文件个数和参数个数都可以在调用的时候决定了,但是这二者的个数必须相等。

你又会说参数又多又长,而且有些参数常用到,重复输入太麻烦了,那么就可以用到默认参数值了:
反复修改了的例子
$KEYS FILES VALUES
$DEFAULT VALUES 4 8 9 这行定义了默认的参数值
READ $FILES
MUL $VALUES
FFT
BG SGF
PSP AM
如果你一直用着相同的VALUES,那么在SAC中就可以这样调用:
MACRO MYSTUFF FILES ABC DEF XYZ
当你需要更改VALUES的时候,在调用的时候直接写进去就可以了,像这样:
MACRO MYSTUFF VALUES 10 12 3 FILES ABC DEF XYZ

宏写好放那里久了,就不知道里面到底能执行什么功能了,那么很有可能会用到参数查询哦。比如上面这个例子,你只记得宏的名称叫MYSTUFF了,到底能做什么忘了。那么你在SAC中调用,MACRO MYSTUFF,那么SAC就会提示你FILES?呢。等你把文件名输入进去后,它可不会提示问你要VALUES了,因为你已经在宏里面默认了。

在SAC中有个地方可以暂时存储变量,就是黑板,在那里面存储的变量由变量名和值构成。定义变量和取得变量可以用下面的方法:
SETBB C1 2.45           将变量C1的值设为2.45
SETBB C2 4.94
用GETBB就可以取值了,也可以在调用中在变量名前面加%,如
BANDPASS CORNERS %C1 %C2
用黑板可以做出更复杂的宏,因为可以在其中进行运算,例如
$KEYS FILES VALUE1
$DEFAULT VALUE1 4
READ $FILES
EVALUATE TO VALUE2 $VALUE1 * 2   EVALUATE TO跟SETBB差不多
EVALUATE TO VALUE3 %VALUE2 + 1
MUL $VALUE1 %VALUE2 %VALUE3
FFT
BG SGF
PSP AM

可以这样调用:MACRO MYSTUFF VALUE1 6 FILES ABC DEF XYZ
要注意VALUE1是输入参数,所以前面是美元$符号,而且VALUE2和VALUE3是黑板变量,前面用%就可以了。

SAC文件头文件相关
例子:
READ ABC
EVALUATE TO TEMP1 &ABC,A + 10
EVALUATE TO TEMP2 &1,DEPMAX * 2
CHNHDR T5 %TEMP1
CHNHDR USER0 %TEMP2

读入的文件名为ABC,TEMP1,TEMP2是黑板变量,在给TEMP1和TEMP2赋值的时候用到了EVALUATE TO。之后接变量名 “&”符号 文件名 “逗号” 表达式,而第三行是按文件数引用的,那个“1”就是文件数。

如何中断宏的执行
在宏中的某个位置加入$TERMINAL,程序就会从当前的宏中跳出到终端界面上,如果需要继续运行宏,在终端里输入$RESUME,那么宏就会从刚才中断的那条命令的下一条继续执行;如果你觉得中断了宏后用不上它,在终端里输入$KILL,就会结束当前宏的运行。

宏的逻辑测试
当然要用到IF了,语法是这样的:
IF expr
commands
ELSEIF expr
commands
ELSE
commands
ENDIF
expr 是个逻辑表达式,在SAC中常用的逻辑判断符号有这些:GT|GE|LE|LT|EQ|NE,分别代表大于,大于等于,小于等于,小于,等于,不等于。看下面这个例子:
READ $1
MARKPTP
IF &1,USER0 GE 2.45
FFT
PLOTSP AM
ELSE
MESSAGE "Peak to peak for \$1 below threshold."
ENDIF

首先读入文件,MARKPTP是测量峰值到峰值的最大值,并将其储存到头文件的USER0中,然后用IF测试,按文件数引用,头文件变量USER0 大于等于 2.45,那么FFT,绘图;否则打印信息;终止测试。

宏的循环
常用的语法如下:

DO 变量 = 开始, 结束, {,步长}
commands
ENDDO

DO 变量 FROM 开始 TO 结束 { BY 步长}
commands
ENDDO

DO 变量} LIST} entrylist}
commands
ENDDO

DO variable WILD {DIR name} entrylist
commands
ENDDO

WHILE expr
commands
ENDDO
BREAK

如果步长被省略,默认为1.
一些例子:
$KEYS FILE NPREW
$DEFAULT NPREW 1
READ \$FILE
DO J = 1 , $NPREW
DIF
ENDDO
FFT AMPH
DO J = 1 , $NPREW
DIVOMEGA
ENDDO
首先读入一系列数据文件,当然还要有相对应的文件数。循环到最后一个文件,做微分。计算谱。然后再循环,在频率域微分。
READ ABC
SETBB TIME1 0
DO TIME2 FROM 2 TO 10 BY 2
XLIM %TIME1 $TIME2
TITLE 'Particle Motion from %TIME1 to $TIME2$'
PLOTPM
SETBB TIME1 $TIME2
ENDDO
这个是画5段质点运动图,每段2秒

在WHILE型循环中,可以用BREAK终止循环。

SAC中降采样
用decimate
read file1 读入文件
decimate 5 降采样,每5点取1点
write over 保存文件

SAC中的内建函数
用FUNCGEN
比如
FUNCGEN TRANGLE NTPS 200 DELTA 1 三角函数,共采样200个点,采样率为每秒1点
WRITE FILE1
FUNCGEN BOXCAR 矩形函数(这里没有提供参数,很有可能继承上次的参数)
WRITE FILE2
FUNCGEN STEP 阶跃函数
WRITE FILE3

用于挑选波形的SAC宏
某个目录下有多个台站的SAC格式数据,需要对其按台站显示,将不好的波形文件删除掉,并挑选合格的波形进行震相标注,用SAC的宏可以比较容易办到:
do file wild *BHZ                                          *先只利用BHZ向的文件
setbb vert $file                                                                           *将BHZ向文件名赋值给黑板变量vert
setbb anyy '( CHANGE 'BHZ' 'BH?' %vert )'                                *将vert的BHZ改成BH?,并赋值给anyy
r %anyy                                                                                      *读入anyy
p1                                                                                               *绘图
setbb resp ( REPLY "PRESS d TO DELETE THE FILES " )      *resp为等待输入的字符,d删除波形
if %resp eq "d" then                                                                    *
sc rm %anyy                                                                            *调用SHELL删除波形
else                                                                                            *其他
ppk p 3 m on                                                                           *标震相
w over                                                                                     *保存
endif
enddo





zz from:http://hi.baidu.com/%C4%AA%BB%F4%BD%E7%C3%E6/blog/item/96ec8300bb5b3105728da526.html


  评论这张
 
阅读(6675)| 评论(7)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018