简介:《Winglink使用简单介绍》面向地球物理数据处理初学者及需要处理AMT资料的工程技术人员,围绕Winglink软件的基础使用与资料处理流程展开。压缩包内含1个doc文档,大小约1.22MB,以文字说明配操作截图的形式整理,内容涉及共享文件夹设置、数据库与工区创建、测深数据导入、一维反演、批量处理及二维剖面成图等环节,并对静校正等关键注意事项作了提示。文档按处理环节组织,对实际工区资料处理中的常见环节和注意事项进行了归纳,便于按软件模块查阅,可帮助读者快速熟悉界面布局与处理思路,减少初次上手时的摸索成本。已有1001人学习,适合作为Winglink入门参考和AMT资料处理流程的辅助材料。
1. 从一张好看的废图说起:winglink 在 AMT 处理链里顶哪一段
AMT 资料最怕的不是反演跑不出来,而是跑出来了你不知道它对不对。winglink 把共享目录、测点导入、单点一维反演、网格化成图串成一条流水线,一周时间足够把一个工区的数据从原始频点表推到彩色电阻率剖面,但中间任何一步偷懒,最后那张图就是一张好看的废图。这篇按实际操作顺序拆:虚拟系统里的共享盘怎么设、五列数据怎么进、Bostick 和 Occam 怎么取舍、网格化步长与插值半径怎么定,以及静校正缺位时那条“挂面条”到底是怎么长出来的。手上有一批 AMT 测深数据、要在短时间内出二维剖面的同行,可以照着走一遍。
2. 共享盘、数据库与测线:三件地基没打牢,后面全是返工
winglink 这一代软件跑在虚拟系统里,这个设计决定了第一件事不是点菜单,而是让虚拟系统“看见”你的数据盘。很多人卡在导入那一步,以为是格式问题,其实是宿主机上的盘压根没挂进去,文件选择框里只有一个空目录。地基这部分看起来琐碎,但它决定了后面所有步骤能不能复现——虚拟系统里的路径一旦换机器就失效,工区建错地方后期迁移能把人逼疯,测线没保存则直接让网格化变成灰色按钮。
2.1 虚拟系统里的共享盘:为什么第一步永远是 Setting 到 Shared Folders
打开软件之后先别急着建库。点 Setting,弹窗里选 Shared Folders,把存放原始数据的那个盘勾上,确认后重启软件和虚拟系统。这一步的坑在于很多人勾完直接往下走,结果导入界面里盘符还是灰的——共享设置在部分版本里要重启虚拟环境才生效,不重启就是白设。共享的对象建议是一个专门的数据盘或者一个层级很浅的目录,不要把整个系统盘挂进去,虚拟系统扫盘会明显变慢。
目录结构我一般固定成四层,原始数据只读,任何处理产物都写到另外三个目录,这样出问题能一眼定位是哪个环节污染的:
| 目录 | 用途 | 读写策略 |
|---|---|---|
raw/ | 野外原始频点表、TEM 数据、测点坐标表 | 只读,任何情况下不改 |
edit/ | 做过列对齐、异常点剔除的中间文件 | 可写,带日期后缀 |
model/ | 单点一维反演结果、批量反演日志 | 可写,按模型类型分文件夹 |
map/ | 网格化网格、成图工程、导出的图片 | 可写 |
路径命名有个血泪经验:全路径不要出现中文、空格、括号、&。虚拟系统和宿主机之间的路径映射对特殊字符的处理很不稳定,剖面/最终版(2)/这种目录在软件里可能显示成乱码,导入时直接报文件不存在。全用英文小写加下划线,amt_line01_2024edit这种,丑但不出事。共享设好之后做个验证:在导入对话框里点开文件选择,能看到共享盘并且能进入raw/目录、能预览到文件,才算这一步过了。
2.2 建库与建工区:一个库对一个工区,别图省事
数据库(Database)和工区(Survey/Project)是两层概念,前者是容器,后者是实际的地理与坐标系上下文。常见做法是一个数据库只放一个工区的资料,跨工区塞进同一个库,后面测线检索、坐标投影、高程基准会互相打架,等到出剖面时发现两个工区的点被插到同一张网格上,那种排查成本远高于多建一个库。
建完工区第一件事是确认单位与坐标约定:水平坐标用米,电阻率用 Ω·m,相位用度,频率用 Hz。这几项在软件里通常有全局设置,设错了不会报错,只会在图上体现为数量级不对——比如把频率当成周期输进去,反演深度会整体偏一个量级,剖面看着挺像样,深度标尺全错。测点属性里还有一个容易被忽略的字段是高程。AMT 剖面必须带地形,否则剖面顶部是一条水平线,跟实际起伏对不上,做构造解释时会误判。原始表里如果有高程列,导入时一并映射;没有的话就在 Station 属性里手工补或者用表格批量粘贴,别指望后面补——网格化完成之后再改高程,整套插值要重做。
建库建工区的动作本身很简单,File 菜单下新建,填名字、选路径、确认坐标系。真正值得养成习惯的是命名规范:库名带工区代号和年份,工区名带测线范围,例如survey_A_2024、line01_06。软件里的对象一旦多起来,靠记忆区分“哪个是改过的版本”是不现实的。
2.3 测线绘制与保存:网格化按钮变灰,八成是这里漏了
数据导入之后进 Maps 模块,先出测点分布图和地形图。这一步的目的不是好看,是核对:测点数量跟野外记录对不对得上、点距是不是均匀、有没有明显偏离测线的飞点。飞点常见于坐标录错一位数,图上会看到一个点孤零零甩在几十公里外,这种点在插值时会把整条剖面拉歪,必须在画线之前处理掉。
画测线用折线工具按测点编号顺序连接,不是按空间最近邻连。AMT 测线经常有拐弯或者局部加密,按几何距离自动连会把顺序打乱,反演出来的剖面在拐点处出现虚假的横向梯度。线画完必须执行保存(Save Line / Save Profile),这是整篇流程里最容易被跳过、后果最直接的一步:没有保存的测线在 Gridding 里根本不被识别,New Grid 弹窗里测线列表是空的,你会以为是网格化模块坏了,其实是线还在内存里没落盘。
保存之后回头核一遍线属性:这条线上挂了多少个测点,首末点编号是不是跟设计一致。我见过一次线上少挂了三个点,原因是那三个点的坐标和高程都为空,画线时被自动跳过了,直到剖面上出现一段空白才发现。线名同样用英文加编号,L01、L02,不要用中文,导出和跨模块引用时中文线名在某些版本里会丢字符。
3. 导入这一步定生死:AMT 五列格式与 Delimiters 自定义模板
同一批数据,导入时列映射错一位,后面的反演、网格化、成图全部照常跑完,一个报错都不给,最后交上去的剖面是错的。这是整个流程里最黑匣子的一段。所以我的习惯是导入前先在外部把数据体检一遍,把列数、频点单调性、相位范围、空值全部查清楚,再进软件点菜单——软件里没有“数据质量报告”这种东西,它只负责读,不负责判断读进来的东西合不合理。
3.1 先体检再导入:五列数据的硬约束
AMT 测深数据的标准五列是频率、视电阻率 XY、视电阻率 YX、相位 XY、相位 YX。这里有两个隐含约定必须先确认:频率是升序还是降序(软件一般能吃两种,但同一批数据必须统一,混着来会导致曲线在中间折返)、相位是度还是弧度(弧度输进去数值只有 1.5 左右,图上看着像一条平线,很容易被误判成“数据质量差”)。下面这个体检脚本我每次导入前都跑,几十行,能省掉后面几小时的排查。
# amt_check.py —— 导入 winglink 前的五列数据体检 # 约定列序:freq(Hz), rho_xy(ohm-m), rho_yx(ohm-m), phase_xy(deg), phase_yx(deg) import sys import math EXPECT = 5 def parse(path): rows = [] with open(path, encoding="utf-8", errors="ignore") as f: for ln, line in enumerate(f, 1): s = line.strip() if not s or s.startswith("#"): # 跳过空行与注释行 continue # 逗号、制表符、分号、空格统一当分隔符 for ch in [",", "\t", ";"]: s = s.replace(ch, " ") parts = s.split() rows.append((ln, parts)) return rows def check(path): rows = parse(path) bad_col, bad_num, freqs = [], [], [] for ln, p in rows: if len(p) != EXPECT: bad_col.append((ln, len(p))) continue try: v = [float(x) for x in p] except ValueError: bad_num.append(ln) continue f, rxy, ryx, pxy, pyx = v freqs.append(f) # 电阻率必须为正,相位理论上落在 0~90 度,实测放宽到 -180~180 if rxy <= 0 or ryx <= 0: print(f"[L{ln}] 电阻率非正: {rxy}, {ryx}") if not (-180 <= pxy <= 180) or not (-180 <= pyx <= 180): print(f"[L{ln}] 相位越界: {pxy}, {pyx} <- 先确认单位是度还是弧度") print(f"总行数 {len(rows)},列数异常 {len(bad_col)},数值异常 {len(bad_num)}") if bad_col: print("列数异常行:", bad_col[:10]) if bad_num: print("非数值行:", bad_num[:10]) # 频点单调性与重复检查 diffs = [freqs[i] - freqs[i+1] for i in range(len(freqs)-1)] if any(d == 0 for d in diffs): print("存在重复频点,插值时会除零或产生假尖峰") if not (all(d > 0 for d in diffs) or all(d < 0 for d in diffs)): print("频点非单调,检查是否混入了不同批次的排列") print(f"频点范围 {max(freqs):.3g} ~ {min(freqs):.3g} Hz,共 {len(freqs)} 个") if __name__ == "__main__": check(sys.argv[1])代码逻辑就三件事:按统一分隔符切列、逐行数值化并做物理量范围判断、最后检查频点序列的单调性和重复。参数上唯一需要改的是EXPECT,如果你的数据带高程或测点号,会变成 6 列或 7 列,这时候改EXPECT的同时要把后面的解包顺序一起调。输出的“相位越界”提示最值得看,一旦整批都报越界,基本可以断定单位是弧度;零星几个点越界,那多半是野值,导入后在 View Data 里单独剔掉。
3.2 Delimiters 自定义模板:列顺序由你定,模板要存下来
软件自带一批数据模板,但野外数据五花八门,中间夹空格、夹分号、带表头注释的都有。File 菜单下选导入测点数据(Importing Station Data),在数据类型那一栏里有 Delimiters 类型,选它就是告诉软件“我自己定义列怎么切”。进去之后是三步:指定分隔符、指定每列映射到哪个物理量、保存模板。
映射这一步要按顺序点清楚,AMT 的五列对应关系是固定的:第 1 列频率,第 2 列 ρxy,第 3 列 ρyx,第 4 列 φxy,第 5 列 φyx。XY 和 YX 哪个是 TE 哪个是 TM,取决于野外布极方向和张量旋转约定,这个必须跟采集记录对上,不能凭感觉填。填反了不会报错,反演也能跑,但剖面会出现整体反常的横向变化,解释的时候能把人带沟里。
模板设好之后一定点保存并命名,比如amt_5col_tab。这一步的价值在于同一个工区几十个测点文件可以复用同一套映射,不用每个文件重设一遍——重设一次就有一次填错的机会。另外注意频率单位,有的设备导出的是周期(秒),导入模板里要明确告诉软件这是周期而不是频率,否则深度轴整体错位。
3.3 导入后的五分钟抽查:三张图判断数据进对没进对
导入完成不要直接往下走,花五分钟做三件事。第一件,在 Maps 里看测点分布,点数和位置对不对。第二件,进 Station 菜单的 View Data,随便挑两三个点把 ρ 和 φ 曲线画出来,正常曲线应该是随频率降低而平滑变化,如果出现锯齿状跳变、或者 ρ 曲线在某几个频点突然掉到 0.1 以下,多半是列错位或者空值被当成 0 读进去了。第三件,对比同一测点的 XY 和 YX 两条曲线,正常情况下两者形态接近、量级相当,如果差出一两个数量级,先怀疑映射填反。
提示:软件里菜单显示为 Importing Station Data,部分版本的汉化或旧文档会写成 DATE,看到类似拼写按 Data 理解即可,不影响操作路径。
4. 单点一维反演:Bostick 与 Occam 的取舍,以及静校正这道绕不过去的坎
一维反演是这条流水线的核心产出。每个测点独立反演出一组随深度变化的电阻率,几十个点拼起来再插值成二维剖面。听起来是把一维结果堆成二维,实际上这里有两个决策会直接决定剖面能不能用:选哪个反演算法,以及做不做静位移校正。前者影响分辨率和效率,后者影响整条剖面的横向连续性——不做静校正的剖面会出现那种垂向条纹密集、像挂面一样的形态,业内叫“挂面条”,不是审美问题,是数据被近地表不均匀体整体平移了。
4.1 Bostick 与 Occam:一个用来扫,一个用来交
Bostick 反演是从视电阻率-周期曲线直接换算的近似方法,不做迭代,速度快,一个点一秒内出结果,代价是分辨率低、对高频噪声敏感,深部界面会被抹得很模糊。Occam 反演走的是最小结构模型路线,迭代拟合观测数据,层数多、模型平滑,能给出比较可信的层状结构,缺点是慢,而且对初始模型和误差门限有依赖。
我的用法是先用 Bostick 把整条线扫一遍,看有没有明显异常的测点——某个点的 Bostick 结果跟邻居差出一个量级,那这个点大概率有问题(电极接地电阻大、或者被强干扰源污染),先挑出来单独看。确认数据整体没大毛病之后,再用 Occam 做正式反演。正式剖面的模型类型选 Occam,Bostick 结果只当参考底图,不要拿它交差。
反演跑完看两样东西:左边是拟合曲线与观测曲线的叠合情况,右边是模型。拟合看的是趋势不是逐点贴合,高频段(浅部)允许有偏离,低频段(深部)如果整段系统性偏高或偏低,说明静态位移没处理或者频点权重设得不对。跑完之后立刻保存(Save),并且命名里带模型类型,P12_occam、P12_bostick,别用默认名。原因很实际:后面 X-Sections 里模型是按名字列的,一堆model1、model2你根本分不清哪个是哪个,网格化时选错模型,前面几小时白干。
4.2 静位移校正:不改这一步,结果基本是错的
静位移的成因不复杂:近地表存在小范围的电性不均匀体,在电流场里产生电荷积累,导致视电阻率曲线整体上下平移一个近似常数因子,而相位几乎不受影响。这个特征很关键——相位不动、电阻率整体平移。所以剖面上看到的“挂面条”,本质是相邻测点的电阻率曲线被平移到了不同高度,插值的时候就在垂向上形成了密集的等值线条纹。
软件内置的校正思路是拿 TEM 数据做比对:TEM 对低阻体敏感、几乎不受静位移影响,把同一测点的 TEM 反演结果与 AMT 的浅部电阻率对齐,求出平移因子,再把这个因子应用到整条 AMT 曲线上。这个做法在有 TEM 数据的时候是最靠谱的,因为它是外部约束,不引入主观判断。
问题在于很多工区没有 TEM。这时候只能退而求其次:选一条形态最完整、浅部高频段最平稳的曲线作基准,其余测点在高频段(比如 100 Hz 以上)与基准对齐,求各自的平移系数。这个做法能用,但它把“哪条曲线是对的”这个判断交给了人,主观性很强,而且高频段本身如果受地形或近场源影响,对齐基准就是错的。所以做这一步一定要在记录里写清楚:用了哪种方法、基准点编号、平移系数范围,后面解释剖面时这些是必要信息。
注意:静校正必须在单点反演之前或反演结果的模型层面完成。网格化之后再想调,只能整张网格重做,前面的色标、范围设置全部作废。
4.3 Batch Tools 批量反演:前提是前面两步都干净
批量处理是效率工具,不是救命工具。它的适用前提很明确:数据已经完成静校正和预处理,格式统一,测点命名规范。操作路径是 Sounding 菜单下的 Batch Tools,选一维反演模型,把要处理的测点全选或者按线选,指定模型类型和输出目录,然后跑。
批量跑之前有几个设置值得先在小范围试一遍:误差门限(决定哪些频点参与拟合)、最大迭代次数、模型层数。拿三五个点先跑,看拟合残差和模型形态,没问题再全量。全量跑的时候留意日志里的失败点,批量任务不会因为个别点失败就中断,它会把失败的跳过继续跑,最后你拿到一堆结果但少几个点,如果没看日志,到网格化那一步才发现剖面上有个洞。
结果文件命名建议跟单点保持一致的前缀加测点号,P12_occam,批量输出目录按线分。还有一点:批量反演的结果不要直接覆盖手工调过的单点结果。有些点人工干预过(剔了野值、改了平移系数),这些点应该排除在批量任务之外,单独保留,否则一次批量把精细调整全冲掉。
5. 排查与避坑:五个把结果做废的现场记录
下面这五条都是我自己或者身边同行真实翻过的车,症状、成因、处理方式按顺序写,对照着排查比从头重做快得多。
第一条:导入时文件选择框里共享盘是灰的,或者点进去是空的。现象是 Setting 里明明勾了盘,重启软件后依然看不到。成因通常有两个,一是共享设置后只重启了软件没重启虚拟系统,映射没刷新;二是共享的路径里带了中文或特殊字符,虚拟系统解析失败。解决方式:先完整重启虚拟环境,再把数据挪到一个纯英文短路径下重新共享,比如根目录下建data_amt,路径层级不要超过三层。如果还不行,试着共享单个文件夹而不是整个盘,某些版本对整盘共享的支持不稳定。
第二条:导入没报错,但曲线形态完全不对,ρ 值在 0.01 到 1 之间打转。现象是 View Data 里画出来的曲线像噪声,或者整条线贴着 0 走。成因是列映射错位,把相位列当成了电阻率列,或者分隔符选错导致所有数字被读成一列。解决:回到导入模板,逐列核对映射顺序,先用体检脚本确认原始文件确实是五列;如果原始数据的相位是弧度,先在外部乘 57.3 转成度再导入,别指望软件自动识别。
第三条:Gridding 里 New Grid 弹窗的测线列表是空的,网格化做不了。现象是点开网格化,选不到线,或者选了线但提示没有可用数据。成因几乎都是测线没保存,或者保存了但线上没挂上测点(测点坐标为空的会被跳过)。解决:回 Maps 确认线已保存,再打开线属性看挂载点数与野外记录是否一致,缺的点补坐标补高程后重新挂线。这一步没有捷径,线不对后面全不对。
第四条:X-Sections 里选不到模型,剖面出不来。现象是二维剖面模块里的模型列表是空的,明明一维反演跑过了。成因是反演结果没保存,或者保存到了别的工区/别的目录。解决:回 Sounding 模块确认结果文件存在,命名不冲突,然后在 X-Sections 里刷新模型列表。养成习惯:每次 Run 完立刻 Save,不攒着。
第五条:剖面出来了,但满屏垂向条纹,像挂面一样。现象是等值线在横向上密集抖动,相邻测点的等值线对不齐。成因是静位移没校正,或者校正时基准选错导致平移方向反了。解决:回到单点层面对齐高频段,用 TEM 比对优先;没有 TEM 就重选基准点,把平移系数分布画出来看是否合理(正常应该在一个不大的范围内波动,如果系数散布很广,说明基准选得不好)。这一条最容易被当成“数据质量差”糊弄过去,实际上是处理流程缺了一环。
6. 网格化与色标:把一维点云拼成能交差的二维剖面
一维反演出来的是一串离散的深度-电阻率序列,每个测点一套,横向上没有任何约束。网格化的作用就是在测点之间插值,把这些一维序列连成连续的二维电阻率场。这一步参数设得粗,前面反演再准也白搭——步长太大会把真实的小尺度异常抹平,插值半径太小会让剖面出现阶梯和空洞,色标范围设窄了整张图就两三个颜色,看着干净其实丢掉了全部细节。
先说网格化的参数。X 方向是沿测线,步长取点距的 1/5 到 1/10,点距 50 米就取 5 到 10 米,这个比例是我试下来比较稳的经验值;Y 方向是深度,建议对数等间隔,浅部步长小、深部步长大,因为电阻率随深度的变化本来就是量级变化,等间距会把浅部细节压扁。插值半径或参与插值的点数取 3 到 5 个,这两个参数是联动的:步长小、点数多,插值会过分平滑;步长大、点数少,剖面上会出现明显的方格状伪影。
| 参数 | 含义 | 建议取值 | 判断依据 |
|---|---|---|---|
| X Step | 沿测线网格步长 | 点距的 1/5 到 1/10 | 小于点距的 1/10 收益递减,只增加计算量 |
| Y Step | 深度方向步长 | 对数等间隔 | 与电阻率随深度的量级变化匹配 |
| Interp Points | 参与插值的邻近点数 | 3 到 5 | 小于 3 出方格,大于 5 抹平真实异常 |
| Extent | 剖面外扩范围 | 首末测点外扩半个点距 | 避免边缘出现空白三角 |
网格出来第一眼通常是“颜色很单一”,这不是网格化失败,是色标范围没调。进 Contours 菜单选 Grid Color Ranges,把最小值最大值按对数电阻率的 5% 和 95% 分位来设,中间用 Ranges 控制色阶数量,16 到 32 之间比较合适,Step 决定色阶间隔。把极值卡在分位数上而不是绝对极值上,是为了不让一两个异常点把整张图的色带撑爆——这是最实用的一条调色经验。
提示:改完色标一定回 Windows 菜单把显示范围同步调一遍,色标和视窗范围不一致时,图上看不出问题,导出的图片却会被裁掉边缘。
最后是验证,三步。第一步抽点回查:挑三个测点,把网格化后该位置的电阻率值与单点反演模型对照,偏差超过半个数量级就说明插值参数有问题。第二步看地形贴合:剖面顶部应该跟着高程起伏走,如果顶部是一条直线,说明高程没进模型。第三步看相位拟合残差表,把残差明显偏大的测点标出来,这些位置的模型可信度要打折,解释时不能当硬约束用。
从那以后我每次出正式剖面之前,都会先跑一遍列体检脚本、抽查三个点的原始曲线、再把网格化参数和色标范围截图存档,三件事加起来不到十分钟,但能挡掉大部分事后返工。希望帮到你。
本文还有配套的精品资源,点击获取