4. 等间距重采样与采样率统一
为什么必须先统一空间采样间隔
轨道不平顺检测车在通过曲线、道岔或低速区段时,采样触发往往由里程轮脉冲或GPS触发,导致原始序列的空间间隔并不恒定;不同检测设备、不同检测遍次之间也可能采用不同的空间采样率。PSD估计要求输入序列是等空间间隔的,否则频率轴会失真、幅值归一化失效,高频段尤其容易出现虚假能量或能量丢失。本案例的任务是:把非等间距/变采样率序列重采样到统一的空间间隔 Δx,并定量评估插值方法对幅值谱高频段的影响。
重采样流程与关键判据
核心思路是:先由原始里程坐标与不平顺幅值构造“里程—幅值”离散点对,再在目标等间距里程网格上做插值。目标间隔 Δx 的选择需同时满足两个条件:其一,Δx 不大于原始数据中最小的有效空间间隔(避免上采样引入虚假高频);其二,目标空间采样率 1/Δx 对应的 Nyquist 空间频率要覆盖分析关心的最高空间频率。轨道高低不平顺PSD分析通常关心 0.01~0.5 1/m 甚至更高,若关心到 0.5 1/m,则 Δx 应不大于 1 m(Nyquist=0.5 1/m),工程上常取 0.25 m 或 0.5 m。
实现:构造里程—幅值点对并重采样
下面给出一个可直接运行的 Python 实现。输入为原始里程数组 x_raw(单位 m,非等间距)与对应高低不平顺幅值 y_raw(单位 mm)。目标间隔取 dx_target = 0.25 m。代码同时计算三种插值结果,并用 FFT 幅值谱对比高频段(0.2~0.4 1/m)的能量差异,作为插值方法选择的定量依据。
import numpy as np
from scipy.interpolate import interp1d, CubicSpline
# ---- 1. 构造示例:非等间距原始序列(模拟里程轮触发不均)----
rng = np.random.default_rng(42)
x_raw = np.cumsum(rng.uniform(0.15, 0.60, size=400)) # 间隔 0.15~0.60 m 不等
x_raw = x_raw - x_raw[0]
# 合成含多频成分的高低不平顺(单位 mm)
y_raw = (1.2*np.sin(2*np.pi*0.05*x_raw)
+ 0.6*np.sin(2*np.pi*0.20*x_raw)
+ 0.25*np.sin(2*np.pi*0.35*x_raw)
+ 0.08*rng.normal(size=x_raw.size))
# ---- 2. 目标等间距网格 ----
dx_target = 0.25
x_uni = np.arange(x_raw[0], x_raw[-1], dx_target)
# ---- 3. 三种插值 ----
f_lin = interp1d(x_raw, y_raw, kind='linear')
f_near = interp1d(x_raw, y_raw, kind='nearest')
f_spl = CubicSpline(x_raw, y_raw)
y_lin = f_lin(x_uni)
y_near = f_near(x_uni)
y_spl = f_spl(x_uni)
# ---- 4. 幅值谱对比(去均值后 FFT)----
def amp_spectrum(y, dx):
y = y - y.mean()
n = y.size
Y = np.fft.rfft(y)
f = np.fft.rfftfreq(n, d=dx) # 空间频率 1/m
return f, np.abs(Y) * 2.0 / n
f, A_lin = amp_spectrum(y_lin, dx_target)
_, A_near = amp_spectrum(y_near, dx_target)
_, A_spl = amp_spectrum(y_spl, dx_target)
# ---- 5. 高频段能量占比(0.2~0.4 1/m)----
band = (f >= 0.2) & (f <= 0.4)
for name, A in [('线性', A_lin), ('最近邻', A_near), ('三次样条', A_spl)]:
ratio = A[band].sum() / A.sum()
print(f'{name:6s} 高频段能量占比 = {ratio:.3f}')
print('等间距序列长度:', x_uni.size, ' 间隔:', dx_target, 'm')
print('Nyquist 空间频率:', 0.5/dx_target, '1/m')
结果判读与选择依据
运行上述代码后,可观察到以下规律(示例数据下的预期现象,非实测):线性插值在高频段能量占比通常最低,因为线性插值相当于低通平滑,会系统性压低 0.2 1/m 以上的幅值;最近邻插值保留原始幅值但引入阶梯状不连续,高频段能量偏高且谱形毛刺明显;三次样条在低频与中频段最接近参考谱,高频段可能因过冲略高于真实值。因此,若后续 PSD 分析关心到 0.3 1/m 以上,建议优先采用三次样条,并在报告中注明插值方法;若只关心 0.1 1/m 以下的长波成分,线性插值即可满足且更稳健。
重采样质量检查清单
| 检查项 | 判据 | 不通过时的处理 |
|---|---|---|
| 里程单调性 | diff(x_raw) > 0 全部成立 | 剔除重复点或分段重采样 |
| 目标间隔与 Nyquist | 1/(2Δx) ≥ 关心的最高空间频率 | 减小 Δx 或降低分析频带上限 |
| 幅值量级保持 | 重采样前后 RMS 偏差 < 5% | 检查插值方法或原始数据异常 |
| 高频段能量合理性 | 高频段能量占比不出现异常尖峰 | 改用三次样条或检查原始采样率 |
| 序列长度 | 满足后续 FFT/Welch 分段要求 | 调整 Δx 或截取有效区段 |
完成上述检查后,输出的 x_uni 与 y_spl(或所选方法的结果)即为满足 PSD 计算要求的等间距序列,可直接进入后续谱估计环节。