搞电力系统状态估计的同学应该都体会过这种抓狂:SCADA 上来一批量测数据,里面混了两三个坏数据,你手里那套经典的加权最小二乘(WLS)估计程序直接开始表演——要么残差一堆超限,要么眼看着几条母线电压偏到姥姥家去。你反复检查量测配置、核对拓扑,最后才发现是遥测里混进了一个离谱的注入功率。
这个坑我踩过不止一次。后来我把目光转向鲁棒估计,做了这个基于投影统计的鲁棒 GM 估计器(Matlab 代码实现)项目。它的核心价值一句话就能说清:在量测数据里混入不良数据、甚至出现杠杆点的情况下,依然能给出不受污染影响的状态估计结果。整套代码基于 Matlab 编写,直接对 IEEE 标准测试系统(14 节点、30 节点均可)做仿真验证,我自己实测下来效果相当稳。下面我把这套东西从原理到代码实现、再到调参踩坑的过程,完整拆开讲一遍。
1. 项目背景:为什么传统状态估计这么“脆”
先说清楚我们面对的问题。电力系统状态估计本质上是一个加权最小二乘问题:给定量测向量 z(节点电压幅值、节点注入有功无功、支路潮流等),寻找状态向量 x(通常是各节点电压幅值和相角),使得目标函数最小。
[
J(x) = [z - h(x)]^T R^{-1} [z - h(x)]
]
其中 R 是量测误差协方差矩阵,h(x) 是量测函数。求解时一般用高斯-牛顿法迭代,每一步解一个正规方程:
[
G \Delta x = H^T R^{-1} [z - h(x)]
]
这里的 G = H^T R^{-1} H 是信息矩阵,H 是雅可比矩阵。WLS 估计器在量测误差服从正态分布、且没有粗差的情况下是最优线性无偏估计,这也是它在 EMS 里长期占据主导地位的原因。
1.1 一个坏数据就能击穿 WLS
问题在于“正态分布”这个前提太理想了。实际 SCADA 数据里,遥测链路抖动、变送器故障、通信误码、甚至开关变位瞬间的异常采样,都会产生偏离真实值几个数量级的粗差。这些粗差在 WLS 的平方目标函数里会被“放大”——残差大的点影响力呈平方级上升,一个严重坏数据就能把估计结果拉出很远,而且它会通过信息矩阵的耦合扩散到周围节点,导致污染区域扩大。
说句扎心的话,我刚接触状态估计那会儿,天真地以为有了“坏数据检测”环节就万事大吉:先跑一遍 WLS,算残差,用最大正则化残差检验(LNR)或卡方检验挑出可疑数据,剔除后重新估计。这套方法对付单个、孤立的坏数据尚可,但一旦坏数据比例上去、或者出现相互作用掩盖,检测环节基本失灵。
1.2 杠杆点:比坏数据更麻烦的存在
比普通坏数据更难搞的是杠杆点。所谓杠杆点,是指量测在回归空间中处于极端位置的点——它本身可能不是一个“坏值”,但它的存在会对估计结果产生不成比例的影响。在电力系统里,典型场景是:一条阻抗很低的短线路两端的有功潮流量测、或者大电厂出线的高精度注入量测,这类量测对应的雅可比矩阵行向量与其它量测差异很大,在帽子矩阵(hat matrix)里对应的对角元很大。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心原理:投影统计和 GM 估计器到底在做什么
既然 WLS 不抗粗差,那自然想到用 M 估计器,把二次目标函数换成增长更慢的鲁棒函数 ρ(·),比如 Huber 函数:
[
J(x) = \sum_{i=1}^{m} \rho(r_i / s)
]
其中 r_i 是第 i 个量测的残差,s 是残差尺度估计。M 估计器的优势在于限制了单个大残差的贡献,但它对杠杆点仍然无能为力——因为它只看残差大小,不看量测在空间中的位置。这就引入了两个关键概念:投影统计(Projection Statistics)和 GM 估计器。
2.1 投影统计:给每个量测的“位置异常程度”打分
投影统计的思想非常直观:既然杠杆点的特征是在量测空间中离群体太远,那就想办法量化这个“远”。对每个量测点 (z_i),考虑它在所有可能方向上的投影,找到偏离中位数最大的那个方向,用这个最大偏离程度作为该点是否为杠杆点的度量。
[
PS_i = \max_{|v|=1} \frac{|z_i^T v - \text{med}_j(z_j^T v)|}{1.4826 \cdot \text{MAD}_j(z_j^T v)}
]
这里 med 是中位数,MAD 是中位数绝对偏差。分母里的 1.4826 是修正系数,目的是让 MAD 在正态分布下成为标准差的一致估计量——这样 PS_i 就大致具有“标准化距离”的含义,PS 值越大,意味着这个量测点越像杠杆点。
这里你可能会问:为什么不直接用均值 μ 和标准差 σ 来标准化,而非要用中位数和 MAD?原因很简单:均值和标准差本身对粗差敏感。一个杠杆点会把均值拉过去,把标准差拉大,结
