2. 基于故障录波的过流波形特征提取与初步判读
录波数据的三条证据链
故障录波是过流事件发生瞬间唯一能还原“电—磁—控制”同步过程的原始证据。判读时不要只盯住某一相电流的峰值,而要把三相输出电流、直流母线电流和门极驱动信号放在同一时间轴上对齐,看它们是否在同一时刻、以同一因果顺序发生变化。真实过流与传感器干扰的差别,恰恰体现在这三条证据链是否“自洽”。
下面这张图给出本节的核心判读框架:以触发时刻 t₀ 为基准,把录波窗口划分为触发前、触发瞬间和封锁后三段,并标出真实过流与传感器干扰在三条通道上的典型差异。
录波文件的关键通道与提取要点
城轨牵引逆变器录波通常以固定采样率(常见 5~20 kHz)记录多路模拟量与数字量。判读前先确认三件事:采样率是否足以捕捉过流上升沿(至少每周期 20 点以上)、各通道是否同一时基、门极信号是原始 PWM 还是经过状态压缩的开关量。若门极通道只有“封锁/未封锁”两态,则重点看封锁时刻与电流峰值时刻的先后关系。
| 通道 | 提取特征 | 真实过流表现 | 传感器干扰表现 |
|---|---|---|---|
| 三相输出电流 | 峰值、上升沿斜率、三相一致性 | 三相同步陡升,峰值超阈值 | 单相窄毛刺,其余相平稳 |
| 直流母线电流 | 与输出电流的相位/幅值对应 | 同步抬升,能量守恒可验证 | 无明显对应变化 |
| 门极驱动 | 封锁时刻、PWM 是否消失 | t₀ 后立即封锁 | 可能未封锁或短暂封锁后恢复 |
| 母线电压 | 过流瞬间是否跌落 | 大电流导致电压暂降 | 基本无跌落 |
用 Python 做特征提取与初步判读
下面给出一个可直接运行的脚本,读取录波 CSV(列名:t, iu, iv, iw, idc, gate, udc),自动定位触发点、计算三相峰值与一致性、母线电流相关性,并输出初步判读结论。示例数据由脚本内置生成,便于先跑通流程再替换为真实录波。
import numpy as np
import pandas as pd
# ---------- 1. 构造示例录波(真实使用时替换为 pd.read_csv("rec.csv")) ----------
fs = 10000 # 采样率 10 kHz
t = np.arange(0, 0.2, 1/fs)
t0 = 0.10 # 触发时刻
f = 50.0
def make_case(kind):
iu = 200*np.sin(2*np.pi*f*t)
iv = 200*np.sin(2*np.pi*f*t - 2*np.pi/3)
iw = 200*np.sin(2*np.pi*f*t + 2*np.pi/3)
idc = 0.05*(iu + iv + iw) + 5
gate = (np.sin(2*np.pi*500*t) > 0).astype(float)
udc = np.full_like(t, 1500.0)
if kind == "real":
mask = t >= t0
iu[mask] += 900*np.exp(-(t[mask]-t0)/0.004)
iv[mask] += 900*np.exp(-(t[mask]-t0)/0.004)
iw[mask] += 900*np.exp(-(t[mask]-t0)/0.004)
idc[mask] += 120*np.exp(-(t[mask]-t0)/0.004)
gate[mask] = 0.0
udc[mask] -= 80*np.exp(-(t[mask]-t0)/0.006)
else: # sensor glitch
idx = np.argmin(np.abs(t - t0))
iu[idx:idx+3] += 1200
return pd.DataFrame({"t": t, "iu": iu, "iv": iv, "iw": iw,
"idc": idc, "gate": gate, "udc": udc})
# ---------- 2. 特征提取 ----------
def extract(df, thr=600.0):
pre = df[df.t < t0]
post = df[df.t >= t0]
res = {}
for ph in ["iu", "iv", "iw"]:
res[f"{ph}_peak"] = float(post[ph].abs().max())
res["three_phase_peak"] = max(res["iu_peak"], res["iv_peak"], res["iw_peak"])
res["phase_spread"] = res["three_phase_peak"] - min(res["iu_peak"], res["iv_peak"], res["iw_peak"])
# 母线电流与三相电流之和的相关性(真实过流应强相关)
isum = post["iu"] + post["iv"] + post["iw"]
res["idc_corr"] = float(np.corrcoef(isum, post["idc"])[0, 1])
# 门极封锁:t0 后是否持续为 0
res["gate_blocked"] = bool((post["gate"] < 0.5).all())
# 母线电压跌落
res["udc_drop"] = float(pre["udc"].mean() - post["udc"].min())
res["over_thr"] = res["three_phase_peak"] > thr
return res
# ---------- 3. 判读规则 ----------
def judge(r):
if not r["over_thr"]:
return "未超过阈值,非过流事件"
if r["phase_spread"] > 400 and r["idc_corr"] < 0.3:
return "疑似传感器干扰误触发:单相异常、母线无对应"
if r["gate_blocked"] and r["idc_corr"] > 0.7 and r["udc_drop"] > 30:
return "真实过流:三通道自洽,保护正确动作"
return "证据不足,需补充零漂/增益校验"
for kind in ["real", "glitch"]:
df = make_case(kind)
r = extract(df)
print(f"--- {kind} ---")
for k, v in r.items():
print(f" {k}: {v}")
print(" 结论:", judge(r))
运行后可以看到:real 案例三相峰值接近、idc_corr 高、gate_blocked 为真、udc_drop 明显;glitch 案例仅 iu_peak 异常、phase_spread 大、idc_corr 低。判读规则据此给出不同结论。实际使用时把 make_case 替换为读取真实录波即可,阈值 thr 按该车型过流保护定值填写。
判读时先看“三相是否同步”,再看“母线是否跟随”,最后看“门极是否封锁”。三者自洽才可判为真实过流;任一环节缺失,都应先怀疑传感器或录波通道本身,再下结论。
录波通道的采样率、量程和时基必须与保护装置一致。若门极信号为压缩开关量,不能据此判断 PWM 占空比,只能判断封锁时刻。示例中的数值均为教学假设,不代表任何实际车型的实测结果。