☰
WLS状态估计在低压配电网单相接地监测中的应用与Matlab实现
2026/10/10 4:19:29 网站建设 项目流程

低压配电网的故障监测一直是个“看着简单、做着难”的领域。单相接地在低压系统里是最常见的故障形态,从配电变压器出口到用户入户线的整个链条上,接地故障的发生频率远高于短路和断线。但真正想把这个故障监测准确,难点从来不在“测到故障”,而在“从一堆带噪声的测量值里把系统状态估计准”。这个项目做的事情就是:在一条径向低压测试馈线上,用加权最小二乘(WLS)状态估计器去评估单相接地监测方案的性能。由于测量误差本质上是随机量,单次仿真完全不具备代表性,整套分析采用蒙特卡洛方式实现,并配套完整的Matlab代码。这篇文章就把整个项目从问题定义、算法原理、建模逻辑、代码实现到踩坑记录完整梳理一遍,给正在做配网监测方向研究或工程落地的同学一个可直接复用的参考。

这个项目适合两类人看:一类是做配电网自动化、电气工程方向的学生或工程师,想理解状态估计在低压侧怎么落地;另一类是刚接触状态估计但想用Matlab从零实现WLS的开发者,可以从中抄到一套能跑的代码框架和调参经验。我会把原理讲得尽量通俗,同时保留足够的公式和代码细节。

1. 项目背景与问题定义

1.1 为什么偏偏盯上低压配电网的单相接地

低压配电网(380V/220V)处于电力系统的最末端,直接面对用户负荷。和中高压系统相比,它的特点非常鲜明:设备数量庞大,线路半径短但分支极多,负荷随机性大,量测设备覆盖率极低。正因为处于最末端,接地故障的发生频率相当高,单相接地在低压配电故障里占了绝大多数。可以说,低压网络的故障形态主要就是单相接地。

但这个问题长期被忽视。很多低压台区只在进线端有一个总表,分支上的故障往往要靠用户停电投诉才能被发现,运维人员拿着摇表一段一段排查,效率极低。这背后的根源不是没有监测需求,而是缺少一套能在“量测稀疏、误差随机”条件下可靠判断系统状态的方案。单相接地发生前后,系统的三相电压会呈现明显的不平衡特征,零序分量或负序分量会显著变化。想要捕捉这种变化,不能只靠一两个直接量测点,需要通过状态估计把整个网络的运行状态推算出来。所以我理解这个项目的第一层核心,就是用状态估计解决低压侧信息不足的问题。

1.2 监测方案里,状态估计到底承担什么角色

所谓“单相接地低压电网监测方案”,本质上要回答三个问题:有没有发生接地、发生在哪个区域、严重程度如何。直接量测只能覆盖部分节点和部分电气量,比如母线上有电压互感器,出线上有电流互感器,但中间分支和末端节点几乎全是盲区。这就需要一个信息融合中心,把分散的、带误差的量测数据整合起来,推算出全网络的电压幅值、相角或电流分布,再基于这些推算结果去判断故障。

在这个项目里,WLS状态估计器就是这个信息融合中心。它根据有限的量测数据,加权拟合出系统状态量的最优估计值。监测方案后续的故障判定、位置辨识全都依赖状态估计的输出,所以它的性能直接决定了整套监测方案的可靠性。项目标题强调的是“性能评估”,而不是单纯“实现一个状态估计器”,这意味着我们要关心的不是某一次估计算得准不准,而是在大量随机误差场景下的统计表现。这一点直接引出了蒙特卡洛分析的必要性,后面我会专门展开。

2. WLS状态估计器的原理与选型逻辑

2.1 加权最小二乘的数学模型

WLS状态估计的核心思想一句话就能说清:让估计出的状态量取值,使所有量测残差的加权平方和最小。这里的“加权”不是随便加的,权重的大小反映的是每个量测的可靠程度。

假设量测向量为 z,状态向量为 x,量测方程写为:

z = h(x) + e

其中 h(x) 是量测函数,e 是测量误差向量,通常假设为零均值的高斯分布,协方差矩阵为 R。WLS的目标函数是:

J(x) = (z - h(x))ᵀ R⁻¹ (z - h(x))

