3. 基于路测数据的邻区覆盖交叠识别

路测数据到交叠指标的转换思路

本案例的核心任务不是重新采集数据,而是把已有的铁路沿线路测采样点转换成“邻区对级”的覆盖交叠量化指标。关键对象是主服务小区与候选邻区在沿线路测轨迹上的相对电平关系:当邻区电平接近主服务小区时,该位置就落入潜在切换带。我们需要的输出是每个邻区对的交叠长度、切换带宽度、交叠占比,并据此判定交叠不足或过大。

为避免把“覆盖交叠”与“切换带”混为一谈,先明确两个量的定义:

  • 覆盖交叠区:沿线路测轨迹上,邻区电平与主服务小区电平之差进入某一门限范围(例如 −6 dB 至 +3 dB)的连续采样段,反映两小区存在可用的覆盖重叠。
  • 切换带宽度:交叠区内满足“邻区电平 ≥ 主服务电平 − 迟滞/偏置等效余量”的连续段长度,代表实际可触发切换的空间范围。

下面用一段可运行的 Python 示例完成从路测采样表到邻区对交叠指标的完整计算。示例数据为教学构造,用于演示计算逻辑与判读方法,不代表真实路测结果。

关键计算与实现

输入表需要包含:采样序号、沿线路测里程(米)、主服务小区、邻区小区、主服务电平、邻区电平。实际工程中邻区电平通常来自路测的邻区测量集,这里按“每个采样点对每个候选邻区一行”组织,便于直接按邻区对聚合。

import pandas as pd
import numpy as np

# 教学示例数据:同一段铁路轨迹上的采样点,含主服务与候选邻区电平
rows = [
    # seq, dist_m, serving, neighbor, rsrp_srv, rsrp_nbr
    (1,   0, "A", "B", -78, -95),
    (2,  50, "A", "B", -80, -90),
    (3, 100, "A", "B", -82, -86),
    (4, 150, "A", "B", -84, -83),
    (5, 200, "A", "B", -85, -81),
    (6, 250, "A", "B", -86, -80),
    (7, 300, "A", "B", -88, -82),
    (8, 350, "A", "B", -90, -85),
    (9, 400, "A", "B", -93, -90),
    (10,450, "A", "B", -96, -94),
]
df = pd.DataFrame(rows, columns=["seq","dist_m","serving","neighbor","rsrp_srv","rsrp_nbr"])

# 参数:交叠判定门限(邻区-主服务 差值范围),切换带等效余量
OVERLAP_LO, OVERLAP_HI = -6.0, 3.0   # dB
HO_MARGIN = 2.0                       # dB,等效迟滞/偏置余量

df["delta"] = df["rsrp_nbr"] - df["rsrp_srv"]

def longest_run(mask, dist):
    """返回满足条件的连续采样段中最长一段的里程长度(米)"""
    best, cur_start, prev = 0.0, None, None
    for m, d in zip(mask, dist):
        if m:
            if cur_start is None:
                cur_start = d
            prev = d
            best = max(best, prev - cur_start)
        else:
            cur_start, prev = None, None
    return best

results = []
for (srv, nbr), g in df.groupby(["serving","neighbor"]):
    g = g.sort_values("dist_m")
    overlap_mask = g["delta"].between(OVERLAP_LO, OVERLAP_HI)
    ho_mask = g["delta"] >= -HO_MARGIN
    overlap_len = longest_run(overlap_mask, g["dist_m"])
    ho_width = longest_run(ho_mask, g["dist_m"])
    total_len = g["dist_m"].max() - g["dist_m"].min()
    results.append({
        "serving": srv, "neighbor": nbr,
        "overlap_len_m": overlap_len,
        "ho_width_m": ho_width,
        "overlap_ratio": round(overlap_len/total_len, 3) if total_len else 0,
        "verdict": ("交叠不足" if overlap_len < 100 else
                    "交叠过大" if overlap_len > 300 else "交叠合理")
    })

print(pd.DataFrame(results).to_string(index=False))

示例数据中,A→B 的差值从 −17 dB 逐步升到 +2 dB,交叠区(−6~+3 dB)覆盖约 250 m 的连续段,切换带(差值 ≥ −2 dB)约 150 m,交叠占比约 0.56,判定为“交叠合理”。若某邻区对交叠长度不足 100 m,说明两小区覆盖重叠过窄,列车高速通过时切换准备时间不足,易出现切换失败或掉线;若交叠长度超过 300 m,则重叠过宽,可能造成频繁切换或乒乓切换。

判定门限(−6/+3 dB、100/300 m)应结合线路设计速度、小区平均站间距和现网切换参数标定,本例数值仅用于演示计算流程。实际使用时建议先用历史切换成功率对门限做一次校准。

交叠识别结果的可视化判读

下图把 A→B 邻区对的电平差沿里程的变化、交叠区与切换带的区间位置,以及三类判定结果并列呈现,便于直接看出“交叠不足/合理/过大”在轨迹上的差别。

A→B 邻区对:电平差沿里程变化与交叠/切换带区间 里程 (m) Δ = 邻区 − 主服务 (dB) 0 100 200 300 400 450 +3 0 −6 −12 交叠判定带 −6 ~ +3 dB 切换带阈值 −2 dB 交叠长度 ≈ 250 m 切换带宽度 ≈ 150 m 交叠不足 交叠长度 < 100 m 切换准备时间不足 交叠合理 100 m ≤ 交叠 ≤ 300 m 本例 A→B 落在此区间 交叠过大 交叠长度 > 300 m 易乒乓切换 判读:交叠区看“可用重叠”,切换带看“可触发切换的空间”;两者共同决定邻区参数调整方向。 注:门限与判定阈值需按线路速度、站间距和现网切换参数标定,图中数值为教学示例。

结果判读与参数调整方向

得到邻区对级指标后,按以下逻辑把量化结果映射到参数动作,而不是直接凭经验调参:

交叠识别结果典型成因参数调整方向验证指标
交叠不足(<100 m)站间距过大、天线方位/下倾不合理、邻区漏配优先核查邻区关系完整性;必要时降低切换门限或减小迟滞,使切换更早触发切换成功率、切换失败次数、掉线率
交叠合理(100~300 m)覆盖与切换参数匹配保持现有门限/迟滞,仅做微调验证切换成功率稳定、无乒乓
交叠过大(>300 m)两小区覆盖过重叠、切换门限过低提高切换门限或增大迟滞,收窄有效切换带;核查是否存在越区覆盖乒乓切换次数、切换总次数

需要强调的是,交叠长度只是“空间可用性”的度量,最终是否调整还要结合切换成功率与切换时延。建议对每个判定为“不足”或“过大”的邻区对,先取一段连续路测做前后对比:调整前记录交叠长度与切换成功率,调整后复测同一区段,确认交叠长度向合理区间移动且切换成功率不下降,才算完成闭环。

不要仅凭单次路测的个别采样点判定交叠不足。铁路场景存在隧道、桥梁、弯道等局部遮挡,应使用多次往返路测的聚合结果(如取中位数或按里程分箱统计),避免把瞬时衰落误判为覆盖交叠问题。