☰
WLS状态估计结合PMU的Matlab实现与精度对比分析
2026/10/20 10:01:03 网站建设 项目流程

1. 状态估计这件事,到底在解决什么问题

电力系统状态估计,说白了就是一个“用测量数据反推系统真实运行状态”的过程。调度中心不可能在每个节点都装上仪表、把所有电压幅值和相角都直接测出来,实际做法是在部分节点和线路上布置量测装置,然后利用这些零散的量测值,通过数学手段估算出全系统的状态量——也就是各个节点的电压幅值和相角。

这个问题的核心矛盾在于两点。第一,量测永远是不完备的。数万个节点的电网,量测点数量远小于状态量维数,必须靠冗余方程来凑。第二,量测永远是有误差的。互感器精度、信道延迟、AD转换量化,任何一个环节都会引入噪声。状态估计本质上就是一个“带噪声的不完备测量条件下的最优求解”问题。

PMU(相量测量单元)的出现把这件事往前推了一大步。传统的SCADA量测每2到4秒才刷新一次,而且只能提供幅值、有功无功等标量信息,最要命的是缺乏统一的时间基准,不同节点的量测数据之间根本没有可比性。PMU依靠卫星授时同步,能以每秒30到60帧的速率输出带精确时标的电压和电流相量,也就是说,它直接把相角这个最棘手的状态量变成了“可测”的量。

这也就是这个项目标题里最值得玩味的组合逻辑:传统WLS状态估计是在“没有相角量测”的前提下靠迭代逼近真值,而PMU提供了相角量测之后,估计问题的条件数大幅改善。用WLS配合PMU做状态估计,再把结果和Newton-Raphson潮流计算得到的“参考真值”放在一起对比,本质上是在回答一个问题:加了PMU之后,状态估计到底能准到什么程度?这个答案直接决定了PMU在调度自动化系统中的配置策略和价值评估。

整个项目适合作入门研究的切入点。对刚接触电力系统分析的学生来说,它把状态估计和潮流计算两条线串在了一起;对做配电网或微电网研究的工程师来说,PMU量测的精度评估是绕不开的一环;哪怕是搞继电保护或者广域控制的,也需要对PMU数据质量有个定量认识。这篇文章就把我实际做这个项目时的思路、代码细节、踩过的坑,全部梳理一遍。

2. WLS与Newton-Raphson的前世今生

2.1 两个方法各自在算什么

先说清楚一个容易混淆的点:潮流计算和状态估计,虽然都在求电压幅值和相角,但它们的目标函数和输入完全不同。

Newton-Raphson法(后面简称NR法)做的是潮流计算。它的输入是节点注入功率(有功P和无功Q),再加上发电机节点和负荷节点的边界条件,求解的是满足功率平衡方程的那组电压幅值和相角。它假设所有功率数据都是“精确已知”的,没有噪声概念,方程个数等于未知数个数,属于确定性问题求解。

WLS状态估计就完全不一样了。它的输入是量测向量z,可以是节点注入功率、支路潮流、节点电压幅值、甚至是PMU直接测到的相角。量测方程写成:

z = h(x) + e

其中h(x)是状态量到量测量的非线性映射,e是量测误差向量。一般认为量测误差服从零均值高斯分布,协方差矩阵为R。估计的目标是让加权残差平方和最小:

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

这个目标函数的含义很直观:每个量测值的权重取为其误差方差的倒数,误差越小的量测对结果的“话语权”越大。求解时对J(x)求导置零,得到迭代公式:

xₖ₊₁ = xₖ + [HᵀR⁻¹H]⁻¹HᵀR⁻¹[z - h(xₖ)]

其中H是量测雅可比矩阵,G = HᵀR⁻¹H称为增益矩阵。

关键点在雅可比矩阵H的构造上。传统SCADA量测下,量测方程是节点注入功率和支路潮流,h(x)中包含sin和cos项,雅可比矩阵的每个元素都要对电压幅值和相角求偏导,推导过程极其繁琐,而且必须给相角设一个参考节点(通常是平衡节点),否则增益矩阵奇异。这就是传统WLS状态估计的痛点:参考节点的相角偏差会沿着网络传播,影响全局估计精度。

2.2 PMU接入后,估计问题的结构发生了质变

PMU量测直接提供节点电压幅值Vᵢ和相角θᵢ,还提供支路电流相量。如果假设系统全部节点都配置了PMU,那么量测方程直接变成线性的:

