4. 轨距不平顺单项指标计算与超限初判
轨距偏差的两种统计口径
轨距不平顺的单项判别不能只看“最大偏差”,工程上通常同时使用峰值与区段均值两个口径:峰值反映最不利点,区段均值反映一段里程内的整体偏离趋势。两者结合,才能区分“孤立尖峰”与“连续偏移”两类不同性质的轨道状态。
设对齐后轨距数据为 g(i)(单位 mm),标准轨距为 g0 = 1435 mm,则轨距偏差定义为:
d(i) = g(i) - g0 # 正值为轨距扩大,负值为轨距缩小
peak = max(|d(i)|) # 区段峰值偏差
mean = (1/N) * Σ d(i) # 区段均值偏差(带符号,反映偏移方向)
注意均值必须带符号计算,否则“整体扩大 3 mm”与“整体缩小 3 mm”会被混为一谈。若需要无方向性的整体偏离程度,可另算 mean_abs = (1/N) * Σ |d(i)|,但它不能替代带符号均值用于方向判断。
管理值与超限判定
按给定管理值 L_peak(峰值限值)与 L_mean(区段均值限值)分别判定,任一超限即该区段判为轨距单项超限:
| 判定项 | 计算式 | 超限条件 | 典型含义 |
|---|---|---|---|
| 峰值超限 | peak = max|d(i)| | peak > L_peak | 存在局部最不利点 |
| 均值超限 | mean = Σd(i)/N | |mean| > L_mean | 整段存在方向性偏移 |
示例参数(教学假设值,非实测):L_peak = 6 mm,L_mean = 3 mm,区段长度取 200 m,采样间隔 0.25 m,即每区段约 800 个采样点。
逐区段计算与初判实现
下面给出可直接运行的 Python 实现。输入为已对齐的轨距序列(等间隔 0.25 m),按 200 m 区段切分,逐段计算峰值与带符号均值,输出超限清单与统计结果。示例数据为教学构造,用于验证计算逻辑,不代表任何真实线路。
import numpy as np
G0 = 1435.0 # 标准轨距 mm
L_PEAK = 6.0 # 峰值管理值 mm
L_MEAN = 3.0 # 区段均值管理值 mm
STEP = 0.25 # 采样间隔 m
SEG_LEN = 200.0 # 区段长度 m
SEG_N = int(SEG_LEN / STEP) # 每区段采样点数 = 800
def calc_segment(gauge):
"""gauge: 一段对齐后的轨距数组(mm),返回该段指标"""
d = gauge - G0
peak = float(np.max(np.abs(d)))
mean = float(np.mean(d)) # 带符号
peak_over = peak > L_PEAK
mean_over = abs(mean) > L_MEAN
if peak_over and mean_over:
kind = "双超"
elif peak_over:
kind = "峰值超限"
elif mean_over:
kind = "均值超限"
else:
kind = "正常"
return peak, mean, kind
def scan_line(gauge, start_km=0.0):
"""按区段扫描整条线路,返回超限清单与统计"""
rows = []
n_seg = len(gauge) // SEG_N
for k in range(n_seg):
seg = gauge[k*SEG_N:(k+1)*SEG_N]
peak, mean, kind = calc_segment(seg)
km0 = start_km + k * SEG_LEN / 1000.0
km1 = km0 + SEG_LEN / 1000.0
rows.append((km0, km1, peak, mean, kind))
over = [r for r in rows if r[4] != "正常"]
total_km = n_seg * SEG_LEN / 1000.0
over_km = len(over) * SEG_LEN / 1000.0
return rows, over, total_km, over_km
# ---- 教学示例:构造 3 个区段 ----
rng = np.random.default_rng(7)
seg_a = G0 + rng.normal(0, 1.2, SEG_N) # 正常段
seg_b = G0 + rng.normal(0, 1.2, SEG_N)
seg_b[400] += 7.5 # 注入孤立尖峰
seg_c = G0 + 3.8 + rng.normal(0, 1.0, SEG_N) # 整体扩大偏移
gauge = np.concatenate([seg_a, seg_b, seg_c])
rows, over, total_km, over_km = scan_line(gauge, start_km=12.0)
for km0, km1, peak, mean, kind in rows:
print(f"K{km0:.3f}-K{km1:.3f} peak={peak:.2f} mean={mean:+.2f} {kind}")
print(f"超限区段 {len(over)} 段,超限里程 {over_km:.3f} km / 总里程 {total_km:.3f} km")
预期输出(由上述构造数据直接推出,非实测):
K12.000-K12.200 peak=4.31 mean=+0.05 正常
K12.200-K12.400 peak=7.62 mean=+0.02 峰值超限
K12.400-K12.600 peak=6.05 mean=+3.79 双超
超限区段 2 段,超限里程 0.400 km / 总里程 0.600 km
结果判读要点
- 峰值超限但均值正常:多为孤立尖峰或短波缺陷,应结合波形定位具体里程点,排查接头、绝缘节、道岔区等局部位置。
- 均值超限但峰值未超:整段存在方向性偏移(如持续扩大),属于趋势性问题,需关注轨枕扣件状态与轨距挡板配置。
- 双超:局部与整体同时偏离,优先级最高,应优先安排复核与整治。
- 均值符号必须保留:
mean = +3.79 mm表示整体扩大,若为负值则表示整体缩小,两者整治方向相反。
区段长度与采样间隔必须与对齐结果一致。若对齐后间隔不是 0.25 m,需按实际间隔重算
SEG_N,否则区段边界会错位,导致均值口径失真。峰值与均值的管理值口径不同,不可混用同一限值。若管理值以“轨距偏差绝对值”给出,则均值判定应使用
|mean|;若管理值区分扩大/缩小方向,则需分别与正负限值比较。