
基于永磁同步电机的平方根容积卡尔曼SRCKF状态估计:解决协方差非正定问题及提
供对应参考文献与更高估计精度
永磁同步电机控制系统的观测器设计一直是个头疼的问题,传统的CKF算法在数值稳定性上总让人
心里不踏实。去年调参时连续三天遇到协方差矩阵突然变负定的崩溃现场,让我彻底转向了SRCKF方案——
这货直接把协方差矩阵的平方根拿来迭代,相当于给算法上了个数值保险。
先看电机模型部分。咱们在α-β坐标系下搭了个状态方程,把电流和转速都塞进状态向量里。这里有
个小技巧:用四阶泰勒展开处理旋转坐标系带来的非线性项,比传统的欧拉法精度高了一个量级。
```python
def motor_model(x, u, Ts):
# 状态向量: [i_alpha, i_beta, omega, theta]
R = 0.5 # 定子电阻
L = 2e-3 # 电感
lambda_m = 0.35 # 永磁体磁链
# 非线性项展开到四阶
omega = x[2]
theta = x[3]
cos_theta = 1 - theta**2/2 + theta**4/24
sin_theta = theta - theta**3/6 + theta**5/120
di_alpha = (-R/L)*x[0] + (omega*lambda_m/L)*sin_theta + u[0]/L
di_beta = (-R/L)*x[1] - (omega*lambda_m/L)*cos_theta + u[1]/L
return x + np.array([di_alpha*Ts, di_beta*Ts, 0, omega*Ts])
```
重点在SRCKF的实现。传统的协方差更新P=SPD,在迭代中可能丢失正定性。这里改用Cholesky分解
的平方根形式,每次更新时操作的是S矩阵而不是P矩阵,相当于把数值稳定性焊死在算法结构里。
```python
def srckf_predict(S, Q):
# 平方根协方差预测
n = S.shape[0]
# 生成容积点(这里省略具体生成过程)
X = cubature_points(n)