1. 项目概述:为什么低压配电网需要状态估计,又为什么选WLS
1.1 低压台区的“盲调”困境
绝大部分做配电网的人都有同感:中压10kV有调度自动化、有SCADA、有故障指示器,可在0.4kV低压侧基本属于“盲调”状态。变压器出口装一块总表,最多再装几个分支监测终端,再往下的用户侧情况基本靠“用户报修+人工巡检”。不是不想测,而是低压网络节点数量太大、单点投资预算极低,不可能像输电网那样铺满量测终端。
于是问题就来了:明明台区变压器出口的电压、电流、功率都测得挺准,可到了线路末端,电压到底掉到多少?三相不平衡有多严重?哪条分支线损最高?这些信息其实是不完整的。更麻烦的是单相接地这类故障,低压侧单相接地不像中压那样有完善的选线装置,很多时候要拿着钳形电流表一段一段找。
这个项目做的事情,说起来很直白:在一条典型的径向低压测试馈线上,用WLS加权最小二乘状态估计器,把手头有限的测量数据(电压幅值、支路功率、注入功率等)融合起来,估算出整条馈线每个节点的电压幅值和相角。因为测量误差是随机性的,单个样本的估计结果说明不了问题,所以整个性能评估用蒙特卡洛方式跑大量随机场景,统计状态估计器的偏差和方差表现,最终评估这套监测方案到底可不可靠。配套的Matlab代码把整条链路打通,从网络建模、量测生成、WLS迭代到蒙特卡洛统计,全部可以复现。
1.2 技术选型的三个关键决策
先解释三个关键决策,每个都对应一个“为什么”。
第一,为什么选WLS而不是更时髦的AI方法?低压配电网可观测性差、量测冗余度低,但状态估计的物理模型是清晰的——节点电压和量测量之间的关系就是潮流方程。WLS作为经典估计器,不依赖训练数据,可解释性强,在量测冗余度勉强够用的时候,结果稳定且实现成本低。对低压这种测量点稀疏的场景,先看经典线性估计器的上限,比一上来就用黑箱模型更靠谱。
第二,为什么要在径向低压测试馈线上做?低压配电网绝大多数是放射状结构,几乎没有环网。径向拓扑让潮流计算可以沿用经典的前推回代法,不需要求解完整牛拉法的大规模稀疏矩阵。WLS迭代中用到的雅可比矩阵,也因此有了明确的解析表达式,代码实现起来清晰可控。
第三,为什么用蒙特卡洛?因为测量误差是随机变量,某一次仿真得到一个估计结果,只能说明“这次运气好不好”。蒙特卡洛的核心价值在于:把测量误差按指定的协方差矩阵反复抽样,跑几百上千次独立的估计,最后统计误差均值、均方根误差RMSE、最大误差等指标,才能客观回答“这套监测方案在统计意义上到底能不能用”。这个思路跟硬件在环测试、可靠性试验是一脉相承的。
2. WLS状态估计原理与低压电网的适配处理
2.1 WLS核心数学模型
WLS状态估计的目标,用一句话概括就是:找一组状态变量x(通常是各节点电压幅值和相角),让量测残差的加权平方和最小。量测方程写作:
z = h(x) + e
其中z是量测向量,h(x)是量测函数(由潮流方程推导),e是零均值高斯测量噪声,协方差矩阵为R。加权矩阵取W = R⁻¹,这样精度越高的表计权重越大。目标函数为:
J(x) = min [z - h(x)]ᵀ W [z - h(x)]
求解这个非线性最小二乘问题,标准做法是高斯-牛顿迭代。令H为量测雅可比矩阵,迭代修正量为:
Δx = (HᵀWH)⁻¹ HᵀW [z - h(x)]
每一步状态变量更新为x = x + Δx,直到修正量满足收敛条件(通常取max|Δx| < 1e-6)。增益矩阵G = HᵀWH在迭代中反复更新,直到收敛。
这个公式本身在输电网有成熟应用,但搬到低压配电网有两个坑。第一个坑是低压线路的R/X比值很高,输电网常用的“忽略电阻、只保留电抗”简化完全不成立,雅可比矩阵里电阻项必须完整保留。第二个坑是低压系统三相不平衡严重,严格说应该用三相模型,但做单相等效或只研究单相接地工况时,可以先把网络简化为单相径向模型,把问题的核心聚焦在估计器本身。
2.2 量测配置与可视性分析
做状态估计之前,必须回答一个前置问题:现有的量测配置够不够让状态变量可估计。低压馈线的典型量测配置大概是这样的:
- 馈线入口(变压器低压侧出口):电压幅值、三相有功、无功,精度较高,相当于“准PMU”性质的参考点;
- 主干线路中间节点或分支点:少量的电压幅值和支路功率量测,可能来自智能配变终端或分支监测单元;
- 用户侧:智能电表可以提供电量数据,但采集周期长、时间同步性差,本项目第一阶段不把它当作实时量测参与估计。
要支撑一条有n个节点的径向馈线状态估计,至少需要n个或以上独立量测才谈得上可观测。入口处的电压幅值固定了参考节点的幅值,还需要设置一个参考相角(通常取根节点相角为0)。其他节点则靠功率和电压量测的组合来约束。实际调试中最容易犯的错是:量测数刚刚够,但空间分布不合理,导致雅可比矩阵条件数极大,迭代收敛后结果飘得离谱。
2.3 测量误差建模与权重设定的细节
测量误差建模直接决定蒙特卡洛结果的可信度。常见的经验取值是:电压幅值误差标准差0.5%~1%,功率量测误差标准差1%~3%。误差按高斯分布生成,也就是在真值上叠加一个均值为零、标准差为指定值的随机数。
权重矩阵的做法是:W = R⁻¹,R是对角阵(假设各量测独立),对角元素取σ²。这里有个容易忽略的细节:如果不同量测的误差标准差用百分比表示,那么功率量测的方差是“真值百分比”的平方,它与电压量测的方差在数值上可能差几个数量级,这会直接影响增益矩阵的条件数。我的做法是在进入WLS迭代前,对量测向量和量测函数做归一化处理,把各量测量纲拉回到同一数量级,迭代数值稳定很多。
另外,实际运行时可能有个别表计故障产生坏数据。WLS对坏数据没有鲁棒性,一个错误值就能把估计结果整体带偏。在蒙特卡洛框架里,我没有把坏数据场景纳入本轮分析,但在工程化的时候,建议在WLS前加一步残差检测,用标准化的残差阈值把离群量测剔除,否则现场数据根本没法直接用。
3. Matlab仿真架构与代码实现要点
3.1 代码模块划分与整体流程
整个仿真程序我按功能拆成五个模块,每个模块一个函数文件,主干脚本只负责串联和统计。这样做的最大好处是调试效率高:量测生成写错了,只需要改量测模块,不用动WLS迭代;潮流函数有问题,可以单独用一个已知结果的小网络验证。
五个模块分别是:
- 网络参数定义脚本:线路阻抗、节点负荷、拓扑连接关系;
- 潮流计算函数:给定各节点负荷和根节点电压,用前推回代求全网真实状态;
- 量测生成函数:在真实状态基础上叠加高斯噪声,生成一组带误差的量测数据;
- WLS估计函数:输入量测、权重和网络参数,迭代求解状态估计值;
- 蒙特卡洛主脚本:循环调用量测生成和WLS估计,汇总统计指标并绘图。
主循环的框架大致如下:
% 蒙特卡洛主循环 N_mc = 500; % 蒙特卡洛样本数 err_u = zeros(N_mc, num_node); % 电压幅值误差存储 err_theta = zeros(N_mc, num_node); % 相角误差存储 for k = 1:N_mc z_meas = generate_measurements(x_true, R); % 生成带噪声的量测 x_est = wls_estimator(z_meas, W, network); % WLS估计 err_u(k, :) = abs(x_est(:,1)) - abs(x_true(:,1)); err_theta(k, :) = x_est(:,2) - x_true(:,2); end % 统计指标 rmse_u = sqrt(mean(err_u.^2, 1)); mean_err_u = mean(err_u, 1);3.2 前推回代潮流计算:低压径向网的基础
既然测试馈线是径向结构,潮流计算我用了前推回代法,而不是通用的牛顿拉夫逊法。原理并不复杂:从末端节点开始,已知各节点负荷功率,向根节点方向回推计算各支路流过的功率;再从根节点出发,已知根节点电压,向前推算出各节点电压。迭代两到三次就能收敛到高精度。
核心函数的核心循环大致这样:
% 回代:从末端到根,累加支路功率 for i = num_branch:-1:1 child = branch(i, 2); parent = branch(i, 1); S_child = sum_child_power(child); % 该节点及其下游所有负荷功率 S_branch(i) = S_child; end % 前推:从根到末端,计算节点电压 for i = 1:num_branch parent = branch(i, 1); child = branch(i, 2); dV = (R(i) * P_branch(i) + X(i) * Q_branch(i)) / V(parent); V(child) = V(parent) - dV; end前推回代法的好处是直观、稳定、迭代次数少,特别适合低压径向网。缺点是没法直接处理环网,好在低压配电网的常规拓扑基本不用考虑环网。如果后续要扩展到多电源或合环运行,才需要考虑换成牛拉法或潮流注入法。
3.3 WLS迭代核心:雅可比矩阵与增益矩阵的组装
WLS迭代的核心难点在于量测雅可比矩阵的推导和组装。对于径向低压馈线,如果选每个节点的电压幅值V和相角θ作为状态量,那么量测方程分三类:
- 电压幅值量测:h = V_j,雅可比行向量在该节点对应位置为1,其他地方为0;
- 支路功率量测:牵扯到支路两端节点电压和相角,雅可比元素需要求导;
- 节点注入功率量测:涉及该节点及与其相连的所有支路功率对状态量的偏导。
写成代码时,逐条量测计算雅可比行向量然后拼装:
function [h, H] = measurement_function(x, network, meas_spec) H = zeros(num_meas, num_state); h = zeros(num_meas, 1); for m = 1:num_meas type = meas_spec(m).type; % 'V' 或 'P_branch' 或 'Q_branch' switch type case 'V' h(m) = x(meas_spec(m).node); H(m, meas_spec(m).node) = 1; case 'P_branch' [h(m), H(m,:)] = branch_p_meas(x, network, meas_spec(m).branch); otherwise error('Unknown measurement type'); end end end迭代循环里,最关键的是解线性方程这一步。增益矩阵G = HᵀWH可能维度不大,但条件数可能很差。我建议不要用inv(G)显式求逆,而是用左除运算dx = G \ rhs,Matlab会选用最合适的稀疏求解器,数值稳定性好很多。
3.4 量测生成函数:蒙特卡洛误差注入的实现
量测生成函数本身不复杂,注意的点全在细节上。生成带噪声的量测时,不要让噪声标准差用“真值的百分比”直接乘,然后叠加上去,如果某个节点功率接近零,那个量测的噪声可能变成负值甚至超过真值本身,这在物理上不合理。更稳的做法是:设定一个最小功率门槛,低于该门槛的量测噪声标准差取该门槛对应值。
另外,所有量测必须加在“真实潮流解”上。先跑一次前推回代,得到无噪声的全网真实状态,然后在这个真值上叠加高斯噪声。这个流程保证了蒙特卡洛中“真值”是已知的,才能计算估计误差。实际现场拿不到真值,但仿真平台必须自己造真值,否则无从判断估计器好坏。
4. 性能评估指标与典型仿真结果解读
4.1 评估指标体系怎么定
状态估计性能不能只盯一个指标。我的评估体系分成三个维度:
- 估计精度:衡量估计值离真值有多近。用电压幅值估计的最大绝对误差、平均绝对误差、均方根误差RMSE三类指标;
- 估计稳定性:衡量多次蒙特卡洛实验中结果的离散程度。用电压估计误差的标准差来表示,标准差越大说明估计器对误差越敏感;
- 收敛可靠性:统计全部蒙特卡洛样本中WLS迭代收敛的比例。收敛率低于90%说明算法数值稳定性有问题,或者量测配置不达标。
表格式地看,大概是这样的维度:
| 维度 | 常用指标 | 预期目标 |
|---|---|---|
| 精度 | 电压幅值RMSE、最大误差 | 幅值误差不超过0.5%~1% |
| 稳定性 | 误差标准差 | 标准差比量测误差低一个量级 |
| 可靠性 | 收敛率、迭代次数 | 收敛率>98%,平均迭代次数<20 |
4.2 不同量测误差水平下的性能变化
我在仿真里设置了三组量测误差水平:高精度组(电压0.3%,功率1%)、中精度组(电压0.5%,功率2%)、低精度组(电压1%,功率3%)。蒙特卡洛500次,每组跑一遍。结果趋势很明显:估计误差和量测误差基本呈线性关系,量测误差降低一半,估计RMSE也大约降低一半。这个结论在理论上是符合WLS性质的——量测权重本身就是按误差协方差设定的,误差越小权重越大,对最终估计的贡献占比越高。
更值得注意的现象是:即便在最差的低精度组,馈线末端的电压幅值估计RMSE也能控制在0.8%左右,而入口电压量测误差已经达到1%。这表示WLS把冗余量测融合之后,确实起到了“平滑噪声”的效果。但如果量测冗余度不足,这个优势会迅速消失。
4.3 量测冗余度对估计性能的影响
量测冗余度指的是量测数量与状态变量数量之差。理论上冗余度越高,WLS平滑噪声能力越强。实际仿真里我做了个对比:仅入口量测加上末端电压量测(相当于冗余度只有1~2)与增加三处分力量测后的效果相比,电压幅值RMSE从1.2%降到0.4%左右,改善非常显著。
这说明一个工程上很重要的问题:与其追求单个量测的高精度,不如多布几个中精度的量测点,冗余度的提升对WLS性能的影响比单表精度提升更明显。在预算有限的情况下,把资金花在增加监测点数量上,往往比买更贵的仪表更划算。
4.4 典型结果示例与参数化解读
以一条包含11个节点、10条支路的典型低压径向馈线为例,根节点电压设定为1.0pu(即400V/400V),末端负荷按典型居民台区分布设置。中精度组跑500次蒙特卡洛,得到的结果是:
- 所有节点电压幅值估计的RMSE均在0.45%到0.6%之间;
- 电压相角估计RMSE在0.1度到0.3度之间,越靠近末端误差越大;
- 最大单次估计误差出现在末端节点,约为1.1%,但这种情况出现的概率不到3%。
这说明整套方案在测量误差随机波动情况下,估计性能是稳定可靠的。单次估计可能偶尔偏大,但蒙特卡洛统计上的表现完全满足低压监测的需求。
5. 实操中踩过的坑与调参技巧
5.1 WLS迭代不收敛的常见原因
我在调试过程中遇到最多的问题是迭代发散或震荡。归纳起来原因有三类。
第一类是初值太差。虽然WLS是全局收敛性较好的算法,但初值离谱时高斯牛顿步长可能过大。解决方法是:用平启动初值,所有节点电压幅值取根节点电压值,相角取0度;也可以先用一次前推回代潮流结果作为初值。这样做之后,绝大多数情况下迭代都能在15次以内收敛。
第二类是权重设置跨量级。电压量测残差在0.001量级,功率量测残差在0.01量级,权重倒过来差别很大,增益矩阵数值不平衡。解决方法是做归一化,或者把状态变量从有名值改为标幺值。标幺值处理之后,雅可比矩阵元素量级更接近,收敛速度明显提升。
第三类是量测函数存在奇异点。某些特殊工况下雅可比矩阵接近奇异,导致迭代步长异常。遇到这种情况,我一般检查负荷是否有零值节点,或者量测是否出现冗余配置完全相同的两条表计。这类情况通过人工审查量测配置就能发现。
5.2 增益矩阵奇异与病态问题的排查
WLS迭代中G = HᵀWH如果奇异,直接左除会报错或给出巨大数值。排查思路是看量测配置的几何分布。径向馈线有一个典型风险:如果只在馈线入口装了高精度量测,其他所有量测都集中在某一条分支上,那么其他可用分支的状态变量实际上没有量测约束,G矩阵必然病态。
我的排查技巧是:在进入蒙特卡洛大循环之前,先跑单次WLS,检查G矩阵的条件数。如果cond(G)超过1e8,直接判定当前量测配置不合格,重新设计量测方案再做蒙特卡洛。不要让几百次仿真白白浪费算力去统计一个本就不合理的方案。
5.3 蒙特卡洛样本数的选择
蒙特卡洛样本数不是越大越好。样本数太小,统计指标的波动很大;样本数太大,算力开销大。我做了个收敛性测试:同一量测配置下分别跑50、100、200、500、1000次,发现样本数超过200之后,电压幅值RMSE的估计值基本稳定在0.02%以内,继续增加样本意义不大。
实操建议是:先用100次样本做快速摸底测试,如果收敛率和RMSE指标明显偏离预期,先排查代码和量测配置;确认稳定后再跑500次出正式统计结果,兼顾计算效率和数据可靠度。在普通台式机上,11节点的网络跑500次WLS大约只需要一两分钟,完全不需要GPU加速。
5.4 代码调试与验证的建议
写WLS代码最容易出的问题不是迭代本身,而是量测雅可比矩阵推导错误,验算无误但结果对不上。我强烈建议用一个极简的三节点网络先做基准测试:在三条支路上各自设置已知负荷,手算一组潮流结果和雅可比矩阵,然后用代码跑一遍核对。这种基准测试脚本建议保留下来,每次修改代码后都跑一遍回归。
另外一个实用技巧是在Matlab中把每次迭代的状态量、残差范数打印出来,观察下降趋势。正常情况下残差范数应该单调下降或小幅震荡后下降,如果某一步突然跳增,往往是雅可比矩阵某行有符号错误或者是功率方向约定不一致。
6. 后续扩展方向与真正的工程化问题
6.1 单相模型升级到三相不平衡模型
当前方案用单相等效模型解决了“径向馈线WLS估计能不能成立”的问题,但低压配电网真正的复杂度在于三相不平衡。同一根电杆下的三户人家,负荷差异可能非常大,三相电流不平衡导致中性线电流和零序电压问题,单相模型没法刻画。
如果需要扩展,建议把状态变量从单相电压相量扩展为三相电压相量,每节点三个电压幅值和三个相角,量测方程也要按三相分别建模。前推回代法在三相模型下需要升级为三相前推回代,支路潮流和电压降落公式都要改成考虑互阻抗的矩阵形式。代码量会增加不少,但总体的蒙特卡洛框架不需要改动。
6.2 与AMI高级量测体系的数据融合
当前方案只用了配电自动化层面的量测,没有把智能电表的海量数据纳入进来。实际工程中,智能电表数据虽然时间同步性差、精度参差不齐,但胜在数量庞大,每户都有。如果把电表历史电量数据转换成准实时注入功率,作为伪量测加入WLS,可以显著提升可观测性,尤其是分支末端的状态估计能力。
难点在于伪量测的方差怎么定。我的经验是先做一段历史数据比对,统计电表电量换算成功率与真实功率之间的偏差分布,然后把这个经验方差作为伪量测权重。这样处理以后,末端节点电压估计精度能有明显提高。
6.3 从仿真到现场部署的差距
仿真跑通只是第一步。真正去现场部署时,还会遇到时间同步不一致、通信丢包、数据缺失、坏数据等问题。建议在仿真平台里增加一个“数据质量模拟”模块,随机丢包、随机延时、随机坏数据,再来评估WLS的鲁棒性,这样的测试结果才更接近现场。
我个人这段实操下来,最大的体会是:状态估计算法本身是成熟的,难点从来不在公式推导,而在量测配置的合理性和数值实现的细节。很多人一上来就钻到WLS公式推导里,其实先花时间把量测误差建模和蒙特卡洛统计框架搭好,反而能更早发现系统性的问题。这个项目的代码框架留好了扩展口,后续无论是接三相模型、接AMI数据,还是换更鲁棒的估计器,都可以在不推翻现有结构的前提下进行。