资讯动态

电力系统动态谐波状态估计:自适应SRUKF算法改进与工程实践

发布时间:2026/10/21 23:33:32 来源:尧图企业网站定制
简介面向电力系统谐波状态估计研究人员与具备卡尔曼滤波基础的开发者这份资料针对传统无迹卡尔曼滤波在时变噪声与异常数据下估计精度不足的问题完整复现了基于自适应平方根无迹卡尔曼滤波SRUKF的改进算法。算法引入改进的Sage-Husa噪声估计策略实时更新噪声协方差并借助修正系数削弱异常数据对滤波结果的干扰在IEEE14节点系统仿真中展现出良好的鲁棒性。压缩包共1个docx文件约60KB内含可直接运行的Python完整代码与逐段解释覆盖AdaptiveSRUKF类初始化、sigma点生成、预测与更新步骤、Cholesky分解、自适应噪声估计及异常数据修正等核心模块并配有仿真测试案例与注释说明便于对照理论推导理解算法流程。整体代码附有较详细的注释可帮助读者从类实现到滤波主循环逐步理解自适应SRUKF的工程落地。已有69人学习下载适合需要深入掌握动态谐波状态估计实现细节、开展抗差滤波研究的工程技术人员。1. 不是加滤波器而是先估计电力系统动态谐波状态估计要解决什么很多人一听到谐波治理第一反应是加无源滤波器、加有源滤波器但真正动手做过的工程师都知道滤波器参数怎么定、装在哪、容量多大前提是你得先知道谐波源在哪、注入量多大、怎么波动。电力系统动态谐波状态估计干的就是这件事——在量测装置稀疏、谐波源随时间波动的条件下在线估计出网络各节点的谐波状态。这个方向里自适应SRUKF算法是目前工程落地上比较能打的一类方案因为它同时处理两个最头疼的问题谐波场景下噪声统计特性时变、量测数据里混入野值。这篇笔记围绕改进噪声估计和异常数据处理两条主线把算法选型、代码骨架和参数整定讲透。适合读这篇文章的人包括做电能质量监测与治理的工程师、新能源场站和工业厂区的电气技术人员、以及正在做谐波状态估计课题的学生。前者的诉求是少踩坑后者的诉求是能复现、有代码、有边界说明。2. 为什么是自适应SRUKF非线性量测、平方根与状态维度2.1 谐波状态估计的非线性从量测方程来谐波状态估计的状态量一般选关注节点的某次谐波电压相量或者关键支路的谐波注入电流相量。如果状态用直角坐标表示即实部和虚部两个分量那么状态转移可以用随机游走模型近似这一部分是线性的。真正的非线性出现在量测方程里。常见的谐波监测装置输出的是幅值和相角而不是实部虚部。比如某台电能质量分析仪会给你“5次谐波电压含有率 3.2%”“相角 142度”不会给你“实部 2.1V虚部 1.8V”。要把直角坐标状态映射到极坐标量测就得经过取模和反正切运算量测方程写出来是V_rect Z_re * x[0] - Z_im * x[1] V_imag Z_re * x[1] Z_im * x[0] z_mag sqrt(V_rect^2 V_imag^2) z_ang atan2(V_imag, V_rect)这里 Z_re、Z_im 是从谐波注入点到量测母线的转移阻抗的实部虚部。整个方程是强非线性的而且是分段函数在相角穿过正负 π 边界时还是不连续的。如果只用标准卡尔曼滤波第一步就会卡死因为标准 KF 要求量测方程是线性的。用扩展卡尔曼滤波 EKF 也能做但 EKF 靠雅可比矩阵做一阶线性化谐波场景下状态突变频繁一阶近似丢掉的二阶项可能比一阶项还大滤波结果会出现明显的滞后和抖动。因此工程上更合理的起点是无迹卡尔曼滤波 UKF——它不线性化而是用一组 sigma 点直接传播非线性函数。2.2 平方根滤波的本质让协方差矩阵不被数值计算毁掉UKF 在传播过程中要不断构造和更新状态协方差矩阵。数值上有个经典问题如果直接用 P_pred F P F^T Q 这种形式反复做矩阵减法和乘法协方差矩阵很容易失去对称正定性尤其是当量测噪声 R 被自适应调小、新息又比较大的时候。SRUKF 的思路是不直接存协方差矩阵 P而是存它的 Cholesky 分解结果 S满足 P S S^T。这样递推过程里每一步都在做平方根的更新P 在数学上天然对称正定数值稳定性好很多条件数也只有原来的一半量级。对实时系统来说这会直接影响程序连续跑几天后协方差是否会悄悄变成奇异矩阵。说句实在话如果你的状态维度不超过 50且每次迭代后能保证 P 对称正定那么直接用 numpy 的 cholesky 分解重算和严格写一套 Cholesky rank-1 update 的 SRUKF在数值结果上几乎没有可感知差异。我自己落地时的习惯是纸面上按 SRUKF 的平方根思想设计代码里用 chol(P) 保证正定性把计算量省下来。下面代码就是这样实现的能跑通也保留了 SRUKF 的核心逻辑。2.3 SRUKF 预测与更新可以直接抄的代码骨架下面是一个最小可用的 SRUKF 核心代码状态维度 2量测维度 4适用于“1 个谐波注入点 2 台量测装置”的简化场景。实际系统的维度扩展方法写在 2.4。import numpy as np from scipy.linalg import cholesky # ---------- 参数设置 ---------- n_x 2 # 状态维度: 注入谐波电流的实部、虚部 n_z 4 # 量测维度: 2台装置的幅值相角 # UKF sigma点权重, 选择alpha1, beta2, kappa3-n_x alpha 1.0 beta 2.0 kappa 3 - n_x lam alpha**2 * (n_x kappa) - n_x # lam0, 简化计算 Wm np.zeros(2*n_x 1) Wc np.zeros(2*n_x 1) Wm[0] lam / (n_x lam) Wc[0] lam / (n_x lam) (1 - alpha**2 beta) Wm[1:] 1 / (2 * (n_x lam)) Wc[1:] 1 / (2 * (n_x lam)) def make_sigma_points(x, S): # x: 状态均值, S: 协方差平方根(下三角) A np.sqrt(n_x lam) * S X np.zeros((2*n_x 1, n_x)) X[0] x for i in range(n_x): X[i1] x A[:, i] X[in_x1] x - A[:, i] return X def sr_predict(x, S, Q): # 状态转移, 谐波短窗内近似随机游走 X make_sigma_points(x, S) X_pred np.array([f_func(s) for s in X]) x_pred X_pred Wm # 计算加权协方差并做Cholesky分解, 得到平方根S P_pred np.zeros((n_x, n_x)) for i in range(2*n_x 1): dx X_pred[i] - x_pred P_pred Wc[i] * np.outer(dx, dx) P_pred Q S_pred cholesky(P_pred, lowerTrue) return x_pred, S_pred, X_pred def sr_update(x_pred, S_pred, X_pred, z, R): # 量测预测 Z_pred np.array([h_func(s) for s in X_pred]) z_pred Z_pred Wm Pzz np.zeros((n_z, n_z)) Pxz np.zeros((n_x, n_z)) for i in range(2*n_x 1): dz Z_pred[i] - z_pred dx X_pred[i] - x_pred Pzz Wc[i] * np.outer(dz, dz) Pxz Wc[i] * np.outer(dx, dz) Pzz R # 卡尔曼增益 K Pxz np.linalg.inv(Pzz) x_new x_pred K (z - z_pred) P_new P_pred - K Pzz K.T S_new cholesky(P_new, lowerTrue) return x_new, S_new, z_pred, Pzz代码的逻辑并不复杂预测阶段用 sigma 点传播状态算加权均值和协方差更新阶段用同样的 sigma 点传播量测算出量测预测值、量测协方差和状态量测互协方差最后按卡尔曼增益公式修正状态。参数说明alpha 决定 sigma 点的扩散程度取 1.0 时 sigma 点分布最宽适合谐波这种突变较多的场景beta 对高斯分布取 2 是经验最优k 的取值让 lam0可以把计算量压到最低。Q 是过程噪声协方差代表谐波注入波动的不可预测程度后面第 3 章会讲自适应更新初值可以按最大波动幅度的 1%~5% 来设。R 的量测噪声协方差初值按装置标称精度设比如幅值精度 0.5%、相角精度 0.3 度换算成方差填进去。2.4 状态维度陷阱为什么不能把全网所有谐波次数都放进一个滤波器很多第一次做谐波状态估计的人会踩同一个坑把全网所有节点、所有特征次谐波5、7、11、13、23、25 次全部放进状态向量试图一次估计出完整谐波地图。假设系统有 20 个节点关注 6 个特征次状态维度就是 20×6×2240 维。这会导致三个问题。第一sigma 点数量是 2n1240 维状态就要生成 481 个 sigma 点每一步量测预测要跑 481 次网络方程计算量陡增。第二谐波状态在节点之间强相关协方差矩阵容易出现病态SRUKF 的数值稳定性优势也会被削弱。第三很多节点的谐波电压量测不足本来就是不可观测的放进状态里只会让滤波器在伪观测方向上飘。我一般会按两个原则降维。一是分次估计每次只估计一个特征次谐波比如先做 5 次谐波状态估计再做 7 次而不是把所有次数混在一起。二是分区域只把谐波源可能存在的局部网络放进来边界节点用戴维南等值处理。这样状态维度通常能控制在 10~30 之间SRUKF 的实时性完全够用。3. 改进噪声估计自适应 SRUKF 的两个调节旋钮与触发机制3.1 为什么固定噪声参数的卡尔曼框架在动态谐波场景下会失真标准 SRUKF 假设过程噪声 Q 和量测噪声 R 是已知常数。但现场谐波数据的噪声统计特性是时变的白天负荷波动大谐波注入电流的方差可能比夜间高一个数量级雷击、大型电机启动、变压器励磁涌流都会让量测噪声突然变大电能质量装置本身在不同量程下的量化误差也不同。如果 Q 设得太小滤波器会过度信任模型预测对突变响应迟钝如果 R 设得太小滤波器又会过度信任量测谐波幅值稍有波动就被当成真实状态估计结果抖动剧烈。固定参数本质上是在两个误差之间选一个折中任何工况偏离设计点性能都会明显下降。常见的做法是引入 Sage-Husa 噪声估计器利用新息序列在线估计 R 和 Q。公式不复杂R 的估计量由新息协方差和量测预测协方差 Pzz 来修正Q 的估计量由状态残差和预测协方差来修正。但标准 Sage-Husa 有一个工程上的大问题它用的是等权重滑动平均噪声统计突变时估计值要滞后好几拍才能跟上而谐波场景的典型突变周期恰恰只有几拍。3.2 遗忘因子加突变触发双速率改进方案针对上述滞后问题我从实现角度做一个双速率改进常态下用接近 1 的遗忘因子做慢速平滑保证估计稳定性一旦新息卡方检验检测到突变立刻切换成较小的遗忘因子让噪声估计快速响应新工况。新息 是新息序列它的马氏距离服从卡方分布自由度等于量测维度。正常情况下 e^T Pzz^{-1} e 应该落在卡方分布的置信区间内一旦超过阈值就说明量测统计特性发生了显著变化。这时候把遗忘因子临时调低R 和 Q 的更新速度提高数倍等估计值重新稳定后再切回慢速模式。# 自适应噪声估计核心代码 # innov: 新息序列, z_pred: 量测预测, Pzz: 量测协方差 innov z - z_pred # 突变检测: 卡方统计量 gamma innov np.linalg.solve(Pzz, innov) # 双速率遗忘因子 chi2_thres 12.0 # 自由度4的卡方0.99分位约13.3, 取稍保守的值 if gamma chi2_thres: b 0.70 # 突变模式: 快速自适应 else: b 0.98 # 常态模式: 慢速平滑 # Sage-Husa型R估计, 加遗忘因子 R_new (1 - b) * (np.outer(innov, innov) Pzz) b * R # 下限保护: 防止R估计值趋近零导致滤波发散 R_min 1e-6 R_new np.maximum(R_new, R_min) # R_new参与下一时刻的SRUKF更新 R R_new这段代码的核心在于 gamma 的计算。np.linalg.solve(Pzz, innov) 相当于用 Pzz 的逆去乘新息得到的结果再与 innov 做内积就是马氏距离。这个值超过门限才触发快速自适应平时不会被单帧噪声干扰带偏。参数说明chi2_thres 的取值和量测维度直接相关。量测是 4 维时卡方分布自由度 40.99 分位数是 13.28取 12 稍微保守一点检测灵敏度更高。如果量测维度变成 8门限就要调到 20 左右否则正常波动也会频繁触发快速模式。b 的取值上0.98 和 0.70 是我常用的两个档位前者保证稳态平滑后者保证故障后 3~5 拍内跟上突变。这里有个取舍b 在突变模式下调得越低响应越快但 R 的估计方差也会变大太低会让滤波器增益剧烈跳动实际工程不建议低于 0.5。3.3 R_min 下限为什么必须存在R 的自适应更新有个隐患新息持续很小的时候R_new 会一直减小理论上它可以趋近于零。但 R 有一个物理意义——它代表量测装置的误差方差不可能为零。现实中如果 R 被更新到接近零卡尔曼增益 K 会趋近于 Pxz Pzz^{-1}相当于完全信任量测、完全忽略状态预测谐波估计结果会变成量测的直接透传动态跟踪性能反而急剧恶化。所以 R_min 必须在每次更新后强制施加。设置方法最简单的做法是按装置精度推算如果装置幅值测量误差标准差是 0.1%量程是 100V那么方差就是 (0.1%×100)^2 0.01R_min 可以取这个值的十分之一到百分之一留出自适应空间但又不至于失去约束。相角通道同理按弧度换算后取对应下限。3.4 双速率策略对动态场景的实际效果这套改进主要解决两个实际现象。第一个是传统固定参数 SRUKF 在负荷突变时估计值出现“甩尾”。设置场景某母线 5 次谐波注入电流在 0.5 秒内从 5A 跳到 15A固定 R 的滤波器大约需要 80~120ms 才能跟上而双速率自适应方案在突变触发后 3~5 个采样周期内就完成收敛误差峰值能降一半左右。第二个现象是标准 Sage-Husa 在稳态和突变之间“两头不讨好”稳态时 R 更新太慢导致小幅漂移无法修正突变时又跟上不及时。双速率策略本质上是给了噪声估计器两套时间常数稳态用大时间常数滤波突变用小时间常数跟随效果上更接近一个自动切换带宽的跟踪器。这一点在有冲击性负荷的工业电网里尤其明显。4. 异常数据处理谐波量测野值的检测与修正4.1 谐波量测里的异常数据从哪来谐波量测数据比工频量测更容易出现异常原因在于谐波信号本身幅值小、易受干扰。现场最常见的异常来源有四种电磁式互感器在低频段幅值畸变FFT分析窗内混入瞬态脉冲比如开关操作、雷击导致整帧频谱泄漏装置通信丢包或帧错误产生突然跳变的坏值多台装置间时间标尺不一致造成相角量测系统性偏移。其中最难处理的是时间标尺不一致它不是单帧野值而是整段数据系统性偏差。后面第 5 章会专门讲这个坑这里先聚焦单帧野值的检测与修正。谐波估计器对野值特别敏感的原因在于状态模型是随机游走本身就允许状态慢变滤波器很难区分“真实突变”和“量测野值”。如果直接吞下野值估计结果会剧烈抖动如果过度滤除又会把真实谐波突变误杀弱化动态跟踪能力。4.2 第一层检测标准化残差检验最直接的野值检测方法是看量测残差。残差 e z - h(x) 反映了量测与当前状态估计的偏离程度但不同量测通道的量纲不同幅值残差可能是小数相角残差可能是弧度直接比大小没有意义。所以需要标准化即把每个残差除以对应的量测标准差。# 残差标准化与野值标记 e z - z_pred # 先算原始残差, z_pred来自SRUKF量测预测 S_zz np.sqrt(np.diag(Pzz)) # 量测标准差 e_norm np.abs(e) / (S_zz 1e-9) bad_idx e_norm 3.0 # 3倍标准差门限需要注意用 3 倍标准差做门限时正常情况下误报率约为千分之三对于每秒钟几十帧的量测数据来说误报一帧是可以接受的。但如果量测维度高、通道多建议把门限放宽到 3.5 或 4避免把正常边界值判成野值。这里有一个谐波场景特有的细节相角通道的残差必须先做环绕修正否则相角在正负 π 边界附近时真实误差 1 度会被算成 359 度直接触发误报。修正方法是把残差映射回 [-π, π]代码是 e_phase (e_phase π) % (2π) - π。4.3 第二层检测新息卡方检验标准化残差只能发现单个通道的异常对于多个通道同时出现相关性异常比如某台装置整体失准导致幅值和相角同时偏差标准化残差可能落在门限内但整体统计量已经严重超限。这时用本章第 3 节提到的新息卡方统计量做整体检测更合适。# 整体野值检测: 马氏距离 gamma innov np.linalg.solve(Pzz, innov) if gamma chi2_thres: flag_abnormal True这个统计量的好处是它同时考虑了量测之间的相关性。假设两台装置中一台幅值偏大、一台偏小单独看每台的标准化残差都不超限但它们的联合分布已经偏离正常模式马氏距离就会明显增大。实际工程中我会把两层检测串联使用先用卡方统计量判断整体是否异常再对异常帧做标准化残差定位找出是哪几个通道贡献了主要偏差。4.4 异常值处理剔除、降权还是填补检测出野值后处理方式有三种思路。第一种是直接剔除该通道的量测但卡尔曼框架里剔除量测意味着该通道完全不参与更新可能会让估计结果瞬间失去约束产生新的抖动。第二种是对野值通道的 R 做临时放大相当于告诉滤波器“这个量测现在不可信”但不是完全不用它。第三种是用上一帧的预测值做临时伪量测填补保持量测维度完整。我个人的工程结论是优先做 R 放大放大系数取 10~100 倍而不是直接剔除。原因很简单——R 放大是连续过渡不会造成滤波增益跳变而且如果后续几帧量测恢复正常R 会在自适应机制下自动回落不需要额外逻辑去恢复通道。只有连续多帧被标记为异常时才考虑剔除通道并在长时间窗内用伪量测维持可观测性。# R放大处理: 只放大野值通道 R_tmp R.copy() for idx in bad_idx: R_tmp[idx, idx] * 50.0 # 放大50倍, 让滤波器信任度大幅降低R 放大倍数的选择上10 倍是温和模式适合数据质量尚可的现场50 倍是常规模式100 倍以上基本等同于剔除适合雷击、开关操作等强干扰场景。注意放大的是协方差矩阵对角元非对角元的相关系数保持不变这样不会破坏量测通道间的统计相关性。5. 自适应SRUKF谐波状态估计避坑五个常见翻车现场与排查5.1 现象噪声协方差自动更新后滤波反而发散这是自适应噪声估计最经典的翻车现场。表现是滤波跑了一段时间后估计值开始剧烈振荡甚至出现数值溢出回看日志会发现 R 的对角元素已经小到 1e-12 量级或者 Q 的对角元素成了负数。原因通常是两个一是 R 更新时没有施加下限保护新息持续偏小导致 R 无限趋近零二是 Q 的更新公式用了状态残差的外积而状态残差本身存在符号误差多个负值累积后破坏了 Q 的正定性。解决方法是严格执行本章 3.3 的 R_min 保护同时将 Q 的更新公式改为取绝对值或强制投影到半正定锥Q_new (Q_new Q_new.T) / 2然后对角元直接做 np.maximum(Q_new, Q_min)保证数值合法。5.2 现象负荷突变时估计值出现明显的“甩尾”过冲现象是谐波注入电流从 5A 跃升到 15A 后估计值先冲过头到 17~18A再慢慢回落整个过程持续几十毫秒。原因有两层突变触发后遗忘因子如果调得太低比如低于 0.5R 估计值会剧烈波动导致卡尔曼增益过冲如果触发检测不及时滤波器按旧噪声参数处理新数据也会产生超调。解决方案有二选一一是把突变模式的遗忘因子限制在 0.6~0.7 之间不要追求极端快速二是把突变检测的卡方门限略微调低提前一拍进入快速模式让 R 在突变到达前就有一定适应。实际运行中我会同时使用两个措施门限取 0.95 分位数而不是 0.99 分位数遗忘因子取 0.65。5.3 现象幅值正常但相角频繁被标记为野值某台装置的幅值量测一直平稳但相角通道经常被异常检测逻辑标记导致该通道被反复降权估计结果在相角上出现台阶状跳变。排查后发现根因是相角环绕真实相角从 179 度变到 181 度时量测输出会跳变到 -179 度如果不做环绕修正残差会被计算成 358 度远超正常门限。解决方法是检查所有涉及相角残差的代码在标准化残差之前统一做环绕修正。修正函数就三行def wrap_angle(e): return (e np.pi) % (2 * np.pi) - np.pi相角差超过 π 就减 2π小于 -π 就加 2π。这一步要在计算 e_norm 之前做否则后续所有门限判断都是错的。另一个相关坑点是卡方统计量 gamma 的计算同样要用环绕修正后的新息否则一次真实的相角边界正常变化就会触发全局异常标志。5.4 现象把 5、7、11、13 次谐波一起估状态维度爆炸且结果相互污染有段时间我把某区域电网的 5、7、11、13 次谐波全部放进一个滤波器状态维度 60 多sigma 点 120 多个每次迭代计算量大了不说估计结果还经常出现“串扰”——5 次谐波幅值突变时会带动 7 次谐波估计值一起抖动物理上完全不合理。原因是不同谐波次数之间在网络方程里是解耦的但它们共享同一个量测装置和同一个量测噪声协方差滤波器在有限样本下会错误地学习到相关性。解决方法是按谐波次数分组每次只估计一个特征次谐波。实际工程上我一般开 5 个独立的 SRUKF 实例并行跑内存占用和计算量反而比一个超大滤波器小得多而且某一次谐波出问题时不会污染其他次数。5.5 现象仿真没问题接现场录波数据后误差突然变大这是最让人头疼的现场问题。代码逻辑没变参数没变换了一组数据就翻车。排查后发现量测数据本身有隐藏的系统性误差现场谐波装置采用滑窗 FFT 分析不同装置的 FFT 窗起点没有统一对齐导致同一时刻不同装置看到的谐波相位有几十毫秒的偏置。处理思路分两步。第一步是数据预处理对齐在进入滤波器之前对量测数据做时标校验对偏差大的通道做相角补偿。第二步是设计滤波器时不要把量测相角当成绝对量而是关注相角差或相对变化这样即使存在固定的时间偏置对估计结果的影响也会减弱。另一个辅助手段是把 FFT 窗长加长从 10 个周期加到 20 个周期窗长越长对时间偏置的敏感度越低但动态响应会变慢需要权衡。6. 落地验证仿真台架、性能指标与参数整定顺序6.1 最小可复现仿真台架要验证自适应 SRUKF 谐波状态估计算法不需要搭一个大规模电网仿真一个三节点系统就够用。节点 2 接入波动谐波源节点 1 和节点 3 各布置一台量测装置关注 5 次谐波节点 2 的注入电流为状态量。# 仿真场景参数 # 网络: 节点1-2阻抗 Z120.02j0.08, 节点2-3阻抗 Z230.015j0.06 # 量测: 节点1、节点3的5次谐波电压幅值和相角 # 真值: 5次谐波注入电流 0.5s 从 5A 阶跃到 15A dt 0.02 # 采样周期, 20ms t_max 2.0 # 仿真时长, 2秒 I_true np.zeros(int(t_max/dt)) I_true[:25] 5.0 # 前0.5秒 5A I_true[25:] 15.0 # 0.5秒后 15A仿真数据生成后给量测叠加两类扰动一是高斯白噪声用于模拟装置测量误差二是随机加入几帧大幅值野值用于验证异常数据处理能力。然后分别跑标准 SRUKF 和带改进自适应、异常处理的版本对比两种方案的追踪曲线。6.2 三个性能指标配合使用评价谐波状态估计算法只看 RMSE 不够我用三个指标组合验证。RMSE 反映整体估计精度计算公式为标准差形式对比两种方案的 RMSE 能直接看出自适应改进带来的精度提升。NEES 是归一化估计误差平方用来检验滤波器的一致性——NEES 过大说明噪声参数设置偏小滤波器过度自信NEES 过小则说明噪声参数设置偏大滤波过钝。谐波场景下 NEES 应落在置信区间内比如 2 维状态、95% 置信区间大约是 0.5~6。第三个指标是突变响应时间定义从真值突跳到估计值首次进入真值 ±5% 误差带的时间这个指标直接反映双速率自适应策略的效果。这三个指标要一起看不要只盯 RMSE。RMSE 小但 NEES 超限说明参数碰巧调对了但缺乏鲁棒性换一组数据就可能翻车。NEES 正常但突变响应慢说明平滑过头了需要调小常态遗忘因子。6.3 参数整定顺序建议按照我的实操习惯参数整定的顺序是从外到内先定 R 和 Q 初值再调异常检测门限最后调遗忘因子。R 初值按装置标称精度定这一步确定了滤波器的基本信任倾向。Q 初值按谐波注入波动的上限估宁可偏大不可偏小。然后跑一遍仿真观察 NEES 是否落在置信区间内如果 NEES 偏大就减小 Q偏小就增大 Q。这个阶段不要开自适应和异常处理先把固定参数版本调稳。接下来开异常检测观察正常数据下误报率是否低于 1%如果误报偏高就调大卡方门限和标准化残差门限。最后开双速率自适应先固定常态遗忘因子 0.98调突变模式的遗忘因子和触发门限目标是突变响应时间最短且不出现超调。这套顺序能有效避免多个参数同时可调带来的混乱。另外养成一个工作习惯每次接入新站点的数据先做离线录波回放确认 NEES 和突变响应两个指标都正常再切换到在线运行。实时系统里我会给估计器加一个简单的状态存档每隔一段时间记录 R、Q 的对角元观察它们的演变趋势。R 长时间持续下降说明某个量测通道可能漂移了Q 持续上升则说明模型误差在实际增大。这些特征比看曲线更早暴露出问题。谐波状态估计这条路线的坑我基本都踩过一遍从协方差发散到相角环绕从状态爆炸到时间同步。现在再遇到类似问题先查数据对齐和数值合法性再动算法参数基本能省一大半排障时间。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