模型预测控制专题(三)—— 参数辨识(最小二乘法)与DPCC结合
0 符号解释


1 前言
通过磁链免疫型DPCC能够避开磁链参数对控制性能的干扰,但是电感以及电阻的影响当前阶段仍然无法解决。
当Ld\Lq准确时仿真结果如下图所示:

当Ld\Lq参数更变为原本1.5倍后,仿真结果如下图所示:

从上述仿真结果对比可以发现,电感参数的影响非常严重。因此有必要对电感参数进行在线辨识。最小二乘法做参数辨识应该是早已有被研究多年,且技术较为成熟,这里先尝试这个最成熟的算法。后续再探究更加牛逼的方法。
2 基于最小二乘法的电感辨识
2.1 最小二乘法的原理
最小二乘法(Least Squares, LS)是一种数学优化技术,通过最小化误差平方和寻找数据的最佳函数匹配。其核心思想是:对于给定数据点,找到能最好拟合这些数据的曲线,使所有观测值与模型预测值之差的平方和最小。假设我们有n个数据点,线性模型表示为:
![]()
矩阵形式如下所示:
![]()
其中

这里需要非常关注一个词,就是线性模型,线性模型是最小二乘法的一个基础逻辑。
矩阵形式最小化残差平方和如下所示,这是一个关于 theta量的目标函数;

对目标函数进行求导,求导过程如下所示:

第一部分:

第二部分:

第三部分:

将所有项导数组合:

并且令导数为0,可得:
![]()
因此可得
![]()
2.2 最小二乘法简单示例
假设有一组数据点。
![]()
我们希望找到一条直线来 “最佳拟合” 这些数据。
![]()
“最佳拟合” 的标准是:每个数据点到直线的垂直距离(误差)的平方和最小。
以线性回归为例进行分析
1、定义误差:预测值和实际点之间的差值;
![]()
![]()
2、构建目标函数:
所有误差的平方和为

3、求最小值:
通过求偏导数并令其为 0,解得参数 a 和 b 的最优值:
![]()
4、一个简单的例子:我们具有四个数据;
x1 = 150,y1 = 45; x2 = 160, y2 =52; x3 = 170,y3 = 60; x4 = 180, y=70;
我们想要用一条直线来拟合这条曲线。
手动计算步骤:
- 计算平均值 x- = 165, y- =56.75;
- 计算参数a

- 计算参数b

- 得到最终曲线 : y = 0.7x - 58.75;
- 计算总误差平方和:

2.3 从物理上形象的理解
从物理视角理解最小二乘法,可以借助 “能量最小化”等直观概念,将数学优化转化为我们熟悉的物理现象类比。
想象一个由多个弹簧连接的系统:每个数据点对应一个弹簧,拟合曲线(或模型)是弹簧的 “平衡位置”。若数据点与模型预测值的误差越大,弹簧拉伸 / 压缩的形变越大,对应弹性势能越大。所有弹簧的势能之和(误差平方和)最小化时,系统达到稳定平衡态,此时的模型就是 “最优拟合”。
假设用线性模型 y = kx + b 拟合数据,可将参数 k 和 b 视为弹簧系统的 “坐标”,每个数据点 (x_i, y_i) 对应一个弹簧。弹簧一端固定在(xi,yi),另一端连接在模型曲线 (y = kx + b) 上,弹簧的伸长量为:
![]()
由于能量与形变量的平方成正比:
![]()
总能量就是误差平方和:

当系统能量最小时,弹簧的拉力平衡,对应参数 k 和 b 的最优解。
最小二乘法的本质是 “寻找误差能量最小的稳定态”,这与物理中 “系统自发趋向能量最低状态” 的规律一致。
2.4 递推最小二乘法
上述最小二乘方法是一次性处理所有数据的方法。由于电机控制的算法是在芯片中通过离散化步长执行的,因此在学习完成最小二乘法的基础原理后,将其拓展到适合离散应用场景的递推最小二乘法。递推最小二乘法是传统最小二乘法的迭代版本,特别适合在线参数辨识和实时系统。与批量处理所有数据不同,RLS 逐次处理新数据点,并更新参数估计,具有计算效率高、内存需求低的优点。
假设我们有一个线性系统,这个线性系统的表达式如下所示:
![]()
设置代价函数为:
![]()
令代价函数的偏导数为0,可得如下矩阵形式的迭代解:

其中系数阵被表示为:

系数矩阵中的协方差矩阵被表示为:
![]()
上述过程即为递推最小二乘法求得 theta的步骤;在得到以上模型后,下一步是在电机中进行部署。
2.5 最小二乘法在PMSM中的部署
永磁同步电机电压模型:

参数辨识的思路是通过 ud, uq, id, iq 以及转速 we 辨识电机电感 Ld 和 Lq;
由于我们此时是表贴电机,存在以下电感关系: Ls = Ld = Lq;因此电压方程可以被简化为:

若假设电阻已知且恒定不变,上述公式中只需要用Ud的公式即可对Ls进行辨识;

将其整理为递推公式,结合上节的基础框架:
![]()
取其输出量、参数矩阵、回归矩阵分别如下所示:
注意这里仅仅是考虑将 Ls作为辨识目标,Rs被设定为已知量;

以此为基础进行在线参数辨识策略。
第一步:采样输出值,并计算回归向量

第二步:计算增益向量:这里稍微在分母上加一个偏置1,防止分母等于0;
这一步在算法里面注意设定 P(k-1)的初值;

第三步:更新参数估计:

第四步:更新协方差矩阵;
![]()
3 仿真验证
仿真结果如下图所示,在0.1s期间切入参数辨识后电感参数,可以看到控制性能回归正常。

4 总结与展望
虽然最小二乘法实现了参数的在线辨识;但是也存在一个非常关键的问题;
问题:模型是否存在缺陷?
其线性模型如下所示:

可以看到 Ls 相关项存在两个分量,一个是跟 id变化率相关的项,一个是跟 iq*we相关的项;

其中跟 id 变化率相关的项依赖于电流id的变化率,假如是 id=0控制,在控制过程中 id的变化率相对非常小,可以说就在0附近跳动。在电感准确时,通常d轴电流的波动范围是0.3A,此时变化率导致的项数值并不大。然后是第二项与电机带负载情况以及转速大小相关,假如电机处于空载工况,该项也较小。也就是必须要电机具备一定转速、具备一定负载且电流变化率满足一定值的时候,参数辨识才可以实现较好的收敛。
下图中蓝色为最小二乘算法的辨识结果,中间无数据的部分就是空载且id=0的工况,此时辨识结果非常的差。基本跑飞了。

疑问:直接计算和最小二乘法估计有什么区别?
在观察最小二乘法实现的方程过程中,这个方程如果进行合并同类项,得到一个直接的线性关系式,那么是否能够直接计算呢?

直接计算的结果和最小二乘法辨识的区别如下仿真所示,直接计算的结果经过低通滤波得到的值如下所示,第一行是最小二乘法的值,能够收敛;第二行是直接计算的值,无法收敛;直接计算中包含了大量的噪声值,并且Ts较小会放大噪声影响,从而过度在意离群点的值,使得系统无法直接计算出直接。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)