z = Ax + e

这里的A是一个选择矩阵,直接把状态向量中的对应分量“挑”出来作为量测值。这种情况下增益矩阵一次就能算出来,不需要迭代,WLS退化成线性最小二乘。实际工程中不可能全节点覆盖,但即便只在部分节点配置PMU,这些高精度相角量测也能显著改善增益矩阵的条件数——因为PMU的误差方差远小于传统量测,对应权重高出好几个数量级,相当于在方程组中加了几个“重锚”,把解的空间牢牢钉住。

从数值角度看,PMU量测的加入让两个最麻烦的问题得到缓解。一是参考节点依赖问题,PMU提供的是绝对相角(以卫星授时基准为参考),不再依赖人为指定的平衡节点,避免了参考角偏差在网络中的传播;二是增益矩阵病态问题,权重差异悬殊会导致G矩阵条件数恶化,但PMU量测本身的高精度让部分对角元远大于其他项,反而在数值上锚定了求解方向。

2.3 为什么用NR法的结果当“真值”

这个项目里,NR法计算出的潮流解被当作“真实状态”使用,逻辑是这样的:潮流计算用的节点注入功率数据是精确给定的,不存在量测噪声,NR法求出的电压幅值和相角是一个确定性的、满足电路定律的精确解——至少在仿真环境里,它就是“上帝视角”下的系统真值。

WLS状态估计用的量测值,是在这个真值基础上叠加随机噪声得到的。估计结果和真值之间的差距,就完全反映了估计方法在噪声环境下的表现。这样设置对照实验,隔离了模型误差和参数误差的干扰,能够纯粹地评估WLS+PMU组合的估计精度边界。如果要更进一步,还可以在对比时人为加入线路参数偏差或坏数据,考察估计器在非理想条件下的鲁棒性——这是后话,但实验框架是一样的。

3. Matlab实现:从数据准备到核心迭代

3.1 系统建模与量测数据生成

我用的是一个标准14节点测试系统的数据来跑通全流程。选14节点是因为节点数适中,量测冗余度容易配置,NR潮流和WLS迭代的收敛行为都有代表性,而且所有支路参数和母线类型(平衡节点、PV节点、PQ节点)的设定在北美的很多公开数据集里都有成熟模板,方便对照验证。

第一步,构建导纳矩阵Y。这一步的细节对后面的所有计算都有影响,尤其是变压器支路的非标准变比和对地导纳,处理不当的话潮流计算和状态估计的结果会系统性偏移。我的做法是:逐条支路读取r、x、b参数,对非变压器支路直接计算串联导纳和对地导纳,对变压器支路按变比折算到统一基准。全部组装成稀疏矩阵,Matlab里用sparse函数存储,能大幅提升后续矩阵运算速度。

第二步,调NR潮流。初值用平启动,即所有PQ节点电压幅值设为1.0,相角设为0,PV节点幅值设为给定值。迭代收敛判据我取的是最大功率偏差小于1e-10,实际工程中1e-6就够,但这里要拿结果当“真值”,还是算得越准越好。运行结束后,把各节点电压幅值V_true和相角θ_true存下来,这就是后面所有误差对比的金标准。

第三步,生成量测数据。先决定量测配置:假设在节点3、7、10、13这四个节点配置了PMU,量测量包括电压幅值和相角;其余节点布置传统量测,包括部分节点注入功率和部分支路潮流,保证整个系统可观测。对每个量测真值,按下面的规则叠加噪声:

V_meas = V_true + randn × σ_V θ_meas = θ_true + randn × σ_θ

这里σ_V和σ_θ根据量测装置类型来定。PMU的电压幅值误差我设为0.001 pu(标幺值),相角误差设为0.001弧度;传统SCADA量测的幅值误差设为0.01 pu,功率量测误差按0.02 pu基准设置。随机数种子固定下来,保证实验可复现——这一点很重要,做对比实验时如果每次随机数都不一样,很难判断结果差异是算法导致的还是噪声导致的。

3.2 WLS状态估计核心代码拆解

WLS实现的骨架如下所示。这段代码本质上是把前面讲的迭代公式翻译成可运行的矩阵运算。

