news 2026/5/1 10:31:21

复现《基于扩展(EKF)和无迹卡尔曼滤波(UKF)的电力系统动态状态估计

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
复现《基于扩展(EKF)和无迹卡尔曼滤波(UKF)的电力系统动态状态估计

【复现】:《基于扩展(EKF)和无迹卡尔曼滤波(UKF)的电力系统动态状态估计》 该程序对应文章《Power System Dynamic State Estimation Using Extended and Unscented Kalman Filters》,电力系统状态的准确估计对于提高电力系统的可靠性、弹性、安全性和稳定性具有重要意义,虽然近年来测量设备和传输技术的发展大大降低了测量和传输误差,但这些测量仍然不能完全没有测量噪声。 因此,需要对噪声测量值进行过滤,从而获得准确的电力系统运行动态。 本程序采用两种方法,分别是扩展卡尔曼滤波(EKF)和无迹卡尔曼滤波(UKF),对电力系统进行动态状态估计,以39节点系统为算例验证了方法的有效性。 注:该程序需要安装matpower插件,否则运行会报错。

在电力系统领域,准确估计系统状态对提升系统的可靠性、弹性、安全性与稳定性至关重要。尽管测量设备和传输技术不断进步,测量噪声依旧难以完全消除,所以对噪声测量值进行过滤以获取准确的电力系统运行动态就成了关键任务。今天就来聊聊如何复现基于扩展卡尔曼滤波(EKF)和无迹卡尔曼滤波(UKF)的电力系统动态状态估计。

这个程序对应的是《Power System Dynamic State Estimation Using Extended and Unscented Kalman Filters》一文。它采用EKF和UKF两种方法对电力系统进行动态状态估计,并以39节点系统为算例验证了方法的有效性。不过要注意,该程序需要安装matpower插件,不然运行会报错哦。

扩展卡尔曼滤波(EKF)

EKF是一种常用的非线性滤波方法,它通过对非线性系统进行线性化近似来实现滤波。下面我们来看一段简化的EKF代码示例(这里以Python为例,实际在电力系统应用中可能会结合更多专业库):

import numpy as np def ekf_predict(x, P, A, Q): # 预测步骤 x = np.dot(A, x) P = np.dot(np.dot(A, P), A.T) + Q return x, P def ekf_update(x, P, z, H, R): # 更新步骤 y = z - np.dot(H, x) S = np.dot(np.dot(H, P), H.T) + R K = np.dot(np.dot(P, H.T), np.linalg.inv(S)) x = x + np.dot(K, y) P = np.dot((np.eye(len(x)) - np.dot(K, H)), P) return x, P

EKF代码分析

  1. 预测步骤(ekf_predict函数)
    -x是状态向量,P是协方差矩阵,A是状态转移矩阵,Q是过程噪声协方差。
    -x = np.dot(A, x)这一步是根据状态转移矩阵A来预测新的状态向量x
    -P = np.dot(np.dot(A, P), A.T) + Q则是更新协方差矩阵P,考虑了状态转移和过程噪声的影响。
  1. 更新步骤(ekf_update函数)
    -z是测量值,H是观测矩阵,R是测量噪声协方差。
    -y = z - np.dot(H, x)计算测量残差y,即测量值与预测值的差值。
    -S = np.dot(np.dot(H, P), H.T) + R计算测量预测协方差S
    -K = np.dot(np.dot(P, H.T), np.linalg.inv(S))计算卡尔曼增益K
    -x = x + np.dot(K, y)P = np.dot((np.eye(len(x)) - np.dot(K, H)), P)分别更新状态向量x和协方差矩阵P,使估计值更接近真实值。

无迹卡尔曼滤波(UKF)

UKF则是通过采样策略来处理非线性问题,相较于EKF,它对非线性系统的处理更为直接和准确。以下是UKF的简化代码示例:

