树线放电这四个字,在配网运维和继电保护圈子里一出现,基本就意味着“难啃”。树枝搭上导线之后并不是稳定的金属性接地,而是先形成间隙击穿、再发展成间歇性电弧燃烧,过渡电阻可以从几十欧跳到几千欧,故障电流有时候还没有正常负荷电流大。很多线路就是在这种状态下带病运行几个小时,最后树枝碳化引发明火,故障才被真正重视起来。
这篇文章想做一件事:把树线放电故障从“看见了认不出”变成“抓得住、分得清、能动作”。我会用一套完整的保护与识别方案来讲这个事,先拆解树线放电的物理过程和电气特征,再说清楚为什么传统零序保护在这里集体失灵;然后给出基于暂态零序电流和小波变换的识别算法,包括四个特征量的定义、判据组合逻辑和出口策略;最后放上可以直接跑的Python代码,以及我在现场调参数、回放录波数据时踩过的坑。适合配网自动化、继电保护整定、故障诊断方向的人参考,刚入门的研究生也能跟着复现。
1. 树线放电故障的核心难题:高阻、电弧与保护失灵
1.1 树线放电的物理过程:从间隙击穿到碳化通道
树枝和导线之间多数情况下并不是直接接触,而是树枝在风力作用下摆动,离导线越来越近。当空气间隙小到一定程度,间隙上的电场强度超过空气击穿场强,就会发生击穿放电。放电初期只是微弱的电弧,电流小、持续时间短,因为树枝内部的水分和木质本身的电阻会限制电流。但事情坏就坏在“反复”这两个字上。
放电过程会把树枝表面的水分蒸发掉,木质逐渐碳化,形成半导电的碳化通道。碳化通道有一个很讨厌的特性——电阻随温度变化呈负温度特性,温度越高电阻越低。于是故障电流会越烧越大,电弧的熄灭和重燃交替出现。更麻烦的是,碳化是不可逆的,通道会越烧越畅通,最终可能直接引燃树枝,起明火。
从保护的角度看,这个过程对应的故障电阻不是固定值,而是从高到低、再突变、再恢复,零序电流波形根本不是稳定的工频正弦,而是一堆毛刺加时断时续的小扰动。不懂这个物理过程的人,拿到录波波形第一反应是“这是不是采集单元坏了”,其实这就是树线放电最典型的特征。
1.2 电气量特征:工频量在这里为什么靠不住
树线放电作为高阻接地故障的一种,电气量特征和金属性接地完全不同。我给实际录波做过统计,突出的特征大概有这几条:
- 过渡电阻高:初期可以达到数百欧到数千欧,故障点电流只有几安到几十安,比正常负荷电流还小。
- 电弧非线性:电弧电阻随电流瞬时值变化,电流过零附近电阻骤增,波形出现明显的削顶、畸变,伴随多次熄灭和重燃。
- 零序电流幅值小:相比金属性接地,零序电流幅值大幅减小,而且受中性点接地方式的影响非常明显。
- 持续时间长:树枝不会自己掉下来,故障可以持续几十秒甚至数小时。
- 谐波和暂态分量丰富:电弧重复导通、熄灭,会在很宽的频带里产生丰富的暂态分量,高频段尤其突出。
- 相位关系不稳定:故障相电压和零序电流的相位关系受电弧随机重燃影响,不像金属性接地那样相对固定。
这六条特征放在一起,直接否掉了“用稳态工频量识别”的路线。稳态零序电流太小,整定值和灵敏度根本没法兼顾;相位又不稳定,方向判据经常自相矛盾。只有把眼光放到暂态过程,才有足够的信噪比来捕捉故障信息。
1.3 传统保护方案的困局:零序过流和接地选线为什么失灵
配网线路对付接地故障,最常用的是零序过流保护和接地选线装置。但树线放电面前,这两套方案都有明显短板。
零序过流保护的定值要躲过线路正常运行时三相不平衡产生的零序电流,一般整定在几安到几十安。初期树线放电的故障电流比这个还小,保护根本启动不了。就算勉强启动,电弧间歇性熄灭会导致零序电流时有时无,出口继电器跟着抖动,这种告警调度员根本不敢信。
接地选线的问题更突出。很多选线装置还在用稳态零序电流比较或者零序电流方向比较,在金属性接地场景下好用,但面对树线放电这种非稳态、高阻、弧光重燃的故障,各条线路的稳态量差异被拉平,选线经常误选或者漏选。我见过一条线路树枝放电两个多小时,选线装置换了几轮都没选出来,最后是运维人员一条条拉线试停才找到故障点。
还有一个现实问题:就算保护发了告警,调度看到的也只是笼统的“接地告警”,到底是金属性接地、经电阻接地还是树线放电,完全无法区分。后续处置策略完全不一样,信息太粗就谈不上精准运维。
1.4 整体方案选型:暂态量融合工频量,用小波做特征翻译
既然稳态工频量靠不住,那思路就得转。我最终确定的方案是:基于暂态零序电流做特征提取,用小波变换处理非平稳信号,再融合少量的工频零序电压信息做复核。
为什么是小波而不是傅里叶?电弧放电产生的信号非平稳特征非常强,故障发生时刻、熄灭重燃时刻都是突变点,傅里叶变换只能告诉你信号里有哪些频率成分,说不清楚这些成分是什么时候出现的。小波变换相当于把信号同时按时间和频率展开,既能定位突变时刻,又能区分频带。对树线放电这种“时刻在变”的故障信号,小波是更合适的工具。
单一特征量容易误动,所以我设计了四个特征量来组合:高频细节能量占比、暂态峰值系数、小波模极大值、工频零序电压变化率。前三个抓暂态和高频特征,最后一个卡“确实发生了接地”这个前提。四者共同满足才确认树线放电,只满足部分则报疑似,给运维人员留出判断空间。
2. 识别算法设计:暂态特征如何变成可用判据
2.1 处理流程与数据窗选择
整个识别流程分七步:采集三相电流、计算零序电流、数据加窗、小波分解、特征计算、阈值判别、结果输出。每一步都有值得抠的细节。
先看数据窗。工频是50Hz,一个周波20ms。树线放电的暂态过程在故障发生后1到3个周波内最丰富,电弧重燃点也集中在故障持续期间。数据窗取太长,零序电流的暂态统计量会被平均掉,反而不容易分辨;取太短,特征值抖动太厉害。我实测下来,10ms到40ms的窗长比较合适,默认取40ms,刚好两个完整工频周期。采样率建议10kHz以上,这样才能把电弧高频暂态成分采进来。注意采样前必须有硬件抗混叠滤波器,不然高频分量折返到低频段,后面的小波分析全会被污染。
零序电流的计算很简单,由三相电流采样值相加除以三得到。工程上也有直接用零序电流互感器采集的,效果一样。关键是计算前要去掉直流分量和趋势项,否则小波分解后的近似系数会被直流分量抬高,特征值失真。
2.2 小波变换为什么适合干这个活
傅里叶变换是把整个时间段的信号投影到无限长的正弦基上,得到的是全局频谱。对稳态信号没问题,但对电弧这种非平稳信号,不同时刻发生的暂态会被混在同一个频谱里,特征完全展不开。小波变换不一样,它用有限长的、可伸缩平移的小波基去匹配信号的局部特征,时频窗口可以自适应变化。低频部分频率分辨率高、时间分辨率低,高频部分时间分辨率高、频率分辨率低,刚好适合捕捉电弧重燃这种“突然发生、持续很短、频带很宽”的突变。
在工程实现里,小波基的选择直接影响特征质量。电力系统暂态分析常用db4小波,消失矩适中、紧支撑性好,既能突出信号的奇异点,计算量又可控。分解层数一般取4到6层,太高了计算量上来,收益有限;太低了高频细节分不开。采样率10kHz时,分解5层能把几十赫兹到几千赫兹的成分分到不同尺度,足够覆盖电弧暂态的主要频带。
2.3 四个核心特征量的定义与计算逻辑
这四个特征量是整套判据的核心,单独拿出来都不够用,组合起来才能压住误报。
第一个特征量是高频细节能量占比。把零序电流做小波分解后,细节系数cD1、cD2、cD3对应的高频段能量占比在树线放电时明显高于正常运行状态。电弧反复熄灭重燃,会产生大量高频分量,这个比值能直接把“纯工频”的正常状态和“富含暂态”的异常状态分开。计算方式是对各层细节系数取平方后求和,除以全部小波系数的平方和。
第二个特征量是暂态峰值系数。取零序电流数据窗内的最大值,除以窗内均方根值。电弧性故障波形畸变剧烈、毛刺多,峰值系数会明显高于正常正弦波形。正常工频正弦波的峰值系数是根号2,大概1.414,电弧波形动辄超过3、4,是一个非常直观的指示量。
第三个特征量是小波模极大值。用小波细节系数的模极大值来反映信号的奇异性强度。树线放电期间电弧多次重燃,每次重燃都是信号上的奇异点,模极大值出现的频率和幅值都很高。这个特征对故障瞬间的捕捉非常敏感。
第四个特征量是工频零序电压变化率。这个量用来确认“确实发生了接地”。真实的单相接地故障发生后,零序电压会在1到2个周波内稳定抬高,而线路三相不平衡之类的原因不会持续抬高零序电压。取故障后零序电压有效值相对于故障前的增量,按额定相电压的百分比计算,作为逻辑与门的前提条件。
四个特征量的物理意义、计算方法和判据方向可以总结成一张表,方便对照。
| 特征量 | 物理含义 | 计算方法 | 故障时变化方向 |
|---|---|---|---|
| 高频细节能量占比 | 暂态高频成分在总能量中的占比 | 小波细节系数平方和 / 全部系数平方和 | 明显升高 |
| 暂态峰值系数 | 波形畸变和冲击程度 | 窗内峰值 / 窗内均方根值 | 明显升高 |
| 小波模极大值 | 信号奇异点强度 | 细节系数模极大值 | 增大、出现频繁 |
| 工频零序电压变化率 | 真实接地确认 | 故障后零序电压增量 / 额定相电压 | 持续抬高 |
2.4 保护逻辑与出口策略:告警先行,跳闸可配
判据逻辑不能简单粗暴地搞“四个全满足才动作”,因为现场数据总有不完美的时候。我用的组合逻辑是:工频零序电压变化率必须满足;高频能量占比和暂态峰值系数同时满足,再加上模极大值超过阈值,判定为“确认树线放电”;如果只满足其中两项,判为“疑似树线放电”,只发告警不出口。
出口策略上,告警延时设5秒,跳闸延时默认120秒、可整定。为什么不建议立刻跳闸?单相接地系统允许短时带故障运行,很多瞬时性扰动需要时间自己恢复,延时动作可以防止误跳。更重要的是,树线放电故障如果树枝没掉,跳闸后自动重合闸重合到故障点上,电弧反而可能烧得更大。所以现场投运时我更建议“告警先行,跳闸后跑”,把识别结果当成智能巡检和抢修的辅助决策,而不是一上来就追求跳闸出口。
3. 代码实战:小波特征提取与树线放电判定实现
3.1 仿真与现场录波数据准备
代码验证需要数据,两个来源都用得上。一是仿真数据,用某10kV配电网模型在仿真软件里搭一个带Mayr电弧模型的树线放电故障,通过参数控制电弧时间常数和耗散功率,模拟树枝碳化通道的电弧特性。仿真数据的好处是故障类型、故障时刻、过渡电阻都是已知的,方便验证算法灵敏度。二是现场录波数据,从故障录波器导出COMTRADE格式文件,里面包含了真实线路的三相电流、零序电压波形。现场数据更有说服力,因为噪声、互感器误差、线路结构差异全都真实存在,算法在现场数据上的表现才是最值得信的。
我建议先用仿真数据把算法流程跑通,再用几组现场录波做回放验证。代码里用一个简单的DataFrame结构组织三相电流采样值,列名用ia、ib、ic,方便后续计算。
3.2 代码结构:从零序电流到特征向量
import numpy as np import pywt import pandas as pd def calc_zero_seq_current(df): """ 由三相电流采样值计算零序电流。 df: DataFrame, 至少包含 ia/ib/ic 三列 返回: 零序电流数组 """ ia = df["ia"].values.astype(float) ib = df["ib"].values.astype(float) ic = df["ic"].values.astype(float) i0 = (ia + ib + ic) / 3.0 return i0工程上有时用3I0 = ia + ib + ic,也就是三相电流直接相加不除以3,注意这里的量纲差异。实际装置内部如果用零序电流互感器,输入量直接就是3I0或者I0,要看互感器变比和装置采样定义。代码里统一用除以3后的平均值,特征量计算时做归一化处理,避免量纲影响阈值。
3.3 小波分解与能量计算详解
def wavelet_decompose(signal, wavelet="db4", level=5): """ 对输入信号进行小波分解。 signal: 一维数组 wavelet: 小波基名称 level: 分解层数 返回: 小波系数列表,顺序为 [cA5, cD5, cD4, cD3, cD2, cD1] """ coeffs = pywt.wavedec(signal, wavelet, level=level) return coeffspywt的wavedec函数返回的系数列表顺序要注意:第一个是近似系数cA5(低频),后面依次是从低到高层的细节系数,最后一个cD1是最高频细节。能量计算时要区分清楚。
采样率10kHz、分解5层时,各尺度对应的频带范围大致如下:
| 分解系数 | 对应频带范围(fs=10kHz) |
|---|---|
| cD1 | 2500 Hz ~ 5000 Hz |
| cD2 | 1250 Hz ~ 2500 Hz |
| cD3 | 625 Hz ~ 1250 Hz |
| cD4 | 312.5 Hz ~ 625 Hz |
| cD5 | 156.25 Hz ~ 312.5 Hz |
| cA5 | 0 Hz ~ 156.25 Hz |
树线放电电弧的暂态能量主要集中在cD1到cD3这些高频段。所以特征量计算时,把cD1、cD2、cD3的平方和作为高频能量,除以全部系数的平方和得到能量占比。
def extract_features(i0, fs=10000.0, win_cycles=2): """ 从零序电流中提取四项特征量。 i0: 零序电流数组 fs: 采样率 win_cycles: 数据窗长度(工频周波数) 返回: 特征向量 [高频能量占比, 暂态峰值系数, 小波模极大值, 零序电压变化率] """ win_len = int(fs * win_cycles / 50.0) window = i0[:win_len] coeffs = pywt.wavedec(window, wavelet="db4", level=5) cA5, cD5, cD4, cD3, cD2, cD1 = coeffs e_high = np.sum(cD1**2) + np.sum(cD2**2) + np.sum(cD3**2) e_total = sum(np.sum(c**2) for c in coeffs) + 1e-12 energy_ratio = e_high / e_total rms = np.sqrt(np.mean(window**2)) + 1e-12 peak_ratio = np.max(np.abs(window)) / rms mod_max = np.max(np.abs(cD1)) # 零序电压变化率由外部输入,对应前置判断 delta_u0 = 0.0 return np.array([energy_ratio, peak_ratio, mod_max, delta_u0])这里有一个容易被忽略的细节:小波分解在数据窗边界上会产生边界效应,边缘几个点的系数不可靠。实际处理时要么把数据窗前后各扩展一段,计算完特征再把边缘丢掉,要么直接把窗内数据做延拓后再分解。我一般用对称延拓方式处理,简单有效。
3.4 判据实现与阈值设置
def tree_line_fault_classifier(features, thresholds, mode="semi_and"): """ 树线放电故障判别。 features: 特征向量 thresholds: 阈值数组 [t_ratio, t_peak, t_mod, t_u0] mode: semi_and 表示部分特征组合判断 返回: "tree_line_fault" / "suspect" / "normal" """ t_ratio, t_peak, t_mod, t_u0 = thresholds ratio, peak, mod_max, delta_u0 = features # 工频零序电压变化率必须是前提条件 if delta_u0 < t_u0: return "normal" # 主判据:高频能量占比 + 峰值系数 cond_main = (ratio >= t_ratio) and (peak >= t_peak) # 辅助判据:小波模极大值 cond_aux = mod_max >= t_mod if cond_main and cond_aux: return "tree_line_fault" if cond_main or cond_aux: return "suspect" return "normal"阈值不能凭空拍脑袋,这是整套方案里最需要现场数据支撑的环节。我用过的整定方法是:拿被保护线路正常运行两周的录波数据,计算所有特征量的分布,取“均值 + 3倍标准差”作为基础阈值;再拿各种故障样本回放,人工调整阈值,保证故障样本能判出来、正常样本不误动。实际算例中,高频能量占比阈值定在0.15左右,峰值系数阈值定在3.0到5.0之间,模极大值阈值按录波数据归一化后取0.2左右,零序电压变化率阈值取额定相电压的5%。这些数值只对特定线路有效,换一条线路必须重新标定。
3.5 参数调优的实操建议
参数之间是互相牵制的,不是单独调哪一个就行。采样率定了小波分解的频带范围,分解层数定了特征聚焦的频带范围,数据窗长定了时域统计的稳定性。我试过把采样率从10kHz降到5kHz,结果cD1对应的频带直接缺了2500Hz以上的成分,电弧高频特征明显变弱;把数据窗从20ms拉长到80ms,暂态峰值系数反而被平均掉,灵敏度下降。组合起来看,10kHz采样率、db4小波、6层分解、40ms窗长,在大多数配网场景下是比较稳的起点配置。
还有一个经验:阈值最好用相对量而不是绝对量。高频能量占比本身就是比值,跨线路差异小一些;模极大值如果直接用原始幅值,不同线路的电流互感器变比不同、负荷水平不同,特征值尺度差几倍很正常。所以实际应用时,我会先把模极大值除以窗内最大幅值做归一化,再定阈值。
4. 现场问题排查:误动、拒动与参数调整实录
4.1 健全线路频繁告警:零序“串扰”怎么规避
回放现场录波数据时遇到一个典型问题:一条线路发生树线放电,相邻两三条健全线路也频繁出告警。查下来原因很简单,零序电流通过线路间的电磁耦合串过去了。共杆架设、平行线路,或者电缆和架空混合线路,健全线路上感应出的零序电流同样包含高频暂态分量,特征值也跟着超标。
这种场景下,单靠本线路的特征量不足以区分故障线路和健全线路。处理办法是增加方向信息。母线零序电压和故障线路零序电流的方向关系是确定的,健全线路因为感应电流方向和故障线路相反,加方向判据之后就能直接滤掉。工程上更简单一点的做法是:当一条线路判定为疑似时,把同母线其他线路的特征值拉出来比较,取特征值最大、最稳定的那条作为故障线路。我用这个方法回放过几组多线路联动告警的录波,效果比单线路独立判断好得多。
4.2 消弧线圈补偿系统里的频带调整
中性点经消弧线圈接地的系统,树线放电识别要更小心。消弧线圈会把接地点的容性电流补偿掉,故障点的残流变得很小,稳态零序电流几乎没有参考价值。但这不代表算法完全失效。
关键是理解消弧线圈在高频下的表现。消弧线圈的电感量是按工频设计的,在几百赫兹以上的频段感抗变得非常大,相当于开路。也就是说,高频暂态分量基本不受消弧线圈影响,能量照样可以从细节系数里提取出来。所以这套算法用在消弧线圈接地系统里,反而更要依赖高频能量特征和暂态峰值系数,不要指望稳态量。
实际处理时我调整过分解层数和频带范围。消弧线圈系统里的暂态自由分量频率受补偿度影响,可能比不接地系统偏低一些,把分析重点从cD1往cD2、cD3挪一挪,特征更稳定。具体挪到哪一层,拿本系统实际录波看一下频谱分布再定。
4.3 其他高阻接地故障的误判与区分策略
树线放电不是唯一会产生高频暂态和波形畸变的高阻接地故障。断线落地、绝缘子闪络、电缆单相接地,波形上都有相似的地方。用这套特征量去识别,有可能会误判。
区分的关键在“持续性和间歇性”。树线放电的电弧是反复熄灭重燃的,波形里有明显的“熄灭-重燃”间歇过程,模极大值出现的频次高、持续时间长。绝缘子闪络往往是一次性击穿,暂态集中在初始周波,后续电流可能稳定下来;断线落地如果形成金属性接地,后续就变成了稳定的工频短路过程,没有持续的间歇电弧。
所以我在判据里加了时间维度:数据窗内模极大值出现的次数超过一定数量才认为是树线放电,单次冲击基本可以排除。这个判据加上工频零序电压变化率,能挡住大部分一次性暂态干扰。
4.4 调试中踩过的坑与避坑清单
- 采样率不够:采样率低于5kHz时,高频电弧特征混叠到低频段,特征量全面失真,警觉信号是回放故障录波时识别率突然大幅下降。
- 数据窗太短:窗长小于10ms时,特征值抖动明显,同一线路正常运行时也能触发告警。数据窗建议至少覆盖两个工频周期。
- 忘记归一化:模极大值不归一化,直接套用其他线路的阈值,结果就是换一条线路就误动。定阈值前先确认特征量量纲是可比的。
- 小波边界效应:直接拿窗口边缘的小波系数算能量,边界伪特征会干扰判断,处理方式是延拓或丢弃边缘系数。
- 阈值没做现场标定:仿真数据调好的阈值直接用在现场,十有八九要重调。现场录波和仿真波形的噪声底、互感器传变特性都不一样,必须用本线路的数据重新整定。
- 零序电压变化率没有作为前置条件:只盯着高频特征,不平衡负荷产生的谐波扰动也容易触发误报。加上工频零序电压变化率做前提,误报能压掉一大半。
我个人在实际操作里的体会是:树线放电识别没有一劳永逸的定值,特征融合比单个花哨算法管用。单靠高频能量占比,误动率压不住;把高频能量、峰值系数、模极大值、零序电压变化率组合起来,再用方向判据和持续时间做辅助,整套方案在现场录波上的表现才真正可用。参数必须用本线路数据标定,仿真只能验证方向。另一个建议是投运节奏保守一点:先离线回放录波数据,再在线运行只发告警,观察一两个完整周期、把误报降下来之后,再开放跳闸出口。这套代码的价值在于把故障特征从“看不见摸不着”变成“可以计算可以比较”的数值,后面的工程化细化还得结合装置平台一点点磨。