R 通常取对角矩阵,第 i 个对角元素是第 i 个量测的方差 σᵢ²。方差越小,说明这个量测越可信,它在目标函数里的权重 1/σᵢ² 就越大。这个设计的物理含义很直观:好的量测多信一点,差的量测少信一点。

由于 h(x) 在配电网中通常是非线性函数(功率量测与电压之间是乘积关系),目标函数不能直接求解析解,需要用牛顿法迭代。在第 k 步迭代中,先把 h(x) 在当前估计值 xₖ 附近线性化,得到雅可比矩阵 H = ∂h/∂x,然后计算状态修正量:

Δxₖ = (Hᵀ R⁻¹ H)⁻¹ Hᵀ R⁻¹ [z - h(xₖ)]

然后更新状态:

xₖ₊₁ = xₖ + Δxₖ

不断重复直到 Δx 的范数小于收敛阈值。这里出现的信息矩阵 G = Hᵀ R⁻¹ H 非常关键,它不只是迭代求解的中间产物,迭代收敛后 G⁻¹ 近似等于状态估计误差的协方差矩阵。这一点在后面做蒙特卡洛验证时会用到,是我们检验算法实现正确性的一个重要参照。

2.2 为什么在这个场景选WLS而不是其他估计器

做状态估计的算法路线很多,扩展卡尔曼滤波、无迹卡尔曼滤波、粒子滤波都能做动态估计,但在这个项目里我最终选择了WLS,理由有三个。

第一,监测方案是快照式的。实际低压监测系统通常是每隔一段时间采集一次量测断面,然后判断当前系统状态,并不是连续的实时滤波问题。WLS正好处理这种批量静态估计场景,而卡尔曼滤波类的时序递推优势在这里用不上。

第二,计算效率对蒙特卡洛分析至关重要。蒙特卡洛要跑成千上万次仿真,粒子滤波每次要维护成千上万个粒子,计算量是WLS的几百倍;扩展卡尔曼虽然计算量不大,但需要线性化传播协方差,实现复杂度高。而WLS一次迭代只需维护一个信息矩阵,对本项目这种节点规模在几十个以内的低压馈线来说,单次求解耗时在毫秒级,非常适合蒙特卡洛反复调用。

第三,可解释性强。WLS的权重矩阵、信息矩阵、残差都有明确的数学含义,后续做坏数据检测、可观测性分析都很方便。低压配电网的量测配置本来就稀疏,一旦出现不可观测或信息矩阵奇异,WLS的中间变量能直接告诉我们问题出在哪,而黑盒式的滤波算法很难做到。

不过低压网络有一个特性必须提前警惕:线路R/X比值很高。低压线路电阻远大于电抗,R/X常在 3~5 之间,这与高压输电网(R/X 小于 0.5)完全不同。这会导致雅可比矩阵条件数偏大,迭代时对初值更敏感。这个坑在后面调试时反复出现,我会在问题排查章节详细讲。

3. 径向测试馈线的建模与测量配置

3.1 测试馈线拓扑设计

径向馈线就是辐射状拓扑,从低压母线出发,各分支一路向前延伸,不再形成闭环。这是低压配网最常见的接线形式,项目里我构建了一条包含一个电源点、一条主干线、三条分支、共18个节点的典型低压台区结构。

拓扑设计的逻辑要讲清楚。之所以用径向结构,不只是因为它符合实际,还因为径向拓扑的逆流计算非常方便——从末端往电源点逐段回推,就能算出全网电压分布,这为后续生成量测真值提供了基准。如果用了环网结构,潮流计算要解方程组,算法复杂度高出不少,对评估状态估计器性能这个目标来说没有额外价值。

节点的编号规则建议这样定:电源点(低压母线)编号为1,其余节点按从电源点向末端延伸的顺序编号,分支末端的节点编号排在最后。这么做的好处是雅可比矩阵的稀疏结构比较规整,后续Matlab实现时索引关系不容易错。支路参数可以参考真实低压线路,我用的单位电阻约0.4 Ω/km,单位电抗约0.08 Ω/km,注意这个R/X比已经到了5左右。负荷按恒功率模型设置,每节点注入功率控制在几千瓦量级,模拟实际台区的负载水平。

3.2 测量点布置与误差模型