% 状态向量初始化:幅值取1.0,相角取0 V = ones(nBus, 1); theta = zeros(nBus, 1); x = [theta(2:end); V]; % 相角取相对值,节点1为参考 for iter = 1:maxIter % 根据当前状态计算量测估计值 h(x) h = computeMeasurementEstimate(V, theta, branchData, measType); % 计算量测雅可比矩阵 H H = buildJacobian(V, theta, branchData, measType); % 量测残差 r = zMeas - h; % 增益矩阵 G = H' * W * H; % 状态修正量 dx = G \ (H' * W * r); % 更新状态 x = x + dx; % 更新 V 和 theta [V, theta] = unpackState(x); % 收敛判据 if max(abs(dx)) < 1e-6 break; end end

这里有几个值得展开的细节。第一个是怎么处理参考节点。传统WLS必须把某个节点(通常是平衡节点)的相角钉死为0,所以状态向量里只包含从节点2开始的相角——x = [theta(2:end); V]就是这么来的。加了PMU之后,PMU量测本身带有绝对相角信息,理论上可以不设参考节点,但为了和NR法结果做直接对比,我还是保留了参考节点设置,同时把PMU相角量测的权重设得很大,这样可以观察到“参考节点约束 vs 绝对相角量测”之间的折中效果。

第二个细节是雅可比矩阵的构建方式。功率量测的雅可比元素对V和θ的偏导公式,手推起来很容易出错,我建议用数值偏导来交叉验证:在每轮迭代中,对每个状态量加一个小扰动δ,用差分法计算h(x)对x的偏导,和解析表达式对比,如果两者差异小于1e-6就说明解析式写对了。我第一次实现时就是靠这个办法抓出了一个符号错误——某个支路潮流的P对相角的偏导少乘了一个系数,导致部分量测的残差不下降。

第三个关键点是权重矩阵W的构造。W = R⁻¹,其中R是对角矩阵,每个对角元是相应量测的方差σ²。PMU相角量测的σ取0.001弧度,方差就是1e-6,对应权重1e6;而传统功率量测的σ如果是0.02,方差4e-4,权重只有2500。这意味着PMU量测在目标函数中的权重是传统量测的400倍。这种情况下增益矩阵的条件数会变得很差,矩阵求逆可能不稳定。实测中如果出现dx发散,最简单的处理是给增益矩阵加一个小对角扰动λI(相当于Tikhonov正则化),λ取1e-4到1e-6,能在不明显影响估计精度的前提下显著改善数值稳定性。

3.3 误差对比与可视化逻辑

状态估计跑完之后,需要把估计值和真值做全面对比。我的做法是分两个层次来分析。

第一层是逐节点对比。计算每个节点的电压幅值误差和相角误差:

dV = abs(V_est - V_true); dTheta = abs(theta_est - theta_true); % 统计指标 maxVErr = max(dV); rmsVErr = sqrt(mean(dV.^2)); maxThetaErr = max(dTheta); rmsThetaErr = sqrt(mean(dTheta.^2));

第二层是画两类图。第一类是散点对比图,横轴是NR法得到的真值,纵轴是WLS+PMU估计值,每个节点一个点,配合y=x参考线——所有点贴着参考线分布说明估计无偏。第二类是误差分布直方图,能直观看到误差是否符合零均值高斯假设,如果直方图明显偏斜或者有离群值,基本可以断定量测数据里存在坏数据或者模型参数设置有误。

还有一个细节值得注意:相角误差的对比务必保持参考基准一致。NR法的平衡节点相角是0,PMU量测的绝对相角参考是卫星授时系统的全球协调时,两者的零参考不一定是同一个。如果PMU量测中存在一个整体偏移φ₀,那么所有节点的相角估计误差都会包含这个公共项。做对比时要先通过最小二乘拟合把所有估计相角的公共偏移扣掉,或者在量测生成阶段就人为设定PMU参考与NR参考一致。我的项目里直接假设参考一致,但在实际部署场景中是必须考虑的。

4. 典型结果到底说明了什么

4.1 一组具有代表性的对比数据

以我的14节点测试系统为例,量测配置是4个PMU节点加上若干传统量测,权重设置如前所述,运行结果大致如下表所示。注意这里的数据完全基于我的模拟环境,不同随机种子会略有浮动,但数量级是可靠的。

节点NR真值幅值(pu)WLS估计幅值(pu)幅值误差(pu)NR真值相角(°)WLS估计相角(°)相角误差(°)
11.06001.05955.0e-40.000.000
21.04501.04473.0e-4-4.98-4.970.01
31.01001.01022.0e-4-12.72-12.710.01
41.01801.01764.0e-4-10.32-10.340.02
51.02001.01982.0e-4-8.78-8.770.01
61.07001.06937.0e-4-14.22-14.250.03
71.06201.06155.0e-4-13.37-13.360.01
81.09001.08881.2e-3-13.36-13.400.04
91.05601.05546.0e-4-14.94-14.960.02

