资讯动态

rdseed v5.2 编译与使用:SEED 转 SAC 波形数据处理指南

发布时间:2026/10/14 9:31:51 来源:尧图企业网站定制
简介面向地震数据处理与SEED格式解析的科研与工程场景这份rdseedv5.2.tar.gz是地球物理领域常用的工具包主要服务于地震学家、数据管理人员及相关专业学生帮助完成SEED数据的读取、格式转换、质量检查与时间序列特征提取。包内共246个文件以C语言源码210个.c、头文件11个.h及makefile构建脚本为主辅以可执行程序、PDF说明文档和变更记录压缩包整体仅2.03MB轻量且便于在Linux/Unix环境部署。资源目前已有403人学习使用覆盖从数据提取、Mini-SEED/SAC格式转换到功率谱分析与数据归档的常见操作思路。通过阅读源码和编译脚本使用者可深入理解rdseed对SEED数据流的解析逻辑并针对特定台网或事件数据进行二次开发随附的readme、changes与文档资料则有助于快速上手和排查问题是开展地震数据处理与方法研究的实用参考。1. rdseed v5.2 没有过气处理 SEED 波形数据的老牌瑞士军刀rdseed v5.2 看起来像是一个停在十年前的东西一个 tar.gz 压缩包里面是 C 和 Fortran 混编的源码configure、make 那套老旧的构建流程。但如果你认真处理过 FDSN 网络下发的 SEED 波形文件就会知道这个老工具依然是很多地震学流程里绕不开的黑匣子。它解决了最落地的一件事把体积型 SEED 格式解开变成 SAC、MiniSEED、AH 这些你真正能用来做震相拾取、定位和反演的文件。适合在 Linux 服务器上做批处理、被数据格式卡住的科研人员和数据处理工程师尤其是那些需要反复处理台网归档数据的场景。2. 编译 rdseed v5.2从 tar.gz 到可执行文件的完整流程2.1 为什么还要手动编译一段老代码的生命线很多人会问现在 ObsPy 能读 MiniSEEDSAC 也能直接读 SEED为什么还要费劲编译一个二十多年前的 rdseed我给你的答案是体积型 SEED 和 MiniSEED 是两个物种。FDSN 提供的 event 波形打包下载往往是包含台站元数据、通道响应和波形数据的完整 SEED 体积文件。ObsPy 的obspy.read()面对这种体积型 SEED 时经常只读得到头段或干脆说格式不认识而 SAC 的r命令对体积型 SEED 的支持也远不如对 MiniSEED 那么顺滑。rdseed 在中间的定位是把体积型 SEED 拆成大家都能吃的单通道文件。另外一层原因在批处理。很多老的地震定位流程、震相拾取脚本、波形归档目录结构当年就是按 rdseed 的输出文件命名规则搭起来的。你新进一个课题组前面的人留下的流程里十有八九还挂着rdseed -f xxx -d -o 1这种命令。与其用别的库重写一遍流程不如直接把这个 tar.gz 编出来让你的脚本和老流程无缝衔接。2.2 在 Linux 上完成 configure 与 make最小步骤v5.2 源码包解压后你会拿到 configure 脚本、一批 C 源文件和 Fortran 源文件。编译工具链上需要 gcc、gfortran 和 make。Debian/Ubuntu 系用apt install build-essential gfortranCentOS/RHEL 用yum groupinstall Development Tools再补一个gcc-gfortran。这一步没做好的话configure 可能过得去但 make 百分百会在链接阶段翻车。# 解压 tar.gz进入源码目录 $ tar -xzf rdseedv5.2.tar.gz $ cd rdseed5.2 # 生成 Makefile多数情况下不带参数就行 $ ./configure # 编译产出 rdseed 可执行文件 $ make # 放到用户根目录的 bin 下避免污染系统目录 $ mkdir -p ~/bin $ cp rdseed ~/bin/ $ echo export PATH$HOME/bin:$PATH ~/.bashrc $ source ~/.bashrc # 验证能打出 Usage 说明就算成功 $ rdseed -h 21 | head -20configure 不加参数的做法在 Linux 上最常见它默认会用系统编译器去探测 C 和 Fortran 运行时。make 过程中如果出现gfortran相关的未定义引用说明前面没装 Fortran 编译器回去补装之后make clean再重来不要在缺依赖的状态下反复 make那个错误信息会骗你以为是源码的问题。命令里最后一行验证用的是rdseed -h这个命令同样会把编译器的日期和用法打印到终端看到 Usage 信息就说明可执行文件已经能跑起来了。2.3 编译后的路径规划与可用性验证编译好的 rdseed 只有一个静态可执行文件没有动态库依赖这个特性在服务器环境里很省心。我一般会把它放进~/bin而不是/usr/local/bin原因是这台机器可能同时服务多个数据处理项目每个项目对 rdseed 版本的期待不一样。放进用户根目录的 bin需要切版本时只要改 PATH 顺序即可不需要动 root 权限。路径放好之后我会先找一个小体积的 SEED 文件做冒烟测试。验证时不看波形先看在当前目录下生成了什么。一个正常的体积型 SEED 文件rdseed 会生成名为rdseed.parameters的参数文件和一批以.SAC结尾的波形文件。如果一个分量文件都没出来先检查你的输入文件是不是被别的前处理环节改成了 MiniSEED 或别的什么。rdseed 对文件头的校验非常严格哪怕文件只是被截断了几百字节它也会直接停止解压而不是给你一个残缺的 SAC。3. 把 SEED 变成 SAC 的第一次转换rdseed 的命令行参数与选择文件3.1 核心参数速查先认得 -f、-d、-o、-Rrdseed 的参数风格偏老派单字母为主含义靠记。我把用得最频繁的七个参数整理成一张表覆盖从解压到生成响应文件的完整链路。参数作用我常用的写法-f指定输入的 SEED 文件-f raw.seed-d解出波形数据文件-d-o设定输出格式1 为 SAC4 为 MiniSEED-o 1-p输出参数表记录台站与事件信息-p-R输出 RESP 仪器响应文件-R 1-q把读取到的 SEED 头段摘要打到终端-q-c指定选择文件过滤台网、台站与通道-c my.select很多人第一次用 rdseed 会漏掉-d结果运行后只生成了参数文件没有波形。-d是触发波形解压的开关不加它 rdseed 就只是个“SEED 头段阅读器”。-o的默认值在多数编译版本里是 SAC但我在批处理脚本里始终显式写-o 1这样换机器、换版本时不会因为默认值不同而输出一堆预料之外的文件。3.2 最小可运行转换命令读时间窗、解波形、写 SAC先给一个最简单的命令把单台站的 SEED 转成 SAC。下面的例子假设你从事件服务下载到了一个名为SEED.2024.001.ANMO.BH.Z的完整 SEED 文件。# 最小转换-f 指定输入-d 解开波形-o 1 输出 SAC-q 打印头段摘要 $ rdseed -f SEED.2024.001.ANMO.BH.Z -d -o 1 -q这条命令跑完你会在当前目录看到两个东西一个rdseed.parameters文件以及一个与通道对应的.SAC文件。-q会在终端打印出台站名、信道名、开始时间、采样率这些摘要信息方便你第一时间确认头段解析是否正常。这里说的“正常”重点看开始时间是不是你预期的事件时刻采样率是不是对的。如果-q打印出来时间和采样率都没问题那波形数据基本就解开了。参数说明上-f后面不能留空格再写路径但路径本身可以带完整目录。-o 1的取值决定你用什么工具去读这些文件SAC、GMT、大多数定位程序都以 SAC 格式为接口所以这个值在绝大多数情况下不用改。3.3 选择文件只处理你要的台网、台站与信道一旦站在台网角度做事单条命令就不够了。比如你下载了一个包含几十个台站的 SEED你只想解出 IU 台网 ANMO 台的三个宽频分量就要用选择文件。我常用的选择文件写法是下面这个# 这是 rdseed 的选择文件 my.select NET 0,IU STA 0,ANMO CHA 1,BHE,BHN,BHZ第一列的三个缩写分别是 NET、STA、CHA含义是台网、台站、通道。第二列的 0 或 1 表示“排除 / 包含”配合后面的名字列表实现过滤。上面的例子意思是只保留 IU 台网、ANMO 台站、三个宽频分量。使用方式是在命令里加-c my.selectrdseed 就会按这个条件去解压其余台站一律不生成波形文件。这个选型有一个容易被忽略的点如果文件里还有 BH1、BH2 这种倾斜分量而你只写了 BHE、BHN、BHZrdseed 会安静地跳过它们不会在日志里报错。所以批处理前先拿-q跑一遍看看文件里实际有哪些通道再回头写选择文件的 CHA 行。用选择文件而不是硬编码通道名还有个好处是你可以把同一套规则丢给不同日期的数据文件重复使用整个流程的可复现性会好很多。4. rdseed 输出的格式选择SAC、MiniSEED 与 RESP 到底按什么标准挑4.1 SAC 是默认答案从数据格式到 SAC 头段大多数地震学科研流程把 SAC 当作默认交换格式这不是偶然。SAC 文件本身自带头段里面能写台站坐标、事件坐标、开始时间、采样率、震中距还能在后续用saclst一行命令批量提取这些字段。rdseed 转出来的 SAC 头段里台站信息和事件信息基本都是从 SEED 头段的 Blockette 里带过来的这比从回文文件里手写头段快好几个数量级。我一般转完会马上验证头段的完整性命令是# 用 saclst 检查 SAC 头段中的台网、台站、分量与起止时间 $ saclst knetwk kstnm kcmpnm b e f SEED.2024.001.ANMO.BH.Z.SAC看到输出里有一行IU ANMO BHZ 2024/001/00:00:00.000 ...之类的信息就说明头段解析正确。SAC 头段里最容易缺失的是事件相关的evla、evlo、evdp字段。rdseed 只负责从 SEED 里搬东西SEED 里没有事件坐标时它不会替你编一个所以这批字段为零不代表 rdseed 出问题你需要在后续流程里用事件目录补进去。这里建议你把事件信息从 FDSN 事件服务的text输出下载好再写个小脚本回填 SAC 头段这比手工逐个编辑靠谱得多。4.2 MiniSEED 别当备份什么场景下才值得用 -o 4rdseed 的-o 4能输出 MiniSEED 格式。MiniSEED 去掉了大量台站元数据只保留波形、时间戳和必要的通道标识文件体积也小不少。但我不推荐你把 MiniSEED 当 SAC 的“轻量备份”。原因很直接MiniSEED 文件里通常不包含仪器响应信息你后续做去仪器响应时还得回到原始 SEED 去拉 RESP 或极零点。数据链路一旦断了后面补元数据的过程相当痛苦。什么场景下值得用-o 4最常见的是给数据中心归档或者跨机构交换。有些数据中心只接受 MiniSEED 作为交付格式因为它的文件体积可控、时间戳标识清晰。如果你有这个需求我在转换时会先转 SAC再从 SAC 写一个管道输出 MiniSEED而不是直接用 rdseed 的-o 4。原因是 rdseed 输出的 MiniSEED 文件名和块结构比较老后续工具兼容性未必比得上用 SAC 重新写出来的版本。这个选择不是硬性规定但能少踩不少坑。4.3 做仪器校正别选错RESP 与极零点PZ的边界处理真实数据时仪器响应移除几乎是逃不掉的一步。rdseed 提供两条路-R 1生成 RESP 文件-p生成的参数文件里则包含极零点PZ信息。两者看起来都在描述仪器响应但后续读取它们的工具不一样。SAC 的transfer from zero-pole通道直接吃 PZ 文件而一些反演软件则要求 RESP 格式。我在做实际项目时通常两个都生成让前处理脚本按需选择。# 同时生成 SAC、RESP 与参数文件-R1 产出 RESP-p 产出 parameters $ rdseed -f SEED.2024.001.ANMO.BH.Z -d -o 1 -R 1 -p注意这里-R 1和-p是互补的。-p生成的rdseed.parameters是一个文本文件里面包含台站坐标、通道方向、采样率以及极零点列表。而-R 1会为每个通道生成一个独立的.RESP文件用更标准的 RESP 格式描述同一份仪器信息。做谱域分析时我优先用 RESP 文件因为你直接把 RESP 丢给evalresp就能得到任意频点的幅频相频响应而用 PZ 文件还需要自己在代码里做一次多项式求值多一步计算就多一个出错的机会。5. rdseed 常见问题与避坑从编译失败到数据翻车的 5 个排查记录5.1 编译阶段报 “undefined reference to gfortran_”现象./configure顺利通过make进行到链接阶段突然中断屏幕上出现一堆undefined reference to gfortran_runtime之类的错误。原因rdseed 的源码是 C 与 Fortran 混合编译的C 代码在链接时需要 Fortran 运行库提供底层数学函数。你装的编译器工具链只包含 gcc没有 gfortran所以链接器找不到对应的符号库。解决先补装 Fortran 编译器。Debian 系执行apt install gfortranRHEL 系执行yum install gcc-gfortran。装完之后务必先make clean再重新运行make。不要试图只make增量编译因为你缺的是链接阶段的运行库增量编译会把上一轮的错误状态带过去。5.2 SEED 转出来了但波形全静默现象rdseed 正常退出也生成了 SAC 文件但用 SAC 看图或者用saclst DEPMIN DEPMAX查询振幅全为零或极小。原因文件本身是体积型 SEED但数据段里有部分记录的时间校正值不一致。rdseed 内部按 Blockette 1000 的时间基准做波形还原如果原始文件在传输或截取过程中丢了一段记录它会默认把那部分数据视为无效且不报错。解决回到原始 SEED 文件检查它的完整性。FDSN 下载时如果客户端断了重连产生的文件经常是残缺的。先用rdseed -q看解压记录的条数再和事件服务页面上的预期条数比对。发现不一致就重新下载。这个坑的隐蔽之处在于 rdseed 的退出码是 0很多人看到“成功退出”就跳到下一步了实际数据已经废了。5.3 SAC 头段里事件参数全是 0现象转换完成波形正常但evla、evlo、evdp这几个头段值是 0。原因事件信息不在 SEED 文件里。体积型 SEED 可能只包含台站波形数据事件位置保存在事件目录文件或 FDSN Event 服务的文本输出里。rdseed 只能从输入文件搬数据输入里没有的字段它不会自己编造。解决分两步走。先从事件服务下载事件参数再用一段脚本按事件时间把evla、evlo、evdp写进对应的 SAC 头段。我常用的做法是先把所有 SAC 文件按时间归组再用sac命令批量更新头段。这里的要点是不要让头段不全的数据进入定位流程否则定位结果会在事件位置上多出一个莫名的系统偏差。5.4 选择文件没匹配上只解出一个台站现象加了-c my.select后明明 SEED 里有几十个台站最后只生成了少数几个 SAC 文件。原因选择文件里的台网、台站代码和 SEED 里实际写的不一致。比如 SEED 头段里台站名是ANMO你却写了ANM0或者通道列表写的是BH1实际数据是BHZ。rdseed 对选择文件采取的是“未匹配就跳过”的策略不会在日志里提示你没匹配上。解决先用-q不加选择文件跑一次把打印出的台网台站通道列表和选择文件逐项对照重点看第二列的 0/1 逻辑有没有写反。你写NET 0,IU表示排除非 IU 台网但你若写成NET 1,IU语义就变成“只保留非 IU 台网”。这种逻辑写反的报错不会弹出你只会发现结果文件数不对属于典型的“静默失败”。5.5 批量任务跑了一夜没结束现象服务器上挂了 50 个 SEED 文件rdseed 进程已经跑了几个小时输出文件还在增长。原因rdseed 是单线程程序处理一个包含几十个台站全通道数据的体积型 SEED 时波形解压和响应文件生成都要花时间。你如果在一个循环里逐文件处理还要写大量结构化日志整个任务就会拖得非常长。解决把任务按“台站-通道”粒度拆开并行。一种常见做法是先用选择文件只保留单台站单分量再开多个进程同时跑不同批次。我在批处理脚本里用xargs -P控制并行度比如一次并行四个任务既不会把服务器 CPU 吃满也能把原本一夜的转换压缩到一两小时。并行之后日志文件必须按批次分开写否则多进程同时写同一个日志会让你没法定位失败任务。6. 用脚本把 rdseed 封装成批处理流程日志、校验与一处后悔药6.1 一个跑完整个目录的循环脚本当处理对象从一两个文件变成几十上百个文件时我建议你写一个极简的批处理封装。下面这段脚本是我在 Linux 服务器上的常用套路逻辑很简单遍历原目录里的 SEED 文件各自转换再把 SAC 和 RESP 按文件名归档到独立目录。#!/bin/bash shopt -s nullglob for seed in raw/*.seed; do base$(basename $seed .seed) mkdir -p sac/$base # 转换SAC RESP 参数表日志单独落盘 rdseed -f $seed -d -o 1 -R 1 -p -q sac/$base/$base.log 21 # 把生成的 SAC 与 RESP 移动进归档目录 mv *.SAC sac/$base/ 2/dev/null mv *.RESP sac/$base/ 2/dev/null done脚本里两个关键点一是把-q的输出同时重定向到日志文件这样排查问题不用重跑二是mv *.SAC前的2/dev/null因为某些目录可能只生成了 RESP 没生成 SAC不加的话脚本会在没匹配到文件的 mv 上报错。shopt -s nullglob的作用是让 for 循环在没有匹配文件时直接跳过而不是拿一串空通配符当文件名去执行 rdseed。6.2 结果校验抽检 3 个 SAC 文件再进下一步批量跑完之后先别急着进后续流程。我会在终端里抽 2~3 个归档目录用 saclst 看每个 SAC 文件的台网、台站、分量和起止时间确认没有因为上面第 5 章说的静默问题产出坏文件。# 抽检随机挑两个归档目录检查头段四要素 $ for d in sac/*/; do saclst knetwk kstnm kcmpnm b e f $d/*.SAC; done如果输出里出现KCMPNM带空格或时间变成1234567之类的怪值先不要删原始 SEED 文件回到raw/目录重跑单个文件验证。这里我要说一个自己的习惯保留原始 SEED 目录直到抽检完成后再统一压缩归档。批处理转换这件事里最贵的一次操作不是重新下载数据而是“数据发现坏了但原始文件已经被你删了”。给自己留一次后悔药比省那一点磁盘空间实在得多。我在早期项目里就因为没做抽检让一批头段不全的 SAC 一路跑进了叠加流程最后回头排查花了整整一个下午。从那以后我保留原始文件到最终结果核验通过才归档这条习惯一直用到现在。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