量测不可能全覆盖,这正是低压台区的现实约束。项目里的量测布置逻辑是:母线出口布置一组电压幅值量测和一组总出线电流量测,三条分支的末端各布置一组电流量测,中间节点不布置量测。总共约十个量测量,形成“进出线有表,中间盲区”的稀疏测量格局。

这种布置是有意的,它模拟的是低压台区最典型的量测现状:总表和用户表之间存在大量无监测区间。状态估计器的任务,就是在这种稀疏量测条件下把盲区节点的状态推测出来。

误差模型是整套随机分析的核心。测量误差按高斯分布叠加在真值上,即 z = z_true + e,e ~ N(0, σ²)。σ 按照量测满量程的百分比设置,项目里用了三档:1%、3%、5%,对应不同等级互感器和监测终端的实际精度。1% 相当于高精度电能质量终端,3% 相当于常规配电监测终端,5% 相当于老式电流互感器的误差水平。后面的蒙特卡洛分析全都是围绕这三档误差水平展开的,通过对比不同误差水平下的估计性能,能直观看出状态估计对量测精度的依赖程度。

4. 蒙特卡洛分析的方法设计与次数考量

4.1 为什么单次仿真完全不够

如果只做一次仿真,跑完WLS得到一个估计结果,你能得到什么呢?你得到的只是“在某一组特定随机误差下,WLS表现如何”。这组误差碰巧偏大,结果就难看;碰巧偏小,结果就好看。单次结果既不能代表平均性能,也不能反映误差的分散程度。这就像只掷一次骰子就判断骰子是否公平一样,完全没有统计意义。

测量误差的随机性质决定了状态估计器的性能只能从统计意义上去考察。我们要评估的是“平均意义下的估计精度”以及“估计误差的分散程度”。这就要求我们在同一个测试网络下,反复生成大量随机误差样本,对每个样本分别执行WLS,最后对估计结果做统计分析。这就是蒙特卡洛方法在本项目中的角色——用大量独立随机试验逼近真实误差条件下的性能分布。

4.2 蒙特卡洛执行流程

完整流程可以归纳为七个步骤:

  1. 用确定性潮流计算得到网络真实状态 x_true;
  2. 由 x_true 和量测方程计算各量测量的真实值 z_true;
  3. 按误差模型生成一组随机测量噪声 e;
  4. 得到带误差的量测向量 z = z_true + e;
  5. 执行WLS状态估计,得到估计值 x_est;
  6. 记录 x_est 与 x_true 的偏差;
  7. 重复步骤3到6共N次,对N个偏差做统计分析,绘制误差分布图,计算RMSE、偏差均值等指标。

这个流程里最需要注意的是步骤3和步骤6的独立性。每次试验的误差样本必须独立生成,不能因为用了同一个随机种子就产生重复序列;每次试验的偏差记录要为后续统计保留完整数据,不能只记一个平均值。

4.3 仿真次数怎么定

蒙特卡洛次数是这类分析里最常被问的问题。N太小,统计结果抖动明显;N太大,计算时间成倍增加,虽然单次WLS很快,但次数翻几倍后累计耗时也会变得可观。

我的做法是两步走。先用200次快速跑一遍,记录RMSE的数值,然后用不同的随机种子再跑一遍,对比两次的RMSE。如果相对波动小于5%,说明200次的样本量已经能稳定反映性能;如果波动大,就把次数翻倍,通常到了1000次就非常稳定了。在本项目这个规模的网络上,单次WLS求解只需要几毫秒,跑1000次也就几秒钟,完全在可接受范围内。

如果想更严谨,可以利用公式 n ≥ (z_{α/2} · σ_est / ε)² 估算样本量。其中 z_{α/2} 是对应置信水平的标准正态分位数,95%置信水平下取值1.96;σ_est 来自小样本的估计值标准差;ε 是你允许的误差范围。但实际工程中很少严格按这个算,因为σ_est本身也要估,两步走的经验方法已经足够可靠。

5. Matlab代码实现与关键环节拆解

5.1 整体代码框架

Matlab实现分四大块:数据定义、真值求取、WLS求解、蒙特卡洛主循环。数据定义负责节点表、支路表和量测配置的初始化;真值求取用前推回代法,这是低压辐射网络的最优选择,实现简单、收敛快;WLS求解封装成独立函数,输入量测和网络参数,输出状态估计值;主循环负责组织蒙特卡洛试验并收集结果。

