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,则重叠过宽,可能造成频繁切换或乒乓切换。
交叠识别结果的可视化判读
下图把 A→B 邻区对的电平差沿里程的变化、交叠区与切换带的区间位置,以及三类判定结果并列呈现,便于直接看出“交叠不足/合理/过大”在轨迹上的差别。
结果判读与参数调整方向
得到邻区对级指标后,按以下逻辑把量化结果映射到参数动作,而不是直接凭经验调参:
| 交叠识别结果 | 典型成因 | 参数调整方向 | 验证指标 |
|---|---|---|---|
| 交叠不足(<100 m) | 站间距过大、天线方位/下倾不合理、邻区漏配 | 优先核查邻区关系完整性;必要时降低切换门限或减小迟滞,使切换更早触发 | 切换成功率、切换失败次数、掉线率 |
| 交叠合理(100~300 m) | 覆盖与切换参数匹配 | 保持现有门限/迟滞,仅做微调验证 | 切换成功率稳定、无乒乓 |
| 交叠过大(>300 m) | 两小区覆盖过重叠、切换门限过低 | 提高切换门限或增大迟滞,收窄有效切换带;核查是否存在越区覆盖 | 乒乓切换次数、切换总次数 |
需要强调的是,交叠长度只是“空间可用性”的度量,最终是否调整还要结合切换成功率与切换时延。建议对每个判定为“不足”或“过大”的邻区对,先取一段连续路测做前后对比:调整前记录交叠长度与切换成功率,调整后复测同一区段,确认交叠长度向合理区间移动且切换成功率不下降,才算完成闭环。