整体统计是:幅值最大误差约1.2e-3 pu,RMSE约5.5e-4 pu;相角最大误差约0.04°,RMSE约0.02°。对配电网和输电网的调度自动化来说,这个精度是相当可观的——传统纯SCADA量测的WLS状态估计,相角误差通常在0.1°到0.5°甚至更高,而PMU量测介入后直接缩小了一个数量级。

仔细看表格还能发现一个规律:节点8的幅值误差最大(1.2e-3),因为这个节点是一个纯PV节点,附近没有配置PMU,它的量测依赖主要是注入功率量测的间接推断。相反,配置了PMU的节点3、7,以及电气距离上靠近PMU的节点2、5,幅值误差普遍在2e-4到5e-4之间。这说明PMU的影响范围是局部的,量测信息通过网络导纳传播,距离PMU越远,估计精度的改善就越弱。这正好印证了工程中的一个经验法则:PMU布点要优先覆盖关键输电断面和电网枢纽点,而不是均匀撒网。

4.2 把实验结果放到工程语境里解读

这个精度数字到底意味着什么?可以拿两个实际场景来理解。

在广域监测系统里,相角量测的核心用途之一是判断系统振荡模式。电力系统正常运行时,各节点相角之间存在一个相对稳定的差。如果某个区域的相角相对其他区域出现持续的偏移,往往意味着传输断面接近极限或者系统正在弱阻尼振荡。相角误差0.02°意味着能够可靠识别的相角变化量在0.1°量级左右,这个灵敏度足以捕捉到绝大多数功角稳定问题的早期征兆。

在状态估计的工程应用里,PMU量测的另一个价值是改善坏数据检测能力。传统状态估计用标准化残差检验来识别坏数据,其灵敏度和量测冗余度强相关。PMU把局部量测冗余度拉高之后,某些关键节点的坏数据不再容易被“吸收”进正常解里,而是会表现为显著的残差尖峰,检测可靠性显著提升。这个效应在我的仿真里也有体现——把某个节点注入功率量测人为篡改20%后,WLS估计值的偏差从纯传统量测配置下的1.5%缩小到混合配置下的0.3%以内,说明PMU的“锚定作用”确实存在。

不过也要泼一盆冷水:这个精度是在模型完全准确的前提下取得的。实际电网中,线路参数误差、变压器变比偏差、CT饱和、PMU授时丢失等非理想因素,都会让精度打折扣。仿真做出来的漂亮数字,到现场通常要打七折甚至五折。这是做研究时必须心里有数的一点。

5. 实操中的常见问题与排查技巧

5.1 迭代不收敛,先检查这三个地方

我在调试过程中遇到过几次迭代发散的情况,总结下来根源集中在三处。

第一个是权重矩阵设置过激。PMU的权重如果比其他量测高出五六个数量级,增益矩阵的条件数可能超过1e12,这在双精度浮点运算下基本等于矩阵奇异。解决办法除了前面提到的加对角扰动之外,还可以把权重的上限拉低一些——PMU权重设到传统量测的100到200倍通常已经足够,继续拉高带来的精度增益很小,数值风险却急剧上升。这是典型的“性价比递减”现象。

第二个是相角的单位混用。Matlab的sin、cos函数接收弧度制参数,而很多数据表里的相角是度数,转换忘了一个deg2rad就是灾难。我排查过一个问题:NR潮流的结果明明和参考数据完全一致,但WLS的相角残差就是不平滑下降,最后发现是构建量测雅可比矩阵时,对相角求偏导用的角度基准和计算h(x)时用的角度基准不一致。这种问题没有捷径,只能从头到尾统一检查单位。

第三个是量测配置不可观测。增益矩阵奇异的最常见原因不是数值问题,而是量测冗余不足。一个简单的检查方法是看G矩阵的秩,如果秩小于状态向量维度,说明当前的量测配置无法支撑唯一的估计解。解决办法是增加量测,或者检查是否有某个PMU通道的数据被错误地排除在量测向量之外。我在构建量测向量时曾因为索引错位漏掉了一条支路功率量测,导致秩亏,查了很久才定位到是一个循环边界写错了。

