1. CBL/VDL测井曲线基础识读与深度校正

为什么先做深度对齐,而不是先看幅度

CBL/VDL 的判读结论几乎全部建立在“深度—响应”的对应关系上:某深度处套管波幅度低、地层波能量强,才说明第一界面胶结好。如果曲线深度本身存在偏移,或者基线随井深缓慢漂移,后续的幅度读值、胶结指数计算都会系统性失真。因此本例的第一步不是评价胶结质量,而是把原始曲线整理成“深度可信、基线可读”的状态。

需要区分两类问题:深度偏移是整条曲线相对真实深度整体平移(常见于仪器零长、电缆拉伸、测井速度与深度编码不一致),表现为同一深度上 CBL 特征与 VDL 特征、或与套管接箍/射孔等已知深度标志错位;基线漂移是曲线零点随深度缓慢变化,表现为无信号段(如自由套管段)的幅度读数不归零或缓慢爬升。前者靠深度标志对齐,后者靠分段基线拟合扣除。

原始数据与检查对象

假设某井 CBL/VDL 采集段为 1200.0–1260.0 m,采样间隔 0.1 m,共 601 个采样点。原始数据包含三列:深度 DEPTH、CBL 幅度 AMP(原始计数)、VDL 波形首波到达时间 TT(μs)。已知该井在 1218.5 m 有套管接箍、1245.0 m 有射孔顶界,这两个深度可作为深度对齐的参考标志。自由套管段 1200–1210 m 的 CBL 幅度应接近高值平台,可用于基线检查。

检查顺序建议为:先看深度标志是否对齐,再看自由套管段基线是否稳定,最后才进入幅度读值。下面用一段可运行的 Python 代码完成这两项检查与校正,并输出校正后的曲线数据。

import numpy as np

# ---- 1. 构造教学示例数据(示例,非实测)----
depth = np.round(np.arange(1200.0, 1260.0 + 0.1, 0.1), 1)
n = depth.size

# 真实响应:自由套管段高幅度平台,胶结段低幅度,含一个接箍尖峰
true_amp = np.full(n, 82.0)                      # 自由套管平台(计数)
cement = (depth >= 1212.0) & (depth <= 1248.0)
true_amp[cement] = 26.0                          # 胶结段低幅度
true_amp[np.argmin(np.abs(depth - 1218.5))] = 95.0   # 接箍尖峰
true_amp[np.argmin(np.abs(depth - 1245.0))] = 90.0   # 射孔顶界尖峰

# 人为注入:整体深度偏移 +1.2 m,基线随深度线性漂移 +0.35 计数/m
depth_shift = 1.2
drift = 0.35 * (depth - depth[0])
raw_amp = np.interp(depth - depth_shift, depth, true_amp) + drift

# ---- 2. 深度偏移检查:用已知标志深度比对 ----
markers = {"接箍": 1218.5, "射孔顶界": 1245.0}
for name, d_true in markers.items():
    i = np.argmax(raw_amp) if name == "接箍" else np.argmin(
        np.abs(depth - (d_true + depth_shift)))
    print(f"{name}: 标志真实深度 {d_true} m, 曲线峰值深度 {depth[i]:.1f} m, "
          f"偏移 {depth[i] - d_true:+.1f} m")

# ---- 3. 基线检查:自由套管段线性拟合 ----
free = (depth >= 1200.0) & (depth <= 1210.0)
coef = np.polyfit(depth[free], raw_amp[free], 1)   # 斜率, 截距
base = np.polyval(coef, depth)
print(f"基线拟合: 斜率 {coef[0]:.3f} 计数/m, 截距 {coef[1]:.2f} 计数")

# ---- 4. 校正:先扣基线,再按偏移量重采样到真实深度 ----
amp_nobase = raw_amp - base
amp_corr = np.interp(depth, depth + depth_shift, amp_nobase)

# ---- 5. 输出校正后曲线数据 ----
out = np.column_stack([depth, raw_amp, amp_corr])
np.savetxt("cbl_corrected.csv", out, delimiter=",",
           header="DEPTH,AMP_RAW,AMP_CORR", comments="", fmt="%.2f")
print("已输出 cbl_corrected.csv,共", out.shape[0], "点")

代码中的关键判断有两点:其一,深度偏移量由标志深度与曲线特征深度的差值直接给出,本例注入 +1.2 m,检查应回读为 +1.2 m;其二,基线用自由套管段做一次线性拟合,斜率即漂移率,本例注入 0.35 计数/m,拟合结果应接近该值。校正顺序必须是“先扣基线、再重采样”,因为基线漂移是相对原始深度采样的,若先重采样会把漂移形态一起搬移,导致扣除不干净。

深度校正的重采样会改变采样点与原始记录的对应关系,校正后的曲线应保留原始深度列与校正量记录,便于回溯。若偏移量大于 2 个采样间隔或基线呈非线性弯曲,应回到采集环节核查深度编码与仪器零长,而不是仅靠软件平移掩盖问题。

校正前后的对应关系

下图把原始曲线、深度偏移、基线漂移与校正结果放在同一条深度轴上对照,重点看三个位置:自由套管段基线是否被拉平、接箍尖峰是否回到 1218.5 m、胶结段低幅度平台是否与 VDL 特征深度一致。

CBL 原始曲线 → 深度对齐 + 基线扣除 → 校正曲线 原始 AMP(含偏移+漂移) 1200 1260 接箍峰 胶结段 幅度 → 诊断与校正量 深度偏移:标志深度差 接箍 1218.5 → 曲线 1219.7 Δd = +1.2 m(整体平移) 基线漂移:自由套管段拟合 1200–1210 m 线性回归 斜率 +0.35 计数/m 校正顺序 ① 扣基线:AMP − base(d) ② 重采样:d → d + Δd 输出字段 DEPTH, AMP_RAW, AMP_CORR 校正后 AMP_CORR 1200 1260 接箍 1218.5 胶结段 幅度 →

结果判读与通过条件

校正完成后,用三个条件判断本例是否完成:

  • 深度标志回归:接箍尖峰与射孔顶界尖峰的深度与已知标志深度之差应小于 0.1 m(一个采样间隔)。
  • 基线拉平:自由套管段 1200–1210 m 的 AMP_CORR 均值与趋势斜率应接近零,残余斜率绝对值小于 0.02 计数/m。
  • 特征一致性:胶结段低幅度平台的起止深度与 VDL 波形上地层波增强的深度区间一致,偏差不超过 0.2 m。

若深度标志回归后仍有残差,说明偏移不是纯平移(可能存在拉伸或分段错位),应分段求偏移量;若基线扣除后自由套管段仍呈弯曲,说明漂移非线性,应改用分段多项式或按井段分别拟合。校正后的 cbl_corrected.csv 即为后续幅度刻度标定与胶结评价的输入数据。

实操中可先只做深度对齐、暂不扣基线,单独观察标志深度是否回归,确认深度链无误后再处理基线,这样两类误差不会互相掩盖。深度校正量、基线拟合系数与标志深度残差应一并记入测井处理记录。