第4章 最小二乘法基础:从原理到电机参数辨识
说实话,最小二乘法这东西,我在学校时就学过。但真正理解它,是在我第一次做电机参数辨识的时候。那时候我拿着课本上的公式,对着电机一顿操作,结果出来的参数完全不对。后来才明白,理论到实践,中间还隔着好几道坎。
这一章,我就带你把这些坎一个个跨过去。
4.1 最小二乘原理:说白了就是找一条最合适的线
最小二乘法的核心思想,其实特别简单。你有一堆数据点,想找一条线(或者一个函数)来拟合它们。什么样的线最好?就是让所有点到这条线的距离的平方和最小。
为什么要平方?不是绝对值?嗯,这里有个小故事。我记得刚入行时,有个老工程师跟我说:「平方有两个好处,一是放大误差,让大的误差更明显;二是数学上好处理,求导方便。」后来我发现,确实如此。
数学上,我们通常这样描述:
给定观测数据 (x_i, y_i),i = 1,2,...,n
假设模型为 y = θ₁x + θ₂
定义误差 e_i = y_i - (θ₁x_i + θ₂)
目标:最小化 J = Σe_i²
这个J就是代价函数。我们想找到一组θ,让J最小。怎么找?求偏导,令其为零。这就是最小二乘法的标准解法。
核心要点:最小二乘法不是魔法,它只是给了我们一个「最优」的标准——误差平方和最小。这个标准在大多数工程问题中都很合理。
4.2 递推最小二乘(RLS):实时更新的秘密武器
标准最小二乘法有个问题:它需要所有历史数据。你想想看,电机在运行,数据源源不断进来,难道每次都要重新算一遍?那计算量太大了。
递推最小二乘(RLS)就是来解决这个问题的。它的思路很巧妙:用上一时刻的估计值,加上当前时刻的新信息,来更新参数。
RLS的核心公式长这样:
θ̂(k) = θ̂(k-1) + K(k)[y(k) - φᵀ(k)θ̂(k-1)]
K(k) = P(k-1)φ(k) / [λ + φᵀ(k)P(k-1)φ(k)]
P(k) = [I - K(k)φᵀ(k)]P(k-1) / λ
看着有点复杂?我拆开给你讲:
- θ̂(k):当前时刻的参数估计值
- K(k):增益矩阵,决定了新数据对参数更新的影响程度
- P(k):协方差矩阵,反映了参数估计的不确定性
- λ:遗忘因子,后面会详细说
这个递推过程,说白了就是:
- 用上一时刻的参数预测当前输出
- 比较预测值和实际值,得到预测误差
- 用这个误差来修正参数
- 更新协方差矩阵,为下一时刻做准备
我的经验:刚开始用RLS时,我总忘记初始化P矩阵。P(0)一般取一个较大的对角矩阵,比如1000*I。这样初始阶段参数更新会比较快,随着数据积累,P会逐渐收敛。
4.3 遗忘因子:让算法学会「忘记」
为什么要引入遗忘因子?你想想看,电机运行过程中,参数是会变化的。温度升高,电阻会变;磁钢老化,磁链会变。如果算法把所有历史数据都一视同仁,那它反应就太慢了。
遗忘因子λ的作用,就是给旧数据「打折」。λ的取值范围是(0,1],通常取0.95~0.99。
- λ=1:不遗忘,所有数据权重相同
- λ=0.95:遗忘较快,适合参数快速变化的场景
- λ=0.99:遗忘较慢,适合参数缓慢变化的场景
我曾经在一个项目中,电机负载频繁变化,参数也跟着变。一开始我用了λ=0.99,结果参数更新太慢,辨识结果总是滞后。后来改成0.97,效果就好多了。所以这个值,真的得根据实际情况调。
注意:λ太小也不行。我见过有人用λ=0.9,结果算法变得太「敏感」,一点点噪声就导致参数剧烈波动。一般来说,0.95~0.99是个安全区间。
4.4 RLS在电机参数辨识中的应用框架
好了,理论讲完了,咱们来看看怎么把RLS用到电机参数辨识上。
永磁同步电机的数学模型,在d-q坐标系下可以写成:
u_d = R_s i_d + L_d di_d/dt - ω_e L_q i_q
u_q = R_s i_q + L_q di_q/dt + ω_e L_d i_d + ω_e ψ_f
这个模型里,我们需要辨识的参数有:R_s(定子电阻)、L_d(d轴电感)、L_q(q轴电感)、ψ_f(永磁磁链)。
要把RLS用起来,得先把模型改写成标准形式:
y = φᵀθ
以q轴方程为例:
y = u_q - ω_e L_d i_d (这里L_d需要先知道,或者联合辨识)
φ = [i_q, di_q/dt, ω_e]
θ = [R_s, L_q, ψ_f]ᵀ
实际应用中,我建议分两步走:
- 离线预辨识:在电机静止或低速时,先辨识出R_s和L_d
- 在线辨识:电机运行时,用RLS实时更新L_q和ψ_f
这样做的好处是,减少了同时辨识的参数数量,提高了算法的稳定性和收敛速度。
应用框架总结:
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | 数据采集 | 采集u_d, u_q, i_d, i_q, ω_e |
| 2 | 信号处理 | 低通滤波,去除高频噪声 |
| 3 | 构建回归模型 | 将电机方程写成y=φᵀθ形式 |
| 4 | 初始化RLS | 设置θ(0), P(0), λ |
| 5 | 递推计算 | 每个采样周期执行一次RLS更新 |
| 6 | 结果验证 | 用辨识出的参数预测输出,检查误差 |
最后说一句,RLS不是万能的。我在项目中遇到过一个问题:当电机转速很低时,反电动势很小,信噪比差,辨识结果就不太靠谱。这时候,我会在算法里加一个使能条件——转速低于某个阈值时,暂停参数更新。
这些小技巧,都是在实践中一点点积累起来的。下一章,我会带你手把手实现一个完整的RLS参数辨识程序,到时候咱们再细聊。