4. 单测点位移速率计算与阈值初判

任务对象与计算口径

本节只处理一个测点的位移时间序列。输入为经过时间对齐与异常清洗后的序列 D = {(t_i, d_i)},其中 t_i 为统一时间基准下的时刻(单位 s),d_i 为累计位移(单位 mm,约定沿坡向向下为正)。输出为逐时刻的位移速率 v_i(mm/h)与预警状态序列 s_i。

速率采用中心差分,避免单侧差分带来的相位滞后:

v_i = (d_{i+1} - d_{i-1}) / (t_{i+1} - t_{i-1}) * 3600    (mm/h)

端点 i=0 与 i=n-1 使用单侧差分。阈值初判采用三档:v < 2 mm/h 为正常(NORMAL),2 ≤ v < 5 mm/h 为关注(WATCH),v ≥ 5 mm/h 为预警(ALARM)。阈值属于示例设定,实际工程应按边坡等级与监测设计取值。

逐时刻计算与状态判定

下面给出可直接运行的实现。示例数据为教学构造的 10 个时刻、采样间隔 600 s(10 min)的累计位移序列,用于演示计算路径与状态序列生成,不代表任何真实边坡实测结果。

import numpy as np

# 示例输入:统一时间基准下的时刻(s)与累计位移(mm)
t = np.array([0, 600, 1200, 1800, 2400, 3000, 3600, 4200, 4800, 5400], dtype=float)
d = np.array([0.0, 0.3, 0.7, 1.2, 1.9, 2.9, 4.4, 6.6, 9.5, 13.1], dtype=float)

WATCH_TH = 2.0   # mm/h
ALARM_TH = 5.0   # mm/h

def displacement_rate(t, d):
    n = len(d)
    v = np.zeros(n)
    v[0] = (d[1] - d[0]) / (t[1] - t[0])
    v[-1] = (d[-1] - d[-2]) / (t[-1] - t[-2])
    for i in range(1, n - 1):
        v[i] = (d[i + 1] - d[i - 1]) / (t[i + 1] - t[i - 1])
    return v * 3600.0   # 换算为 mm/h

def classify(v, watch_th, alarm_th):
    if v >= alarm_th:
        return "ALARM"
    if v >= watch_th:
        return "WATCH"
    return "NORMAL"

v = displacement_rate(t, d)
states = [classify(x, WATCH_TH, ALARM_TH) for x in v]

for ti, di, vi, si in zip(t, d, v, states):
    print(f"t={ti:6.0f}s  d={di:6.2f}mm  v={vi:6.3f}mm/h  state={si}")

按上述示例数据,中心差分得到的速率序列呈递增趋势:前段约 1.8 mm/h 处于正常区,中段越过 2 mm/h 进入关注区,末段超过 5 mm/h 进入预警区。端点单侧差分因区间较短,数值会略偏离相邻中心差分值,这是端点处理的正常现象,判读时应以中心差分结果为主。

速率—阈值—状态的关系

下图把本节的核心逻辑压缩为一张参数关系与状态映射图:左侧是位移序列经差分得到速率,右侧是速率落入三个阈值区间后映射出的状态,底部标出端点单侧差分的特殊处理位置。

累计位移序列 d(t) 单位 mm,坡向向下为正 采样间隔 Δt = 600 s 已对齐、已清洗 n = 10 个时刻 中心差分求速率 v_i = (d_{i+1} − d_{i−1}) / (t_{i+1} − t_{i−1}) × 3600 端点 i=0、i=n−1 用单侧差分 输出 v_i 单位 mm/h 阈值初判 v < 2 mm/h → NORMAL 2 ≤ v < 5 → WATCH v ≥ 5 mm/h → ALARM 逐时刻预警状态序列(示例数据计算结果) 0 600 1200 1800 2400 3000 3600 4200 4800 5400 时刻 t / s N N N N W W W A A A 端点单侧差分 端点单侧差分

结果判读与验证要点

  • 速率符号:按“坡向向下为正”约定,正速率表示向坡外变形;若数据源采用相反约定,需在计算前统一取反,否则状态判定会整体错位。
  • 端点值:首末时刻的速率由单侧差分得到,区间短、噪声敏感,建议在状态序列中标注为“端点参考值”,不单独作为升级预警的依据。
  • 阈值边界:判定使用 ≥ 闭区间,恰好等于 2 或 5 mm/h 时归入更高一档,避免边界值在实现间产生歧义。
  • 验证方法:可用线性匀速序列 d = k·t 做自检,此时所有中心差分速率应恒等于 k×3600,端点单侧差分也应一致;若出现偏差,说明时间单位或差分索引有误。
  • 状态序列用途:本节输出的是逐时刻状态,尚未做持续时长、连续超限次数等持续性判据,这些属于后续预警规则的内容,不应在本节提前引入。
若采样间隔不均匀,中心差分公式仍然成立,因为分母使用的是实际时间差 t_{i+1} − t_{i−1};但端点单侧差分在间隔差异较大时误差更明显,建议对端点单独标注置信度。