数据定义部分的核心是支路表和量测表。支路表每一行记录支路首端节点、末端节点、电阻、电抗;量测表每一行记录量测类型、所在节点、对应误差标准差。把网络参数和量测配置独立成数据,后续要换网络或改量测布置时只需要改数据,不用动算法代码。

真值求取用前推回代法,先假设所有节点电压为额定值,从末端节点开始向前计算支路电流,再从电源点向后更新节点电压,反复迭代直到电压修正量小到阈值以下。这个方法对径向网络非常高效,通常十几次迭代就能收敛。

5.2 关键代码片段

WLS的核心迭代代码是整套程序的心脏。这里给出一段可以直接运行的框架代码:

% 初始化状态变量 x 为额定电压 x = ones(nNode, 1); % 迭代求解WLS for iter = 1:maxIter % 计算量测函数 h(x) h = calcMeasFunc(x, branchData, measData); % 计算雅可比矩阵 H H = calcJacobian(x, branchData, measData); % 计算残差 r = z - h(x) r = zMeas - h; % 构建信息矩阵 G = H' * W * H, 其中 W = inv(R) G = H' * W * H; % 求解修正量 dx dx = G \ (H' * W * r); % 更新状态 x = x + dx; % 收敛判据 if norm(dx) < 1e-6 break; end end

代码里的 W 是权重矩阵,即量测误差协方差矩阵的逆。这一行代码是关键:

W = diag(1 ./ (sigmaMeas.^2));

量测误差的生成也很简单,直接在蒙特卡洛循环里用 randn 生成:

zMeas = zTrue + sigmaMeas' .* randn(nMeas, 1);

5.3 提速与诊断技巧

蒙特卡洛重复几千次,每次迭代都在重新计算雅可比矩阵和信息矩阵,提速空间主要在三个地方。

第一,雅可比矩阵里与支路阻抗相关的部分可以在循环外预计算,因为网络拓扑和支路参数在整个蒙特卡洛过程中是不变的。第二,测量点配置不变时,信息矩阵的非零结构是固定的,可以用稀疏矩阵存储,Matlab在稀疏矩阵运算上的速度远快于稠密矩阵。第三,收敛判据用状态修正量的范数而不是残差范数。状态修正量直接反映估计值的稳定程度,对收敛的判断更敏感,可以在更少的迭代次数内达到相同精度。

诊断技巧有一个非常实用的逻辑:先用 σ = 1e-6 的极小误差跑一遍WLS,如果估计结果与真值几乎完全一致,说明WLS实现正确;再把 σ 调到5%,看统计结果是否呈现合理规律。这个两阶段验证法能帮你快速区分“代码写错”和“误差太大导致性能下降”这两种情况,省掉大量排错时间。

6. 结果分析与性能评估

6.1 性能指标体系

评估结果不能只看单个误差值,需要一套指标体系。我主要用四个指标:

RMSE(均方根误差)是最常用的精度指标,它同时反映偏差和方差,计算公式是 sqrt(mean((x_est - x_true).^2))。Bias(偏差均值)反映系统性偏差,如果Bias接近零说明估计器没有系统性的偏移。误差分布直方图或经验概率密度能直观展示估计误差的形态,正常情况下应该近似标准正态分布。置信区间覆盖概率也能用作检验指标,把X_true落在估计值±1.96倍标准差的区间内的比例算出来,理论上应该接近95%。

最后一个指标还有一个重要用法:对比蒙特卡洛统计得到的样本协方差和WLS信息矩阵的逆 G⁻¹ 给出的理论协方差。如果二者接近,说明WLS实现正确,估计误差的统计特性与理论推导一致。这是对算法实现最严格的检验。

6.2 典型结果解读

在 σ = 1% 的量测误差水平下,电压幅值估计的RMSE通常在0.1%到0.2%量级,也就是说状态估计把单点量测误差“平均化”了,整体估计精度优于单个量测的精度。这体现了WLS最核心的价值:冗余量测信息融合后,随机误差被相互抵消,估计结果比任何单点直接量测都更可靠。

在 σ = 5% 时,RMSE会放大到0.5%以上,但仍然明显小于单点量测误差。这说明即使量测精度一般,WLS依然能提供有价值的状态信息。

一个重要的规律是:分支末端的电压相角估计误差普遍比主干节点大。原因是末端节点处于量测盲区,附近没有直接量测支撑,信息量最少。这直接指向监测方案的优化方向:如果想提升末端故障定位的精度,要么增加末端量测点,要么利用故障前后的电压暂降特征做补充判断,单靠现有稀疏量测,末端估计精度是有理论上限的。

6.3 边界情况与隐患

高R/X比带来的隐患在日常运行时不明显,但碰到极端误差样本时会暴露:信息矩阵条件数偏大,WLS迭代可能出现较大偏差甚至不收敛。这时候不能简单地多迭代几次,而是要引入坏数据检测机制。

常用的方法是最大归一化残差检验:每次WLS收敛后,计算每个量测的归一化残差,找出最大的那个,如果超过阈值(比如3.0),就判定为坏数据,从量测集合里剔除后重新估计。实测下来,加一层坏数据检测后,σ = 5% 场景下的性能提升非常明显,尤其是分支末端节点的估计精度改善显著。

7. 常见问题与避坑经验

7.1 不收敛:低压网络的初值陷阱

这是整个项目里我踩得最深的一个坑。低压径向网络如果从平启动(所有节点电压设为1.0 pu,相角设为0)开始迭代,在高R/X比条件下很容易出现前三步迭代振荡,状态修正量不单调减小,甚至直接发散。

解决办法有两个方向。第一,改用确定性潮流的解做初始值,先跑一次前推回代潮流,把潮流结果作为WLS的迭代起点,收敛速度明显提升。第二,用低精度的潮流结果做“预热”,迭代几次后再切换到WLS。实测下来,第一种方法更简单粗暴,推荐优先尝试。

7.2 权重矩阵设置不当

权重矩阵是WLS里最容易出错但最不被重视的环节。如果某个量测的 σ 设置过大,相当于在权重矩阵里把这个量测“踢出去”了,信息冗余度下降;如果 σ 设置过小,则可能让这个量测在估计里过度主导,一旦它存在粗差,整个估计结果都会被带偏。

实操原则是:σ 按仪表厂商的精度等级设置,不要为了追求更好的统计结果而人为调小某一通道的 σ。多类仪表混用不一致时,以误差更大的仪表为基准设置,宁可保守不要激进。

7.3 代码层面的几个坑

代码实现上我整理出四个高发问题,这些在文档里基本不会写:

  1. randn 的随机种子问题。如果在蒙特卡洛循环内重置随机种子,每次试验生成的误差序列会完全相同,统计结果等于对同一批样本重复计算,毫无意义。正确做法是在循环外设置一次总种子,循环内不要重置。

  2. 收敛判据用绝对阈值不可靠。状态变量的量纲不同,电压幅值接近1.0,相角可能是弧度制的零点几,绝对阈值不通用。改用相对阈值,比如 norm(dx) < 1e-6 * norm(x),更稳定。

  3. 信息矩阵奇异。出现NaN或Inf时,先检查雅可比矩阵的行列式,再看看量测是否冗余。信息矩阵奇异几乎总是量测不足或量测位置重复导致的,优先检查量测配置。

  4. 循环内打印中间变量。几千次蒙特卡洛迭代,如果每次都在命令行窗口输出当前状态或残差,光是打印输出的时间就比求解时间还长。调试时打印没问题,跑批量试验前一定要关掉。

最后补充一点关于扩展方向的建议。这个项目做完后,最有价值的改进方向有两个:把量测配置改成自适应,根据上一次估计的残差动态调整新加入的量测;或者增加坏数据检测模块,把最大归一化残差检验集成到WLS主循环里。这两个方向的代码改动都不大,但对终端性能提升非常明显。我自己在实际操作中反复体会到,这个项目的核心价值不在于实现了一个WLS,而在于把“测量误差随机性”这个抽象概念真正变成了一组可量化的统计结论。蒙特卡洛跑出来的误差分布,比任何一句“估计精度较好”都有说服力。如果你也在用Matlab复现这条路,建议先跑通 σ = 1e-6 的验证模式,再切到正常误差档位,能省掉大量排错的时间。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询