def ukf_predict(x, P, Q, A, Wm, Wc, alpha, beta, kappa): n = len(x) L = n + kappa X = np.zeros((n, 2 * L)) X[:, 0] = x sqrt_P = np.linalg.cholesky(P * (alpha ** 2) * (n + kappa)) for i in range(n): X[:, i + 1] = x + sqrt_P[:, i] X[:, i + 1 + n] = x - sqrt_P[:, i] x_hat = np.zeros(n) P_hat = np.zeros((n, n)) for i in range(2 * L): x_hat = x_hat + Wm[i] * np.dot(A, X[:, i]) for i in range(2 * L): x_diff = np.dot(A, X[:, i]) - x_hat P_hat = P_hat + Wc[i] * np.outer(x_diff, x_diff) P_hat = P_hat + Q return x_hat, P_hat def ukf_update(x, P, z, H, R, Wm, Wc, X): n = len(x) L = len(X[0]) z_hat = np.zeros(len(z)) for i in range(L): z_hat = z_hat + Wm[i] * np.dot(H, X[:, i]) Pzz = np.zeros((len(z), len(z))) Pxz = np.zeros((n, len(z))) for i in range(L): z_diff = np.dot(H, X[:, i]) - z_hat x_diff = X[:, i] - x Pzz = Pzz + Wc[i] * np.outer(z_diff, z_diff) Pxz = Pxz + Wc[i] * np.outer(x_diff, z_diff) Pzz = Pzz + R K = np.dot(Pxz, np.linalg.inv(Pzz)) x = x + np.dot(K, (z - z_hat)) P = P - np.dot(np.dot(K, Pzz), K.T) return x, P

UKF代码分析

  1. 预测步骤(ukfpredict函数)
    - 首先根据状态向量x和协方差矩阵P生成Sigma点集X
    - 通过加权求和计算预测状态x
    hat和预测协方差P_hat,同时考虑了过程噪声Q
    -WmWc分别是均值和协方差的权重,alphabetakappa是UKF的参数,用于调整Sigma点的分布。
  1. 更新步骤(ukfupdate函数)
    - 计算预测测量值z
    hat以及测量预测协方差Pzz和状态与测量的互协方差Pxz
    - 根据这些计算卡尔曼增益K,进而更新状态向量x和协方差矩阵P

在实际的电力系统动态状态估计中,将这些滤波方法应用到39节点系统模型,并结合matpower插件提供的电力系统数据和分析工具,就能验证方法的有效性。希望通过以上的介绍和代码分析,能帮助大家更好地理解和复现基于EKF和UKF的电力系统动态状态估计。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 21:30:51

vue基于Spring Boot的婚纱摄影预约管理系统的应用和研究_67mf5ryg

目录具体实现截图项目介绍论文大纲核心代码部分展示项目运行指导结论源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作具体实现截图 本系统(程序源码数据库调试部署讲解)同时还支持java、ThinkPHP、Node.js、Spring B…

作者头像 李华
网站建设 2026/5/1 9:41:55

数据资产平台(数据血缘、数据资产地图)技术框架图

数据资产平台(数据血缘、数据资产地图)技术框架图,如下所示:其中的重点和难点,是SQL解析器的实现,SQLReader是一款专门针对数据血缘解析设计开发的SQL解析器。

作者头像 李华
网站建设 2026/5/1 8:38:51

-希尔排序

并非希儿排序()其实是分组的插入排序,通过分组让元素实现跳跃式移动,减少逆序对数量。一、算法步骤1. 确定增量序列(Gap Sequence)选择递减的增量序列:gap₁ > gap₂ > ... > gapₖ 1…

作者头像 李华
网站建设 2026/4/25 12:06:56

基于Java的安全生产视频监控智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ?安全生产视频监控智慧管理系统旨在通过先进的技术手段,提升企业安全管理效率与水平。该系统摒弃了传统的单一摄像头监控模式,引入会员、设备及事件管理等多层次功能模块,提供全方位的安全保障服务。相比以…

作者头像 李华
网站建设 2026/5/1 9:57:11

Flink源码阅读:如何生成StreamGraph

Flink 中有四种执行图,分别是 StreamGraph、JobGraph、ExecutionGraph 和 Physical Graph。今天我们来看下我们编写的 Flink 程序代码是如何生成 StreamGraph 的。 在开始读代码之前,我们先来简单介绍一下四种图之间的关系和区别。StreamGraph 是根据用户…

作者头像 李华