💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
基于扩展卡尔曼滤波(EKF)与无迹卡尔曼滤波(UKF)的电力系统动态状态估计研究
💥1 概述
摘要:准确估计电力系统动态对于提高电力系统的可靠性、韧性、安全性和稳定性非常重要。随着逆变器型分布式能源的不断集成,对电力系统动态的了解比以往任何时候都更为必要和关键,以实现电力系统的正确控制和运行。尽管最近测量设备和传输技术的进展极大地减小了测量和传输误差,但这些测量仍然不完全摆脱测量噪声的影响。因此,需要对嘈杂的测量进行滤波,以获得准确的电力系统运行动态。本文使用扩展卡尔曼滤波器(EKF)和无迹卡尔曼滤波器(UKF)来估计电力系统的动态状态。
关键词:扩展卡尔曼滤波(EKF)、电力系统动态状态估计、无迹卡尔曼滤波(UKF)。
基于扩展卡尔曼滤波(EKF)与无迹卡尔曼滤波(UKF)的电力系统动态状态估计研究
一、基本原理
1. 扩展卡尔曼滤波(EKF)
EKF是卡尔曼滤波在非线性系统中的扩展,通过对非线性模型进行一阶泰勒展开线性化,利用雅可比矩阵近似状态转移和观测函数。其核心步骤包括:
-
预测阶段:基于系统动力学模型预测状态向量和协方差矩阵:
-
更新阶段:结合观测值修正预测结果:
局限性:
- 一阶近似在强非线性系统中误差显著,可能导致滤波发散。
- 高维系统中雅可比矩阵计算复杂度高。
2. 无迹卡尔曼滤波(UKF)
UKF基于无迹变换(Unscented Transform, UT),通过确定性采样(Sigma点)传播状态分布,避免线性化误差。其核心步骤包括:
-
Sigma点生成:从当前状态均值和协方差中选取 2n+12n+1 个Sigma点(nn 为状态维度),通过非线性函数传播。
-
加权均值和协方差计算:
优势:
- 二阶泰勒展开精度,适用于强非线性系统。
- 无需雅可比矩阵计算,鲁棒性更强。
二、电力系统动态状态估计的主要挑战
- 模型复杂性与非线性:电力系统包含发电机、负荷等非线性元件,动态方程高度非线性且耦合。
- 数据限制:PMU(同步相量测量单元)布点固定,数据覆盖不足可能导致状态不可观测。
- 不确定性干扰:负荷波动、设备老化等不确定性因素影响模型精度。
- 计算效率:实时性要求高,但EKF的雅可比矩阵计算和UKF的Sigma点传播均需较高算力。
三、典型应用场景
1. EKF的典型应用
- 同步发电机状态估计:利用PMU数据估计转子角、转速等动态参数,用于稳定性控制。
- 谐波分量分析:结合最小二乘法(LS-KF)估计电压/电流谐波的幅值和相位,用于电能质量监测。
- 电压稳定性跟踪:通过Thevenin参数跟踪预测系统最大负载能力,优于传统离散卡尔曼滤波(DKF)。
2. UKF的典型应用
- 三相状态估计:在负荷突变场景下,实时估计三相电压和电流,提升故障检测精度。
- 电池SOC估计:结合自适应UKF(AUKF)处理电池动态非线性,提高荷电状态估计鲁棒性。
- 新能源并网:用于风电场动态模型的状态跟踪,适应风速波动带来的强非线性。
四、性能对比分析
指标 | EKF | UKF |
---|---|---|
非线性处理 | 一阶泰勒近似,误差随非线性强度增大 | 二阶精度,无线性化误差 |
计算复杂度 | 需雅可比矩阵计算,高维系统效率低 | Sigma点传播复杂度 O(n3)O(n3),与EKF相当 |
鲁棒性 | 对初始协方差和噪声敏感,易发散 | 通过Sigma点全局采样,抗噪性更强 |
适用场景 | 弱非线性系统(如局部发电机模型) | 强非线性系统(如三相突变、新能源并网) |
五、最新研究进展
-
EKF改进算法:
- 自适应插值强跟踪EKF(AISTEKF) :通过插值伪量测值减少线性化误差,在IEEE-30节点系统中电压幅值估计误差降低30%。
- EKF-UI(未知输入估计) :同步估计同步电机状态与未测量输入(如励磁电压),提升噪声环境下的可靠性。
-
UKF扩展应用:
- 混合UKF-PF算法:结合粒子滤波(PF)处理非高斯噪声,在电力负荷预测中均方误差降低15%。
- 机器学习辅助UKF:利用LSTM网络动态调整Sigma点权重,适应时变系统特性。
六、未来研究方向
- 模型简化与降阶:通过等效模型降低计算量,同时保留关键动态特性。
- 多源数据融合:整合SCADA、PMU和智能电表数据,提升状态可观测性。
- 边缘计算部署:在变电站本地实现EKF/UKF算法,减少通信延迟。
- 自适应参数调优:基于在线学习的噪声协方差估计,增强算法鲁棒性。
结论
EKF和UKF在电力系统动态状态估计中各有优势:EKF适用于低非线性场景且易于实现,而UKF在强非线性和噪声环境中表现更优。未来研究需结合智能算法与硬件加速,以应对电力系统高维、实时和不确定性的挑战。
📚2 运行结果
2.1 UKF
2.2 EKF
部分代码:
% Covariance Matrix
sig=1e-2;
P=sig^2*eye(ns); % Error covariance matrix
Q=sig^2*eye(ns); % system noise covariance matrix
R=sig^2*eye(nm); % measurment noise covariance matrix
X_hat=X_0;
X_est=[];
X_mes=[]; % Initial statel
% constant values
RMSE=[];
%Extended Kalman Filter (EKF) ALgorithm
for k=0:deltt:t_max
% Ybus and reconstruction matrix accodring to the requirement
if k<t_SW
ps=1;
elseif (t_SW<k)&&(k<=t_FC)
ps=2;
else
ps=3;
end
Ybusm = YBUS(:,:,ps);
RVm=RV(:, :, ps);
[~, X] = ode45(@(t,x) dynamic_system(t,x,M,D,Ybusm,E_abs,PM,n),[k k+deltt],X_0);
X_0=transpose(X(end, :));
X_mes=[X_mes X_0];
%determine the measurements
E1=E_abs.*exp(1j*X_0(1:n));
I1=Ybusm*E1;
PG=real(E1.*conj(I1));
QG=imag(E1.*conj(I1));
Vmag=abs(RVm*E1);
Vangle=angle(RVm*E1);
z=[PG; QG; Vmag; Vangle];
% determine Phi=df/fx
Phi=RK4partial(E_abs, X_hat, Ybusm, M, deltt, D, n);
%prediction
% [~, X1]= ode45(@(t,x) dynamic_system(t,x,M,D,Ybusm,E_abs,PM,n),[k k+deltt],X_hat);
% X_hat=transpose(X1(end, :));
X_hat=RK4(n, deltt, E_abs, ns, X_hat, PM, M, D, Ybusm);
P=Phi*P*transpose(Phi)+Q;
% correction
[H, zhat]=RK4H(E_abs, X_hat, Ybusm, s,n, RVm) ;
% Measurement update of state estimate and estimation error covariance
K=P*transpose(H)*(H*P*transpose(H)+R);
X_hat=X_hat+K*(z-zhat);
P=(eye(ns)-K*H)*P;
X_est=[X_est, X_hat];
RMSE=[RMSE, sqrt(trace(P))];
end
save('39_RMSE_EKF.mat', 'RMSE')
%% Plots
t= (0:deltt:t_max);
for i=1:1:n
figure(i)
subplot(2,1,1)
plot(t,X_mes(i, :), 'linewidth', 1.5)
hold on
plot(t, X_est(i, :), 'linestyle', '--', 'color', 'r', 'linewidth', 2);
grid on
ylabel(sprintf('Angle_{%d}', i), 'fontsize', 12)
xlabel('time(s)', 'fontsize', 15);
title('Actual Vs Estimated \delta', 'fontsize', 12)
legend(sprintf('Angle_{%d, Actual} ',i), sprintf('Angle_{%d, EKF}', i));
subplot(2,1,2)
plot(t,X_mes(i+n, :), 'linewidth', 1.5)
hold on
plot(t, X_est(i+n, :), 'linestyle', '--', 'color', 'r', 'linewidth', 2);
grid on
ylabel(sprintf('Speed_{%d}', i), 'fontsize', 12)
xlabel('time(s)', 'fontsize', 15);
title('Actual Vs Estimated \omega', 'fontsize', 12)
legend(sprintf('Speed_{%d, Actual} ',i), sprintf('Speed_{%d, EKF}', i));
% subplot(2,2,3)
% plot(t,X_mes(i+1, :), 'linewidth', 1.5)
% hold on
% plot(t, X_est(i+1, :), 'linestyle', '--', 'color', 'r', 'linewidth', 2);
% grid on
% ylabel(sprintf('Angle_{%d}', i+1), 'fontsize', 12)
% xlabel('time(s)', 'fontsize', 15);
% title('Measured Vs Eistimated \delta', 'fontsize', 12)
🎉3 参考文献
部分理论来源于网络,如有侵权请联系删除。