
写电力线路故障测距这块很多人一上来就盯着行波波速、到达时间差这些细节结果模型搭到一半就推倒重来。我最早做这个课题的时候也踩过类似的坑后来回过头看最耗时间的反而不是算法本身而是从故障暂态信号里把有用的行波头“拎出来”这一步。这篇就把我自己从原理到Simulink仿真的完整思路梳理一遍项目标题里提到的三项核心内容——小波分解与重构、卡伦堡变换也就是常说的相模变换、故障线路识别与行波测距——都会逐条拆开讲清楚并附上可以直接参考的模型搭建思路和参数配置。这套内容不是某个专项课题组的内部成果而是把电力系统暂态分析中几个经典工具组合起来做故障定位的方法。如果你正在做继电保护课设、研究生开题或者工作中要解决配网/输电网的故障选线和测距问题这篇文章里从理论推导到仿真实操都能对得上。方法论层面我已经做得非常细致所有关键参数都给出了计算依据和调试经验照着搭一次基本就能跑通。1. 故障测距的整体思路与方案选型1.1 为什么要用行波法来做故障测距故障测距这件事本质上是在问一个问题线上某个位置发生了短路或者接地离我们安装测量装置的那一端到底有多远。传统的阻抗法通过计算故障时测量到的电压电流比值得到故障阻抗再结合线路单位长度的阻抗推算出距离。这个方法原理简单、工程应用成熟但遇到高阻接地、故障点过渡电阻不稳定、线路分支多的情况误差很容易超出预期。原因在于阻抗法依赖的是工频稳态分量而故障瞬间的暂态过程恰恰包含了更丰富的位置信息。行波法的思路完全不同。故障发生时故障点会产生一个沿着线路向两端传播的电压、电流突变波这个波就是我们常说的行波。行波从故障点传到测量端的距离乘以波速再除以二就是故障距离。这个原理不受过渡电阻影响也不依赖系统阻抗参数理论上精度可以做到很高。所以现在很多高压输电线路的故障录波装置里行波测距已经成了标配功能。但行波法也有自己的难处——它依赖暂态信号而这个信号在故障后的最初几毫秒内非常微弱还夹杂着大量的噪声和谐波。怎么把这个微弱的行波头从一堆干扰里准确提取出来就成了整个测距方案成败的关键。这也是小波变换在这个场景里大显身手的原因。1.2 小波分解与重构的作用定位很多人第一次接触小波变换容易把它当成一种“高级滤波器”来理解。这个类比不完全准确但方向上没错。小波变换能把一个时域信号拆分成不同频率尺度上的分量而且在时域和频域同时保持局部化能力——这句话翻译成人话就是它知道信号的某个突变发生在哪个时间点同时能告诉你在那个时间点突变对应的频率成分是什么。这对行波检测来说简直是量身定制。行波头本质上就是一个极短暂的高频突变信号它出现在故障发生后的几十微秒之内。如果用傅里叶变换分析整体频率特征能看到但突变的具体时刻会被平均掉如果只看时域波形干扰太多很难界定哪个跳变才是真正的行波到达时刻。小波分解能把信号按频带拆开高频细节分量里行波头的特征特别明显到达时刻一抓一个准。完成行波到达时刻标定后还需要靠小波重构来验证。重构不是把原始信号完全还原而是选择性地叠加某些细节分量得到去除噪声后的“干净”暂态波形。这一步一方面能确认我们标定的波头不是噪声引起的误判另一方面也可以把后续测距计算需要用的信号成分提取出来。1.3 卡伦堡变换与三相解耦的关联逻辑三相交流线路的电磁暂态分析中有一个绕不开的问题三相之间通过互感和互容耦合在一起A相发生故障时B相和C相上也会感应出电压电流变化。如果我们直接拿每一相的暂态信号去做测距计算结果会受到耦合干扰。卡伦堡变换在这里的作用相当于数学上的“解耦”。它把三相电压电流向量变换到模量空间得到零模分量和线模分量。零模分量存在于大地回路中受土壤电阻率影响较大波速不稳定线模分量基本不受大地回路影响波速稳定更适合用来做行波测距。所以工程实践中几乎都用线模分量做波头识别和测距计算。我看过不少教程和论文讲卡伦堡变换的时候都喜欢直接给出变换矩阵让读者“照着用就行”。但实际上矩阵每一项的含义、为什么线模分量能避开地回路影响这些才是理解故障测距内在逻辑的关键。等后面拆解原理时会重点展开。1.4 方案整体架构把上面几个模块串起来整个仿真系统的数据流是这样的先用Simulink搭建一个双端供电或单端供电的输电线路模型在线路某个位置设置一个故障模块故障发生后测量端采集三相电压电流波形然后通过卡伦堡变换把三相信号转换为模量信号接着对线模分量做小波分解识别第一个波头到达的时刻利用这个时刻和波速、线路全长之间的关系计算出故障距离最后把计算结果与设定的实际故障位置进行对比验证测距精度。这个架构的好处是模块化程度高每一段都有独立的物理含义和验证手段。三相采集、相模变换、小波分析、测距计算这四个环节可以分别调试任何一个环节出了问题都能定位到具体位置。对于刚接触这个方向的读者来说这种解耦式的结构非常友好。稍后我按这个流程逐步展开每个模块的实现细节。2. 小波变换原理与行波波头识别的核心细节2.1 连续小波与离散小波这个场景该用哪个小波变换从数学定义上分连续小波变换CWT和离散小波变换DWT两支。连续小波通过尺度参数和平移参数的连续变化来扫描信号结果是一个二维的时频曲面信息量大但计算成本高。离散小波变换则通过二进制离散化尺度参数用滤波器组的方式逐层分解信号计算效率高工程实现方便Simulink里也有现成的模块可以调用。在故障行波测距这个场景里我们需要的是快速、稳定地从故障后的波形中定位突变时刻而且要在不同尺度下观察波头特征。离散小波的多分辨率分析特性天然适合这个需求。具体来说选择一个合适的小波基函数比如db4、sym8这类对线模分量做多级分解。分解得到的高频细节分量d1、d2等对应信号的突变部分低频近似分量a1、a2等对应信号的趋势部分。行波波头在高频细节分量里表现为一个明显的峰值找到这个峰值对应的采样点就等于找到了波头到达的时刻。我的经验是先做三层分解观察如果波头特征不明显再加深层数。层数太多会引入更多边界效应和计算延迟层数太少则高频成分分离不充分。2.2 小波基函数的选取原则选小波基这事没有绝对最优但有几个明确的取舍维度。常见的选择包括db系列Daubechies小波、sym系列Symlets小波、coif系列Coiflets小波等。对行波检测来说小波基需要满足几点紧支撑性要好——支撑区间短才能在时间上精确定位突变点消失矩要适当——消失矩越高对信号的平滑能力越强但过高的消失矩会让小波波形振荡增多反而干扰波头位置判断正交性要好——保证分解的无冗余性重构时信息不丢失。综合这些因素工程仿真中db4是使用频率最高的选择。我们实验室做过的多次对比测试里db4在故障行波波头检测中的定位误差和稳定性都优于其他基函数。sym8在有些场景下对噪声的鲁棒性稍好但计算量略大。如果信号噪比特别低可以尝试在分解前先做一次简单的预处理滤波。需要说明的是这是基于我们自身测试的结论具体到你的模型参数上可能会有所差异建议以你自己的仿真结果为准。2.3 分解层数的确定逻辑分解层数与信号的采样频率直接相关。每分解一层信号的频率范围就减半。假设采样频率是1MHz那么第一层细节分量覆盖250kHz到500kHz第二层覆盖125kHz到250kHz依此类推。行波波头的频率成分集中在几十kHz到几百kHz之间具体取决于故障类型、系统电压等级和线路结构。所以选择分解层数时要确保波头的主要能量落在某一层高频细节分量中。可以先做一次快速傅里叶变换看看故障暂态信号的频谱分布再决定分解层数。这样比拍脑袋定层数靠谱得多。我常用的方式是分解4到5层然后依次查看各层细节分量的波形找到那个波头特征最清晰、信噪比最高的层作为波头时刻判定的依据。这个“观察确认”的步骤虽然看起来土但最有效比任何理论推导都快。2.4 波头到达时刻的判定小波分解完成后线模分量在某一层细节分量中会出现一个明显的模极大值点。这个点对应的时刻就是行波到达测量端的时刻。判定模极大值点时要注意两个细节。第一要设置合理的阈值。阈值太低会把噪声也当波头造成误判阈值太高可能漏掉真实的波头。阈值一般取该层细节分量最大幅值的10%到30%之间根据信噪比动态调整。第二要结合其他层的波头信息做交叉校验。如果同一时刻在多个尺度上都出现了模极大值那基本可以确认是真实波头如果只有某一层出现可能是局部噪声。这里我提供一个自己在仿真过程中经常用到的处理思路在Simulink里把分解后的细节分量输出到MATLAB工作空间用findpeaks函数进行峰值检测设定最小峰值高度和最小峰值间距自动定位波头时刻。注意不要让Simulink的采样时间步长太大而丢失波头细节下一节会具体说明步长的选择。3. 卡伦堡变换原理与三相解耦实现3.1 相模变换的数学基础三相输电线路的电压电流方程中线路阻抗矩阵和导纳矩阵都不是对角矩阵这意味着各相之间存在耦合。为了简化分析我们需要寻找一个线性变换矩阵把相域中的三相参量转换到模域中使得模域中的阻抗矩阵和导纳矩阵对角化。这个变换就是相模变换克莱姆变换Clarke变换和卡伦堡变换Karenbauer变换是电力暂态计算中最常用的两种。它们的基本思想是一致的区别在于变换矩阵的具体构成和适用场景。以卡伦堡变换为例对三相换位线路其变换矩阵为对于三相电压变换关系为V_mod T * V_phase。这里T是3×3矩阵常见的卡伦堡变换矩阵形式如下以对称分量与线模零模分解为背景T [1 1 1 ] [1 -1 0 ] [1 0 -1 ]模量分量对应的物理含义是第一个分量为零模0-mode也被称为地模Ground mode它对应的是三相共同对地的传播模式受大地回路影响大第二个和第三个分量为线模1-mode和2-mode它们对应的是相间传播的模式基本不受地回路参数影响。注意这个矩阵并不一定满足规范化条件即T的逆与T的转置之间的关系实际使用时要不需要对它做归一化只需要保证变换能够实现解耦即可。具体工程实现中Simulink里的三相电压电流测量信号通过矩阵运算模块或自定义函数实现这个变换。3.2 为什么线模分量对测距更重要行波测距中最关键的参数是波速而波速不是固定不变的它取决于行波传播模式对应的线路参数。零模分量沿地回路传播其波阻抗和波速受土壤电阻率、大地回线参数影响非常大并且具有明显的频变特性——不同频率分量传播速度不一样这会导致零模行波波形在传播过程中发生比较严重的畸变。这个特点让零模分量很难给出稳定的波速用于测距测距精度大打折扣。线模分量的传播则主要依赖相间参数几乎不经过大地回路受土壤参数影响极小。虽然线路参数也有频变特性但相比零模分量要轻微得多。工程上通常采用固定波速比如取接近光速的值乘以一个折减系数来近似在几百公里的输电线路范围内这个近似带来的定位误差是可以接受的。因此后面的小波分析、波头识别、测距计算全都基于线模分量做。零模分量也不是完全没用——如果是接地故障零模分量和线模分量之间会有一个时间差这个差值可以用来辅助判断故障性质的参考但主测距通道一定是线模。3.3 卡伦堡变换的Simulink实现方式在Simulink中实现卡伦堡变换有两种常见途径。一种是直接用矩阵乘法模块Gain模块配合常系数矩阵把三相电压信号从3×1向量变换为3×1模量向量。这种方式直观、易调试适合快速验证。另一种是用MATLAB Function模块写一个自定义变换函数灵活性更高可以在变换的同时做归一化处理。我推荐先用方式一跑通整体流程确认测距结果可靠后再考虑代码化重构。因为矩阵乘法模块在模型里可视性很强每一路信号的来源和去处一目了然排错时非常方便。以电压信号为例将示波器或电压测量模块输出的三相瞬时电压值输入到Gain模块Gain矩阵直接填卡伦堡变换矩阵。输出端会得到三个分量分别接入示波器观察波形。电流信号的变换同理用的是同样的变换矩阵。需要提醒的是Simulink里面用Gain模块做矩阵乘法需要把输入端口设为3×1向量模式否则矩阵维度不匹配会报错。一个常见的坑是把三个单相电压测量信号直接连到了Gain的标量输入端口仿真一运行就会提示维度错误。3.4 换位线路与非换位线路的处理差异卡伦堡变换的推导基于线路参数对称换位的假设。实际输电线一般会通过换位来平衡三相参数但在仿真建模时未必都会考虑换位。如果你的Simulink线路模型用的是分布参数线路模块并且把“换位”选项打开了那么卡伦堡变换可以直接使用如果线路是三相参数不对称的例如某些短距离电缆段卡伦堡变换的完全解耦能力会有所下降。处理非换位线路时一个实用的替代方案是对线路的阻抗矩阵和导纳矩阵做特征值分解用特征向量矩阵作为变换矩阵。这个做法在理论上是更普适的但实现复杂度也高不少。对大多数学习和验证性质的仿真项目来说采用换位线路模型加卡伦堡变换已经足够。这也是我在标题里明确限定“卡伦堡变换”的适用语境——它解决的是换位线路下的三相解耦问题。4. Simulink仿真模型搭建与测距全流程实现4.1 仿真模型架构总览模型整体结构分为五个环节用模块组的逻辑组织起来电源侧三相交流电压源Three-Phase Source设置合理的幅值、频率和相位。线路侧用分布参数线路模块Distributed Parameters Line或集中参数pi型线路模块搭建输电线路。推荐选用分布参数线路模块因为它能自然模拟行波在沿线的传播过程。线路参数填入单位长度的电阻、电感、电容数据。故障侧三相故障模块Three-Phase Fault根据要模拟的故障类型设置相别和接地方式单相接地、两相短路、三相短路等。故障电阻按实际情况设置金属性短路设置为0.01Ω数量级高阻接地则设几十到几百欧姆。测量侧分别在测量端安装电压电流测量模块采样频率要设置得足够高保证能捕获行波的波头细节。分析侧将测量数据导入MATLAB工作空间执行卡伦堡变换、小波分解和测距计算的m脚本。整个模型中我会特意把采集模块和信号处理模块用不同的子系统封装文件结构更清晰调试时也能快速定位问题。4.2 仿真参数的设置与计算依据仿真系统参数以110kV或220kV高压输电线路为背景线路全长设为100km到300km之间的某个值具体看你想测试的测距量程。关键参数设置如下以一组常用参数为例参数推荐值说明系统线电压220kV高压输电场景常见电压等级线路长度200km便于验证行波测距在长距离下的精度采样频率1MHz行波信号频率成分决定了采样率至少要达到这个级别仿真步长1微秒或更小需小于采样周期否则采样会失真故障起始时间0.02s让系统先稳定运行一段时间再触发故障故障电阻10Ω至100Ω下限模拟金属性短路上限模拟高阻接地仿真总时长0.06s包含故障前0.02秒和故障后约0.04秒这里重点说说采样频率和仿真步长的关系。行波波头的时间分辨率直接取决于采样频率。1MHz的采样率意味着两个采样点之间间隔1微秒行波传播1微秒的距离大约是300米乘以波速折减系数也就是大概两百到三百米。这个分辨率下测距误差理论上可以控制在数百米内。如果再考虑故障距离为几十公里以上这个相对误差已经非常可观了。如果你的电脑性能允许可以把采样频率提高到2MHz甚至更高测距精度还能进一步提升。但要注意采样率提高会让Simulink仿真的计算量成倍增加仿真时间也会显著变长。4.3 故障点位置与故障类型选择故障点位置的选择要有策略性。我建议至少设置三组故障距离进行测试一个是近端故障比如距离测量端20km一个是中段故障100km一个是远端故障180km。这样能全面检验测距算法在不同距离上的适应性。因为行波在近端故障时的反射波和折射波混叠现象比较严重波头识别难度更大而远端故障的波头传播距离长衰减明显信号幅值降低。两种情况考验的是算法的不同侧面。故障类型方面单相接地故障是最常见也最值得优先验证的场景。单相接地时故障电流中含有明显的零模和线模分量相模变换之后能很好地看到两个模量的差异。两相短路和三相短路我也建议各跑一遍尤其是三相短路时对称性导致零模分量近似为零这时线模分量是唯一可用的测距信号处理方式略有不同。4.4 从波形采集到测距结果输出的完整流程下面是一段可以直接参考的测距主流程的伪代码逻辑实际使用中可以用MATLAB脚本实现1. 在Simulink中用To Workspace模块把测量端的A/B/C三相电压采样值保存到变量Va、Vb、Vc中。 2. 对Va、Vb、Vc做卡伦堡变换得到模量分量。 3. 选取线模分量用MATLAB的wavedec函数做小波分解 [C, L] wavedec(V_line, 4, db4); 4. 提取第4层细节系数 D4 wrcoef(d, C, L, db4, 4); 5. 用findpeaks函数定位D4中的第一个模极大值点记录其索引位置。 6. 根据索引位置换算时间再用行波测距公式计算故障距离。 7. 将计算结果与模型中设定的实际故障距离对比输出误差。这里需要特别说明第6步的测距公式。行波测距的基本公式为距离 波头到达测量端的时刻 × 波速/ 2为什么除以2因为行波从故障点出发到达测量端的传播距离是单程而行波测距利用了“故障点产生的行波先到达测量端然后在测量端反射后再次到达故障点再反射回来第二次到达测量端”这个往返过程的时间差来消掉波速和故障距离之间的常数关系。在单端测距法中我们把“第一个波头到达时间”和“第二个反射波头到达时间”的差值乘以波速除以2得到的就是故障距离。但在双端测距结构里每端只需要识别第一个波头到达时刻利用两端到达的时间差与线路全长去算故障点。简单的单端公式中除以2正是基于往返路径的考虑。如果用双端测距方案公式则为故障点距离A端的距离 (线路全长 (tA - tB) × 波速) / 2其中tA和tB分别是故障行波到达线路两端的时间。这个公式背后是波速在两端和故障点之间的几何关系推导出来的也需要配合全网对时。4.5 仿真结果的验证方法仿真跑完之后不能只看计算出来的距离数字还需要做几个层面的验证。第一波形层面的验证。查看小波分解后的细节分量波形确认确实有一个清晰的模极大值出现在设定的故障时刻附近。如果波头位置明显偏离说明分解层数或阈值选择有问题。第二数值层面的验证。把计算结果与模型中的故障位置参数做对比记录绝对误差和相对误差。一般行波测距的理论精度在几百米以内。如果误差达到几公里基本可以确定是采样率不足或者波速设置不准确。第三反复性验证。固定故障位置微调故障电阻、故障初相角观察测距结果是否稳定。这段调参过程其实就是科研项目中常说的鲁棒性分析做得扎实的话写进论文里会很有说服力。5. 常见问题与排查技巧实录5.1 采样率不足导致的波头识别失真这是我用Simulink做行波仿真时遇到的第一个大坑。最初设置采样频率只有10kHz模型跑出来的波形看起来挺正常但用小波分解后怎么都找不到清晰的模极大值——其实波头信息在采样过程中早就被“丢”掉了行波头是高频信号采样定理要求采样率至少是信号最高频率的两倍但对于要精确捕捉突变时刻的场景还要留足裕量。排查方法是先做个诊断性仿真把故障点设置在距离测量端很近的位置用示波器直接观察故障后的电压波形。如果能看到波形在故障瞬间有一个很“陡”的跳变沿说明采样率基本够用如果看到的跳变是“圆滑”甚至“阶梯状”的采样率一定不够需要翻倍往上加。5.2 波速设置不准导致系统性偏差波速是行波测距中的关键变量而这个变量在实际中会受到线路参数频率特性的影响并不是一个固定的常数。很多新手直接取光速比如每微秒300米但真实的波速是每微秒约290米到299米之间随线路几何参数变化。一个常见做法是先用线路参数计算波阻抗等值参数再用波速公式计算理论值波速 1 / sqrt(单位长度电感 × 单位长度电容)这个公式算出来的波速更贴近实际。如果你用的是分布参数线路模块可以直接从模块的内部参数里读取单位长度电感和电容值代入公式即可。线模分量对应的电感和电容值会在相模变换后发生变化。如果直接套用相域参数计算会得到偏大的线模波速这就是系统性偏差的来源。5.3 故障初相角的影响与零模干扰高压输电线路故障时故障发生的瞬间与电压过零点的相位关系决定了暂态分量的强弱。如果在电压过零点附近发生故障暂态行波的幅值会很小波头识别难度大增。这不是模型出错而是真实物理规律的表现。我在仿真中一般会把故障初相角设在电压峰值附近比如90度这样暂态信号幅值最大波头最容易识别。如果你故意要测试算法在恶劣条件下的性能可以把初相角设到接近电压过零处这种情况下通常需要更高的采样率和更精细的波头识别阈值才能保证精度。零模干扰的情况则特别出现在接地故障中。零模分量在小波分解中也可能产生一个幅值不低的峰值如果误把零模的波头当成线模的波头测距距离会偏大。解决办法是坚持只对线模分量做测距计算零模分量最多用来辅助判断不作为主信号。5.4 Simulink模型仿真速度过慢的优化方案高采样率下Simulink仿真会变得非常慢。我自己的仿真模型采样率调到2MHz后0.06秒的仿真时长在普通笔记本上要跑好几分钟。如果模型复杂加上了多次故障切换仿真时间更是成倍增长。几个优化手段实测有效一是把仿真求解器的步长设置成“fixed-step”步长取与采样周期相同或略小的值避免变步长求解器因为捕捉高频细节而频繁缩小步长二是在满足精度要求的前提下使用离散求解器而不要用连续求解器三是把To Workspace的采样数据间隔设置得合理不需要记录每个仿真步长的数据——毕竟1MHz采样率已经足够没必要再输出更多无意义的高密度数据四是把不需要实时观察的示波器模块暂时断开因为它们会拖慢仿真速度。5.5 常见问题速查表现象可能原因解决办法小波分解后找不到清晰波头采样率太低提高采样频率到1MHz及以上测距结果整体偏大或偏小波速设置错误利用线路参数重新计算线模波速计算结果不稳定时大时小故障初相角过小暂态信号太弱调整故障初相角或提高阈值灵敏度卡伦堡变换模块报维度错误输入信号是三个标量而非3×1向量用Mux模块将三相信号合成向量仿真速度极慢变步长求解器频繁调整改为固定步长离散求解器零模分量干扰测距结果误选零模做测距信号严格只用线模分量做波头识别6. 项目扩展思路与实操心得6.1 从单端测距扩展到双端测距前面提到的测距流程主要集中在单端测量结构也就是在一端安装测量装置并识别该端的波头到达时间。但实际工程中双端测距因为不依赖反射波识别能够避免单端测距中因反射波难以辨识而带来的定位盲区所以应用更广。在Simulink里扩展双端测距并不复杂。只要在线路两端分别安装测量装置设置相同的故障时刻分别记录两端小波分解后的第一个波头到达时刻然后计算时间差代入双端测距公式。需要强调的是双端测距对时间同步要求非常高。微秒级的时间误差就会带来几百米的测距误差。仿真中不存在真实的时间同步问题因为所有数据共享同一仿真时钟。但写论文或者做工程应用时必须把时间同步误差作为误差来源之一来分析。6.2 结合完整的说明文档与参考文献的组织思路标题里提到了“说明文档参考文献”这两部分虽然是文档工作但质量直接影响项目整体评价。说明文档建议按这样的结构组织绪论课题背景和意义行波测距的国内外研究现状。理论基础行波产生与传播、小波变换、卡伦堡变换、测距原理。仿真模型设计整体架构、各模块功能、参数设置。仿真结果与分析不同故障距离、故障类型下的测距结果表格和误差分析。结论与展望总结成果与遗留问题。参考文献方面国内相关期刊中关于行波测距、小波变换的应用论文非常多英文文献则多关注小波变换在暂态信号分析中的算法改进。引用时注意选择近几年的文献并确保引用的论文确实是你认真读过的。参考别人的成果并没有问题自己的仿真结果和数据一定要自己跑这是学术规范的基本要求。6.3 一套可以复用的测距脚本框架我把在仿真后期用到的测距脚本框架整理在这里方便你在此基础上改造。这段伪代码就像前面第4节提到的主流程但这里补充了误差分析的输出格式。% 数据准备 load(simout_Va.mat); load(simout_Vb.mat); load(simout_Vc.mat); fs 1e6; % 采样率 t_axis (0:length(Va)-1) / fs; % 卡伦堡变换 T_k [1 1 1; 1 -1 0; 1 0 -1]; V0 (T_k(1,1)*Va T_k(1,2)*Vb T_k(1,3)*Vc); V1 (T_k(2,1)*Va T_k(2,2)*Vb T_k(2,3)*Vc); % 小波分解 [C, L] wavedec(V1, 4, db4); D4 wrcoef(d, C, L, db4, 4); % 波头检测 [pks, locs] findpeaks(abs(D4), MinPeakHeight, max(abs(D4))*0.2); peak_time t_axis(locs(1)); % 测距计算 % 假设故障行波到达测量端时刻记为 ref_time ref_time 0.02; % 故障发生时刻由故障模块设定 travel_time peak_time - ref_time; v_wave 2.95e8; % 线模波速 fault_distance v_wave * travel_time / 2; % 单端往返公式 % 结果对比 actual_distance 100e3; % 模型中设定的故障距离 fprintf(计算距离: %.2f km\n, fault_distance/1000); fprintf(实际距离: %.2f km\n, actual_distance/1000); fprintf(绝对误差: %.2f km\n, abs(fault_distance - actual_distance)/1000);这段脚本还有一个可以改进的地方就是fault distance计算里的2倍关系到底要不要除。如果用的是单端测距且只计算单程距离那是不用除2的如果用的是往返时间差方法要除2。我在做第一个版本时就因为这个问题把距离算成了实际距离的两倍查了好半天才发现是公式逻辑用反了。建议你在写注释时把公式的几何含义写清楚。6.4 实操中的几点深入体会这个项目做完之后我最大的体会是行波测距的难点从来不是某个单一算法而是信号链路上各个环节之间的配合。小波基选得再好采样率不够照样抓不到波头卡伦堡变换矩阵再标准信号维度接错了照样跑不通。每个模块单独看都很简单但串起来之后任何一个环节的微小偏差都会在最后的结果里被放大。如果只给后人提一条建议我会说从最简单的场景开始调通全链路。先设置一个距离较近比如20km、金属性短路的单相接地故障用最高的采样率和波形观察模式确认小波分解后的波头位置和理论值对得上。再逐步增加故障距离、增加过渡电阻、调整故障类型每一步都验证通过后再进入下一层。这个过程虽然看起来慢但实际是最快的——因为你对整条链路建立了直观的感知后续调试的时候扫一眼波形你就能猜到问题出在哪一环。卡伦堡变换的矩阵形式其实我最早也纠结过要不要用对称分量变换替代。后来反复对比发现对称分量变换在稳态分析中很好用因为它可以自然地分解为正序、负序、零序但用在行波暂态分析里卡伦堡变换的模量物理意义更贴近行波传播本身。如果不是做负序保护类的分析而是专注故障行波和测距卡伦堡变换是更顺手的工具。论文写作的时候还有一个技巧。不要一上来就写测距公式和仿真结果先花时间做波形图。行波测距的论文里小波分解后的各层细节分量波形图、线模与零模分量的对比图、不同故障距离下的测距结果表格这三类图是审稿人和答辩老师最关注的。把这几个图做清晰整篇论文的说服力就立起来了一半。最后再分享一个细节。Simulink里模拟高阻接地故障时故障模块的接地电阻数值一定要用实数而非无穷大。有的版本里把电阻设成inf会直接导致求解器报错或者仿真结果异常。设成几百欧姆到几千欧姆就能很好地模拟实际的高阻接地场景同时也避免数值计算上的麻烦。