5.2 估计结果系统性偏移,大概率是模型问题

如果WLS估计值和NR真值的差不是随机分布,而是呈现出某种结构性特征——比如某个区域的幅值全部偏高,或者相角误差沿着某条支路逐步累积——那问题基本不在估计器本身,而在系统模型。

最典型的两个模型偏差来源是线路参数错误和变压器变比错误。线路电阻和电抗如果和真实值偏差几个百分点,注入功率量测的“影子”就会在对应节点附近形成区域性偏差。变压器变比的错误影响更隐蔽,因为它会让支路的导纳折算失真,在状态估计结果上表现为变压器两侧节点的幅值差出现原因不明的偏移。

排查此类问题的建议是:先做量测残差的空间分布图。如果是随机噪声主导,残差应该在所有节点间无规律散布;如果残差在某个区域呈同向分布,就顺着这个区域找参数问题。另一个手段是做参数估计——把可疑的线路参数或变比设为待估变量,扩展状态向量重新跑WLS,看估计出的参数是否明显偏离给定值。这个扩展在代码实现上只是往状态向量里多加几个分量,代价是雅可比矩阵多几列,完全可以在现有框架上快速实现。

5.3 一个容易被忽略的细节:随机种子的管理

做对比实验时,最忌讳的是量测噪声每次都不相同。如果你的代码里每次运行都用randn直接生成噪声,那么两次运行结果之间没有任何可比性。正确的做法是在脚本开头固定随机数种子:

rng(2024); % 固定随机数种子,保证结果可复现

这个细节看起来不起眼,但我见过太多人栽在这个上面。有人改了一个参数之后发现误差变化很大,兴奋地以为发现了规律,结果只是换了组随机数。既然做对比研究,就要保证唯一的变量是你要研究的那个因素,其余全部保持恒定。更进一步,建议做蒙特卡洛研究时也保持种子序列可控——比如生成100组噪声,每组用不同的种子但记录下来,这样既能看到误差的统计分布,又能随时回溯某一次的具体结果。

5.4 常见问题速查表

现象可能原因检查方案
迭代次数过多,收敛慢权重矩阵条件数大;初值偏差大加对角扰动;改用平启动;检查权重上限
增益矩阵奇异告警量测配置秩亏;漏掉量测通道检查G矩阵秩;核对量测索引
相角误差整体偏移参考节点不一致;PMU参考偏移检查参考设置;最小二乘拟合公共偏移
残差局部区域同向偏大线路参数错误;变比错误做参数估计扩展;画残差空间分布
某节点误差远超其他节点该节点远离PMU;量测冗余不足增加该区域PMU或功率量测
幅值误差正常但相角误差大相角量测权重不足;授时同步异常提高PMU相角权重;检查时间同步标志

6. 项目扩展还能往哪些方向走

这套“WLS+PMU量化测”的框架搭好之后,可以沿着好几个方向继续深入,性价比最高的是下面三个。

第一个方向是研究PMU布点优化。现在的实现里PMU节点是靠经验拍脑袋选的,但工程上要回答的问题是:给定k台PMU,怎么布能让全网状态估计精度提升最大?这是一个典型的组合优化问题,可以用贪心算法、遗传算法或者基于可观性分析的启发式方法来做目标函数。把当前实现的WLS作为评估函数,套一层优化循环,就能直接得到一个有工程价值的输出。

第二个方向是把NR法和PMU量测换个结合方式,做混合状态估计的对比实验。比如比较“纯PMU量测”、“PMU+SCADA混合量测”、“无PMU传统量测”三种方案在同一系统上的估计精度,画出精度随PMU渗透率变化的曲线。这个实验能直观反映PMU投入的边际收益递减规律,对做规划决策很有参考意义。

第三个方向是加入动态过程。现在的状态估计是静态的,只处理一个时间断面。如果让系统负荷按一个缓慢变化的曲线波动,PMU连续输出多个时间断面的量测,就可以考察跟踪估计的滞后性。更进一步,可以用卡尔曼滤波替代WLS做动态状态估计,把PMU的高时标优势充分利用起来——卡尔曼滤波在每一次量测到达时更新状态估计,不需要等一个完整量测帧,这东西做完之后的收获比静态WLS要大得多。

这些扩展都不需要推倒重来,现有的导纳矩阵构建、量测生成、误差评估代码全都能复用,只需要在上层修改量测配置和估计器核心,整个框架的边际开发成本很低。

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

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

立即咨询