ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

基于MATLAB Simulink的输电线路行波故障检测仿真实践

基于MATLAB Simulink的输电线路行波故障检测仿真实践 干输电线路故障定位这行的同仁应该都有体会工频量测距算法在单端场景下经常被过渡电阻、系统阻抗、负荷电流这几样东西折腾得够呛。这几年行波故障检测又火起来了它利用的是故障瞬间产生的暂态行波传播速度接近光速理论上不受过渡电阻和双侧系统阻抗影响定位精度直接拉到几百米甚至几十米以内。不过原理听着简单真要在仿真环境里把整套流程跑通坑并不少。这篇文章我想跟你聊的就是我基于 MATLAB Simulink 做行波故障检测仿真的一整套实操经验从行波到底怎么在模型里产生、传播到线路、故障模块、求解器怎么配置再到小波变换怎么提取波头、双端测距怎么算距离最后是一些实际踩过的坑和默认参数。适合刚接触行波仿真、或者想用 Simulink 搭建中压/高压线路故障定位实验台的同行参考。1. 行波故障检测的基本原理为什么它比工频量快得多1.1 故障行波的产生与传播机制输电线路在正常运行时各点的电压电流基本是正弦稳态。故障那一刻就不同了——可以等价于在故障点叠加了一个阶跃电压源这个阶跃会同时向线路两端注入电压行波和电流行波。行波沿着输电线路传播遇到波阻抗不连续的地方母线、故障点、T接点就会反射和透射。关键是这个波的传播速度极快架空线上大概在 2.9e8 m/s 量级接近光速。所以故障后几十到几百微秒内线路两端就能感受到最初的波头。传统工频量测距算法依赖稳态基波分量过渡电阻大时故障电流小、测量阻抗偏差大行波测距不一样它测的是暂态行波到达的时刻差跟波头幅值本身关系不大而波头是否出现只取决于故障瞬间电压突变量。就算过渡电阻较大故障点也仍然会产生行波只是幅值小一些用足够灵敏的检测方法照样抓得到。这一点正是行波检测近几年重新受重视的原因。1.2 单端测距与双端测距的定位思路行波测距有两大类方案。双端法最简单直接故障发生后初始行波分别沿线路两端传播两端测点记录下初始波头到达时刻 t1 和 t2利用距离、波速和到达时间差的关系就可以算出故障位置d (L v*(t1 - t2)) / 2这个公式里 L 是线路总长v 是线模波速。当故障点距首端更近时t1 t2d 自然落在首端附近。双端法的关键在于两端数据时钟严格同步在 Simulink 仿真里这是天然满足的所以非常适合先用来验证算法流程。单端法不需要通讯通道但思路更绕。它利用的是故障点反射波和母线反射波首端先收到从故障点直接传来的初始波头随后又会收到故障点反射回来的第二个波头两次到达时间差乘以波速再除以二就是故障点到首端的距离。单端法的难点在识别哪个波头是故障点反射波哪个是对端母线反射回来的透射波尤其在多段线路和复杂母线结构下很容易认错。我建议入门先从双端做起把波形、波头、测距流程跑通再回头研究单端反射波识别。2. Simulink中搭建行波仿真模型线路、故障与求解器配置2.1 线路模型选型集中参数还是分布参数这是新手百分百会踩的坑。Simulink 的 Simscape Electrical老版本叫 SimPowerSystems元件库里有两类输电线路模块π 型集中参数线路Three-Phase PI Section Line和分布参数线路Distributed Parameter Line。很多人图省事直接拖 PI Section一跑波形发现行波特征完全不对——因为集中参数模型用 R、L、C 在几个离散点上等效线路它表现不出行波沿线路连续传播的过程波头到达时刻和反射规律都是错的。行波仿真必须使用分布参数线路模型。Simulink 里的 Three-Phase Distributed Parameter Line 采用 Bergeron 行波模型把线路看作均匀无损或带损耗的分布参数波阻抗行波在线路上的延时由线路长度和波速决定。这个模型已经在内部做了相模变换典型是 Karenbauer 变换三相耦合被解耦成线模、零模分量分别求解。如果对精度要求更高还可以用频率依赖模型Frequency Dependent Line它在宽频带里考虑参数随频率变化更贴近实际但仿真耗时明显增加。做原理验证时用 Bergeron 分布参数模型就够了我下面所有经验都基于这个模型。2.2 故障模块与仿真时间窗设置故障注入用 Three-Phase Fault 模块可以在指定时刻把某一相、两相或三相接地/相间短接。做行波分析时故障过渡电阻建议设小一点几欧姆以下让故障点电压突变更陡峭。故障时刻最好选在相电压非过零点附近——这个细节直接影响行波幅值后面我会单独讲。行波仿真不需要跑到几十毫秒。工频 50Hz 一个周波就要 20ms而我们要观察的行波过程在故障后 0.53ms 内就基本结束。仿真总时长可以设为 0.021s故障时刻 0.02s这样故障前后各有一段可观察的时间窗。如果你只关心两端波头那故障后只需 0.5ms总时长甚至可以缩到 0.0205s能省不少计算时间。求解器配置上电力电子和故障短路类模型是典型的刚性系统Simulink 默认的 ode45 往往需要极小步长甚至卡死。建议用 ode23tb 或 ode15s。所有变步长求解器的最大步长都要人为限制否则求解器会自动跳过关键细节。行波波头频率约在几十 kHz 到几 MHz最大步长我习惯限制在 1e-7 秒0.1微秒这样 0.021s 仿真会有二十万个步长算起来还能接受但波头细节不会错过。2.3 采样率与波头分辨率的关系做行波检测采样率不是随便填的。行波波头的上升沿在实际线路上可能只有零点几微秒到几微秒你至少要保证一个波头上有若干个采样点才能准确抓到它的到达时刻。实践下来等效采样率建议不低于 1MHz如果要稳定做到几十米以内的定位误差最好等效采样率到 5MHz10MHz。那 Simulink 连续变步长仿真怎么得到固定采样率的数据我的做法是在 To Workspace 模块里导出全部仿真步数据然后在 MATLAB 里用 interp1 重采样到统一的 10MHz 时间网格。注意不要直接对 Simulink 输出的非均匀时间序列做 findpeaks 或小波分解很多算法函数默认输入是均匀间隔数据非均匀输入会得出错误结果。这是一个很容易被忽略但影响很大的细节。3. 波头到达时刻的提取小波模极大值在Simulink数据上的应用3.1 为什么选小波变换而不是差分阈值行波波头的本质是信号中的奇异点。最简单的检测方式是对采样数据做一阶差分超过某个阈值就认为波头到达。这个方法在无噪声、波头陡峭的理想仿真里能用但一遇到噪声或线路反射波堆叠就会误判因为差分算子对高频噪声特别敏感而且无法区分真正的新行波和线路末端反射叠加出来的毛刺。小波变换的优势在于多分辨率。低频段反映行波整体传播高频细节系数在信号奇异点会出现一个明显的模极大值噪声虽然也有高频分量但它在各个尺度上的模极大值会随着尺度增大而迅速衰减而真实波头的模极大值在不同尺度间有更稳定的传递关系。所以用小波变换检测行波波头灵敏度和抗噪能力都比差分阈值好一个量级。这个结论不是理论推断是我在同样一组 Simulink 波形上对比过差分法和 db4 小波一尺度检测后的实际体会。3.2 用MATLAB实现小波波头检测的完整流程先讲数据准备。Simulink 仿真完成后需要从 Workspace 拿到两端测点的电流或电压数据。分布参数线路输出的是三相电流我通常先用 Karenbauer 变换合成线模分量再送入检测流程。线模分量在架空线上的波速更稳定、受大地回路影响小比直接用某一相电流做定位更可靠。下面是核心代码我按实际项目里能跑的版本整理了一遍% 从仿真数据中分离线模电流 % ia、ib、ic 分别是 A/B/C 相电流数组已按采样时间网格重采样 i_line (ia - ib) / sqrt(3); % 线模分量 Fs 10e6; % 重采样后的等效采样率 t (0:length(i_line)-1) / Fs; % 小波分解到第 3 层母小波选用 db4 [C, L] wavedec(i_line, 3, db4); d1 detcoef(C, L, 1); % 第一层细节系数 % 取模极大值 d1_abs abs(d1); threshold 0.15 * max(d1_abs); [pks, locs] findpeaks(d1_abs, MinPeakHeight, threshold, NPeaks, 3); % 波头到达时刻 arrival_time (locs(1) - 1) / Fs; fprintf(波头到达时刻: %.8f s\n, arrival_time);关键点我展开说。wavedec 做三层分解但我们只用第一层细节系数因为波头的高频分量主要集中在这一层。findpeaks 里 MinPeakHeight 设成最大值的 15%用来滤掉小幅噪声毛刺。locs 返回的是采样点索引减 1 再除以 Fs 就是秒为单位的时间。如果你的数据不是均匀网格务必先 interp1 重采样否则 findpeaks 的峰值位置和实际时间对应关系就会错位。3.3 母小波与分解尺度的选择做行波检测我长期用的是 daubechies 4db4。原因不是它有多玄而是这个波形和行波波头的形状比较接近而且支撑长度短对奇异点的定位精度比更长支撑的小波要好。有的文档推荐 symlets 或 coiflets实测差别不大但 db4 在行波领域的使用案例最多、参数参考值最丰富所以入门先用它跑熟了再换 sym5 之类做灵敏度对比。分解尺度也不宜过高。行波信号在 1MHz~10MHz 以上的能量主要落在第一、第二层细节系数里搞到第五层反而把波头时刻模糊了——每个尺度的小波系数对奇异点都有一定的时间平移和持续宽度尺度越高定位越模糊。我一般只用前两层重点看第一层。还有一个很多论文里不会写的细节db4 的第一层细节系数相对原始信号存在一个固定时移但这个时移在首端和末端是相同的双端测距公式做减法时会自动抵消所以对定位结果没有影响。这也是我推荐先做双端的原因之一可以少处理一个系统偏差。4. 从波形到故障距离一个完整的双端测距算例4.1 仿真场景设置为了把流程讲透我以一个 220kV、100km 双端供电线路为例。故障发生在距首端 30km 的 A 相单相接地过渡电阻 1Ω故障时刻 t0 0.02s。两端母线各接等效电源和变压器用两个 To Workspace 模块分别记录两端 A 相电流。线路模型用 Three-Phase Distributed Parameter Line求解器 ode23tb最大步长 1e-7s仿真总时长 0.021s故障后观察 1ms 就够。很多人做仿真时喜欢把故障时刻放在电压过零点这在研究断路器重合闸时是合理的但行波检测初学者最好避开。原因后面会专门说先记住一点把 fault time 设在故障相电压接近峰值的位置这样故障瞬时的电压突变量最大行波幅值也最大波头最容易识别。4.2 波速标定不要直接拿光速代入门时最容易犯的错是把波速直接取光速 c3e8m/s。实际架空线不是真空线模波速取决于线路单位长度电感 L1 和电容 C1v 1 / sqrt(L1 * C1)对于典型 220kV 架空线路这个值大概在 2.9e8~2.98e8 m/s视具体导线参数略有差异。有的参考书直接用 0.98 倍光速它是一种工程近似但做严格误差分析时应该按线路参数自己算。更可靠的标定方法是在仿真模型里做一个已知位置的故障用同样的检测流程测出两端波头到达时刻反过来反推波速。比如故障设在 30km 处线路总长 L100km首端到达时刻 t10.02010135s末端到达时刻 t20.02023649s那么时间差 Δt t1 - t2 -0.00013514s。由双端公式变形可得v (2*d - L) / (t1 - t2) (60000 - 100000) / (-0.00013514) 2.96e8 m/s这个数值刚好落在典型范围内。用仿真数据反推出来的波速再用于后续未知故障定位能自动抵消模型离散误差和小波定位偏差。我在实际项目中一直是这么做的比直接查表可靠得多。4.3 从波形到定位结果双端测距公式的实际计算沿用上面的仿真场景把小波检测得到的两端波头到达时刻代入双端测距公式d (L v*(t1 - t2)) / 2 (100000 2.96e8*(-0.00013514)) / 2 (100000 - 40001.44) / 2 29999.28 m计算得到故障距离 29999.28m也就是 29.999km与真实故障位置 30km 的误差只有 0.72m。这个误差在仿真理想条件下能达到的水平。当然实际模型里如果有测量噪声、采样率不足、母线结构复杂误差会增大到几十到一百米但即使这样仍然远优于一般工频测距方法。我需要强调一下仿真的误差这么小有一部分原因是波速标定和故障位置用了同一组模型参数属于闭环验证。真正工程现场的不确定性要比仿真大得多但整个流程和公式是一样的。4.4 单端反射波识别的进阶思路等你把双端流程跑通之后我再建议碰单端。单端法的核心是首端在 t1 时刻收到初始波头故障点反射波会在 t1 2*d/v 时刻到达首端。如果能准确检测到第二个波头时刻 t1那么故障距离就是d v * (t1 - t1) / 2这句话写出来很简单难在第二个波头的识别。对端母线反射波到达首端的时刻是 t1 2*(L-d)/v如果故障点接近中点两个时刻可能非常接近模极大值会叠成一个复合波包。我之前在做 50km 中点故障单端测距时就遇到第二波头完全淹没的情况最后只能用波形分解把小波系数分离开来。所以单端定位的调试不建议直接上复杂的算法先用仿真把不同故障距离下的波形全部拉出来观察第二波头的位置规律再选择匹配的识别策略。5. 高频仿真中的常见坑与我的默认参数5.1 刚性仿真卡死或不收敛我一开始用 ode45 跑三相短路故障仿真速度慢到难以忍受还会频繁报出步长太小的错误。换 ode23tb 之后明显改善。如果你的模型依然崩先把故障模块的过渡电阻从极小的 0.001Ω 提升到 1Ω再把分布参数线路的 Line length 单位检查一遍。这个模块默认长度单位是 km但真有人把 100km 填成 100波速直接乱了三个数量级波头时刻完全对不上。还有一点模型里必须放置 Powergui 模块。它是 Specialized Power Systems 的控制核心没有它很多元件库模块无法进入仿真有时报错信息还特别隐晦。在 Powergui 里把 Simulation type 设为 Continuous避免离散求解器自带的固定步长限制。5.2 电压过零附近故障行波幅值太低行波幅值本质上正比于故障瞬间电压突变量。如果故障发生在相电压接近过零的时刻突变电压很小产生的行波很弱小波模极大值可能被淹没在数值噪声里。解决思路有两个一是改用电流行波或零序电流故障过零附近电流突变可能仍然可观二是调整故障时刻到电压幅值较大的位置做原理验证时建议直接把 fault time 设在相电压峰值附近。实际工程中虽然不能选故障时刻但在仿真初期没必要刻意挑战最恶劣场景先把基准流程验证好再说。5.3 线路反射波和透射波的干扰故障点行波到达母线后会因为母线波阻抗不连续往回反射。反射波在几十微秒后就会出现在同侧采集数据里如果检测算法不加以区分容易把反射波误认为新的故障行波。用双端定位时这个现象影响相对小因为双端只认第一个波头但单端定位就要小心了。我的建议是在观察波形时把仿真时长拉长到故障后 1~2ms能清楚看到一整个过程确认哪些波头来自故障点、哪些来自对端母线。第一次跑仿真不要急着只看定位结果先把行波传播过程看明白这一步花的时间最值。5.4 加噪环境下的波头检测如果要在更接近实际环境的数据上验证算法可以在采集支路加 Band-Limited White Noise 模块或直接把生成的高斯白噪声叠加到导出后的数据上。我试过把 SNR 降到 40dBdb4 小波第一层细节系数仍然能稳定检出一个明显的模极大值降到 20dB 时模极大值开始模糊需要在检测前做一次小波软阈值去噪或者改用第二层细节系数重新确认。这块内容很适合做算法对比实验写论文时也是常用的抗噪部分。5.5 我目前最常用的一套默认参数最后把我现在最常用的一套配置直接列出来照着抄基本能跑出稳定结果项目我的设置线路模块Three-Phase Distributed Parameter Line长度 100km故障模块单相接地过渡电阻 0.1~1Ω故障时刻选在被测相电压峰值附近求解器ode23tb最大步长 1e-7s仿真时长0.021s故障后 1ms数据导出To WorkspaceTimeseries 格式重采样interp1 重采样到 10MHz 均匀网格波头检测db4 小波第 1 层细节系数模极大值阈值 0.15 倍峰值波速由线路参数计算并用已知故障反推标定行波故障检测看着玄乎跑通之后你会发现核心就三件事模型里能产生行波、算法里能抓到波头、公式里能算对距离。Matlab Simulink 的优势在于把所有环节放在一个环境里改一个参数就能重复整套验证。我现在做选型评估时遇到新的测距算法都会先搭这么一套双端行波测试台跑一组不同故障距离、不同过渡电阻、不同噪声水平的仿真再下结论。希望这篇经验能帮你少走几步弯路。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进