1. 压裂施工压力曲线基线特征提取
为什么先做基线特征提取
压裂施工压力曲线诊断的第一步不是“看哪里不对”,而是先建立一条可复用的参照基线。同一口井的破裂压力、延伸压力、瞬时停泵压力(ISIP)一旦被稳定提取,后续的分段识别、异常判定、净压力计算才有统一标尺。本案例对一口井的完整施工压力曲线做预处理并提取这三类关键特征点,输出一份可对照的基线特征表。
数据对象与预处理要点
假设某井施工数据采样为 1 Hz,字段包含时间 t(s)、井口压力 p(MPa)、排量 q(m³/min)。原始曲线常见三类干扰,必须先处理再取特征:
- 停泵段毛刺:停泵瞬间压力骤降伴随高频抖动,直接取最小值会低估 ISIP。
- 排量爬坡段:起泵初期排量未达设计值,压力上升不代表地层响应,不能用于破裂压力判读。
- 单点尖峰:传感器偶发跳变,需用中值滤波或滑动均值抑制。
预处理采用 5 点滑动中值滤波去尖峰,再用 3 点滑动均值平滑;排量低于设计排量 80% 的时段标记为“非稳定注入段”,不参与破裂压力提取。
三类基线特征点的提取逻辑
破裂压力 pb:在稳定注入段内,压力曲线由线性上升转为明显拐点(斜率下降)处的峰值。工程上常用“斜率突变法”:对平滑后压力求一阶差分,找到第一个差分由正转负且持续 3 个采样点以上的位置,其前一个局部极大值即破裂压力。
延伸压力 pe:破裂后进入裂缝延伸阶段,压力趋于相对平稳。取破裂点之后、加砂前稳定注入窗口内压力的中位数作为延伸压力,比取均值更抗砂堵波动干扰。
瞬时停泵压力 ISIP:停泵后压力快速下降,取停泵时刻后 1~3 s 窗口内平滑压力的外推值(对陡降段做线性拟合,外推到停泵时刻 t0),避免直接取首点受毛刺影响。
可执行的提取流程(Python 示例)
下面代码对示例数据完成预处理与三类特征点提取,输入为三列数组,输出基线特征字典。示例数据为教学构造,用于演示判读逻辑,不代表实测结果。
import numpy as np
def median_filter(x, k=5):
pad = k // 2
xp = np.pad(x, pad, mode="edge")
return np.array([np.median(xp[i:i+k]) for i in range(len(x))])
def moving_average(x, k=3):
pad = k // 2
xp = np.pad(x, pad, mode="edge")
return np.convolve(xp, np.ones(k)/k, mode="valid")
def extract_baseline(t, p, q, q_design):
p_s = moving_average(median_filter(p, 5), 3)
stable = q >= 0.8 * q_design # 稳定注入段掩码
# 破裂压力:稳定段内一阶差分由正转负且持续3点
dp = np.diff(p_s)
pb, pb_idx = None, None
for i in range(1, len(dp) - 3):
if stable[i] and dp[i-1] > 0 and dp[i] <= 0 and np.all(dp[i:i+3] <= 0):
pb, pb_idx = p_s[i], i
break
# 延伸压力:破裂后、停泵前稳定窗口的中位数
stop_idx = np.argmax(np.diff(q) < -0.5 * q_design) + 1
win = p_s[pb_idx+5:stop_idx-5]
pe = float(np.median(win)) if len(win) else None
# ISIP:停泵后1~3s陡降段线性外推到 t0
seg = slice(stop_idx, min(stop_idx+3, len(p_s)))
ts, ps = t[seg], p_s[seg]
if len(ts) >= 2:
k, b = np.polyfit(ts, ps, 1)
isip = float(k * t[stop_idx] + b)
else:
isip = float(p_s[stop_idx])
return {"p_break": round(float(pb), 2),
"p_extend": round(pe, 2),
"isip": round(isip, 2),
"t_stop": float(t[stop_idx])}
# 教学示例数据(构造)
t = np.arange(0, 800, 1.0)
p = np.piecewise(t,
[t < 60, (t >= 60) & (t < 300), (t >= 300) & (t < 700), t >= 700],
[lambda x: 5 + 0.05*x,
lambda x: 8 + 0.55*(x-60),
lambda x: 60 - 0.01*(x-300),
lambda x: 56 - 3.0*(x-700)])
q = np.piecewise(t, [t < 60, (t >= 60) & (t < 700), t >= 700],
[lambda x: 0.05*x, 3.0, 0.0])
print(extract_baseline(t, p, q, q_design=3.0))
示例输出(由上述构造数据直接推出):p_break≈60.0 MPa、p_extend≈58.0 MPa、isip≈56.0 MPa、t_stop≈700 s。数值与构造曲线一致,说明提取逻辑正确;真实井数据需按现场排量设计值调整 q_design 与稳定段阈值。
基线特征表(可直接填写复用)
| 特征项 | 符号 | 提取方法 | 示例值 | 判读要点 |
|---|---|---|---|---|
| 破裂压力 | pb | 稳定段斜率由正转负的局部极大值 | 60.0 MPa | 明显高于设计值需查近井污染或孔眼摩阻 |
| 延伸压力 | pe | 破裂后稳定窗口压力中位数 | 58.0 MPa | 持续抬升提示砂堵或滤失增大 |
| 瞬时停泵压力 | ISIP | 停泵后1~3 s陡降段线性外推 | 56.0 MPa | 与延伸压力差值反映净压力水平 |
| 停泵时刻 | t0 | 排量骤降首个采样点 | 700 s | 作为后续分段与净压力计算的时间锚点 |