news 2026/11/2 15:48:11

【电机滤波例程3】新息协方差自适应扩展卡尔曼滤波(EKF)原理,MATLAB。PMSM电流测量噪声在线调整。附下载链接

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【电机滤波例程3】新息协方差自适应扩展卡尔曼滤波(EKF)原理,MATLAB。PMSM电流测量噪声在线调整。附下载链接

完整代码,附下载链接。包运行成功

文章目录

  • 总述
    • 实现流程
    • 输出说明
  • 运行结果
  • MATLAB源代码

总述

采用表贴式永磁同步电机模型,满足Ld=Lq=p.L。通过已知αβ电压驱动机电状态预测,以αβ电流为量测修正电流、机械转速和电角度。 扩展卡尔曼滤波利用离散模型雅可比近似传播局部状态误差

实现流程

  1. 设置参数、固定随机种子,生成电压、真实电机状态和带噪电流。
  2. 初始化带误差的估计状态,核对解析雅可比。
  3. 逐步执行模型预测和当前案例的量测更新。
  4. 检查有限值与协方差正定性,统计指标并输出Figure。

输出说明

result.time为1×N时间;truth、estimate、error为状态数×N矩阵;observation和voltage为2×N矩阵。result.stateNames明确状态顺序:[i_alpha, i_beta, omega_m, theta_e],第5维为负载转矩T_L。

result.metrics保存统计指标;result.diagnostic保存新息、NIS及案例专属诊断。初始样本尚未量测更新,相关新息以NaN表示。

电压第k列驱动[t(k),t(k+1)]区间,电流第k列对应t(k);最后一列电压复制前一列,仅为输出长度一致,不用于额外传播。

各图窗的主题见“运行结果”。命令行仅输出该节列出的指标,其余误差和数值诊断从result.metrics与result.diagnostic读取。 转速和电角度主指标统计后80%仿真区间;电角度误差先按圆周环绕处理,再计算RMSE。

result.statistics.full保存全时段误差统计,post保存分区间统计,均含样本数、RMSE、均值、方差、标准差、平均绝对误差和最大绝对误差。方差采用N归一化;均值表示估计偏差。电角度先环绕再统计,参数使用物理量而非对数状态。current对比相同有效时刻的观测和滤波误差,缺失电流不计入观测统计。全时段包含初始样本;角度不参加信号算术均值/方差比较。

运行结果

转速与位置估计图:对比真实与估计机械转速,并放大展示电角度局部曲线;机械转速以r/min显示,电角度以rad显示。

估计误差图:显示机械转速与环绕处理后的电角度误差,用于观察收敛过程和变速响应。

电流观测与估计图:分别展示α、β电流的真值、带噪观测和滤波估计,观察电流平滑与跟踪情况。

负载转矩估计图:对比负载转矩真值和估计值,并给出负载估计误差,展示负载阶跃跟踪。

测量噪声自适应图:对比两个电流通道的真实噪声标准差和在线估计值,展示噪声强度变化时的适应过程。

命令行输出:

完整统计量保存在MATLAB工作区的result.statistics,原有指标保存在result.metrics,可自行查看。

MATLAB源代码

部分代码如下:

% PMSM新息协方差自适应EKF:独立MATLAB例程% 2026-09-20/Ver1,作者:matlabfilter,V同号,可获取代码定制、讲解等% 直接点击“运行”。只依赖基础 MATLAB;本文件末尾包含全部局部函数。% 固定随机种子0,直接运行并绘图;主输出为工作区中的 result。clear;clc;close all;rng(0);%% 集中参数:SI单位;wm为机械角速度,theta为电角度p.Rs=0.45;p.L=3e-3;p.psi=0.075;p.pairs=4;p.J=2e-3;p.B=5e-4;p.dt=1e-4;p.duration=0.65;p.ratedSpeed=150;t=0:p.dt:p.duration;count=numel(t);%% 真值与观测生成(理想有编码器驱动台架,独立于待验证估计器)% 台架的理想电流/速度闭环只用于生成物理一致的电压、电流数据。% 估计器不使用台架的真实角度、转速、速度给定或未知负载。% 本例验证无位置传感器“估计”,并不声称实现无传感器闭环启动。nx=5;plant=[0;0;80;0.3];truth=zeros(nx,count);voltage=zeros(2,count);currentObs=zeros(2,count);loadTrue=zeros(1,count);noiseStd=0.04*ones(2,count);outlierMask=false(1,count);speedReference=80+25*(1+tanh((t-0.16)/0.035))/2...-15*(1+tanh((t-0.44)/0.035))/2;loadTrue(:)=0.35;loadTrue(t>=0.25)=0.60;loadTrue(t>=0.43)=0.42;noiseStd(:,t>=0.23&t<0.44)=0.16;noiseStd(:,t>=0.44)=0.07;truth(1:4,1)=plant;ifnx==5,truth(5,:)=loadTrue;endcurrentObs(:,1)=plant(1:2)+noiseStd(:,1).*randn(2,1);speedIntegral=0;fork=2:count% 真实台架:有编码器FOC等效电压源;电压限幅为±60 V。wm=plant(3);angle=plant(4);rot=[cos(angle),sin(angle);-sin(angle),cos(angle)];idq=rot*plant(1:2);speedError=speedReference(k-1)-wm;speedIntegral=max(-8,min(8,speedIntegral+p.dt*speedError));iqRef=max(-10,min(10,0.28*speedError+3.0*speedIntegral+0.8));udq=[p.Rs*idq(1)-p.pairs*wm*p.L*idq(2);...p.Rs*idq(2)+p.pairs*wm*(p.L*idq(1)+p.psi)]...+2.8*([0;iqRef]-idq);u=max(-60,min(60,rot'*udq));voltage(:,k-1)=u;% 真值采用4个RK4子步,未知负载只传给真实电机。forsub=1:4h=p.dt/4;a=motorODE(plant,u,p,loadTrue(k-1));b=motorODE(plant+h*a/2,u,p,loadTrue(k-1));c=motorODE(plant+h*b/2,u,p,loadTrue(k-1));d=motorODE(plant+h*c,u,p,loadTrue(k-1));plant=plant+h*(a+2*b+2*c+d)/6;endplant(4)=wrapAngle(plant(4));truth(1:4,k)=plant;currentObs(:,k)=plant(1:2)+noiseStd(:,k).*randn(2,1);endvoltage(:,end)=voltage(:,end-1);available=true(1,count);currentObs(:,~available)=NaN;%% EKF初始化(故意设置初始误差,不从真值数组初始化)

完整代码:
https://download.csdn.net/download/callmeup/93496948

如需帮助,或有滤波相关的MATLAB代码定制需求,可从个人主页左侧联系我

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

Bun vs npm 实战对比:一次跨 libc 依赖踩坑带来的迁移笔记

本文基于一个多前端子项目从 npm/pnpm 迁移到 Bun 的过程整理。 文中速度数据为同一台 x86_64 机器、同一份依赖清单下的参考量级&#xff0c;用于直观感受差距&#xff0c;不是实验室级精确基准。 适合读者&#xff1a;正在考虑或已经使用 Bun&#xff0c;遇到原生依赖、跨平台…

作者头像 李华
网站建设 2026/10/19 13:32:46

使用 psql 按数据库分别记录查询历史:\set HISTFILE 变量详解

文档教程知识库 【免费下载链接】til :memo: Today I Learned 项目地址&#xff1a; https://gitcode.com/gh_mirrors/ti/til 点击查看 免费下载 导读 默认情况下&#xff0c;psql 会把你在会话中输入的所有 SQL 查询和反斜杠命令统一记录在 ~/.psql_history 一个文件里&…

作者头像 李华
网站建设 2026/10/19 13:32:48

生产告警分级与降噪:P0才打电话的决策树

先判断用户有没有受到影响,再选电话、值班群或日报。静默要有到期时间,不要删掉唯一的信号。 目录 一条告警该不该存在 等级和渠道 降噪的四种做法 Prometheus 可复制示例 开工前只读盘点 静默、抑制和回滚 回滚成本 反序会怎样 Checklist 与变更单 前言 告警疲劳通常不是阈…

作者头像 李华