3. 迟滞数学模型(二):Prandtl-Ishlinskii(PI)模型及其改进型
好,咱们接着聊迟滞模型。上一章我们讲了Preisach模型,那个模型虽然精度高,但说实话,计算量有点大。我在实际项目中用过一次,跑一次参数辨识,电脑风扇呼呼转了半天。后来我就换成了今天要讲的PI模型——Prandtl-Ishlinskii模型。
PI模型是什么?说白了,它就是Preisach模型的一个简化版。Preisach用了无数个矩形滞回环叠加,而PI模型更聪明——它用一堆基本形状的算子叠加。这些算子形状固定,参数少,计算起来快得多。
核心思想: PI模型将复杂的迟滞行为,分解为多个基本迟滞算子的加权叠加。每个算子只描述一个简单的“上升-下降”行为,组合起来就能模拟复杂的迟滞曲线。
3.1 基本PI算子:Play算子
PI模型里最核心的算子叫Play算子。你想想看,这个名字很形象——就像机械结构里的“间隙”或“空回”。
举个例子:你转动一个旋钮,但旋钮和阀门之间有个间隙。你转的时候,前半段是空的,后半段才真正带动阀门。这就是Play算子的物理直觉。
数学上,Play算子的定义是这样的:
给定阈值 r > 0,输入 u(t),输出 y(t):
y(0) = max(u(0) - r, min(u(0) + r, y0))
对于 t > 0:
y(t) = max(u(t) - r, min(u(t) + r, y(t-1)))
嗯,这里要注意:r就是阈值,它决定了这个算子对输入变化的“敏感度”。r越小,算子越灵敏;r越大,算子越迟钝。
我在项目中遇到过一个问题:一开始我只用了3个Play算子,结果模型精度很差,迟滞环的形状完全对不上。后来我增加到10个算子,效果就好多了。一般来说,5-15个Play算子是比较合理的范围。
3.2 PI模型的数学表达
多个Play算子加权求和,就构成了PI模型:
y(t) = w0 * u(t) + Σ wi * Pri[u](t)
其中:
- w0 是线性增益
- wi 是第i个算子的权重
- Pri[u](t) 是第i个Play算子的输出
- i = 1, 2, ..., N,N是算子个数
你看,这个公式其实很简洁。一个线性项加上一堆Play算子的加权和。参数就是权重wi和阈值ri。辨识起来比Preisach模型简单多了。
| 参数 | 含义 | 典型取值范围 |
|---|---|---|
| w0 | 线性增益 | 0.5 ~ 2.0 |
| wi | 算子权重 | 0.01 ~ 1.0 |
| ri | 算子阈值 | 0 ~ 输入最大值 |
| N | 算子个数 | 5 ~ 15 |
个人经验: 阈值ri的选取有个小技巧——我习惯按指数分布来选。比如输入范围是0-100V,我会选ri = [1, 2, 4, 8, 16, 32, 64]。这样小阈值算子负责精细调节,大阈值算子负责大范围响应,覆盖更全面。
3.3 经典PI模型的局限性
经典PI模型虽然好用,但有个硬伤——它只能描述对称的迟滞环。你想想看,实际压电陶瓷的迟滞环是对称的吗?
不是。实际迟滞环往往是不对称的,上升和下降的曲线形状不一样。经典PI模型在这方面就力不从心了。
我曾经在一个精密定位项目中吃过这个亏。用经典PI模型做前馈补偿,结果定位误差始终在5%左右下不去。折腾了两周,最后发现问题出在模型本身——它天生无法描述不对称迟滞。
避坑指南: 如果你的压电执行器工作在大信号范围(比如满量程的80%以上),迟滞不对称性会非常明显。这时候经典PI模型基本不够用,必须上改进型。
3.4 改进型PI模型
针对不对称问题,学术界和工业界提出了几种改进方案。我个人最常用的是以下两种:
3.4.1 广义PI模型(GPI)
广义PI模型在经典PI的基础上,引入了死区算子。死区算子可以单独描述上升和下降过程中的不同行为。
死区算子定义:
Sd[u](t) = max(u(t) - d, 0) - max(-u(t) - d, 0)
其中 d 是死区阈值
GPI模型的输出就是Play算子和死区算子的组合:
y(t) = w0 * u(t) + Σ wi * Pri[u](t) + Σ vj * Sdj[u](t)
多了一组死区算子,参数多了,但精度提升很明显。我在一个纳米定位平台上试过,GPI模型能把误差从5%降到1%以内。
3.4.2 改进型PI模型(MPI)
另一种思路是修改Play算子本身。经典Play算子的上升和下降斜率是固定的,MPI模型让它们可以不同。
具体做法是引入两个参数:上升斜率α和下降斜率β。这样每个算子就能独立描述上升和下降的差异。
MPI算子:
y(t) = α * max(u(t) - r, min(u(t) + r, y(t-1)/β))
嗯,这个公式看起来有点绕。但实际效果确实好。我建议你在精度要求高的场合优先考虑MPI模型。
3.5 模型对比与选择建议
| 模型类型 | 参数数量 | 对称迟滞 | 不对称迟滞 | 计算速度 |
|---|---|---|---|---|
| 经典PI | 少(2N+1) | ★★★★★ | ★★ | 极快 |
| 广义PI(GPI) | 中(3N+1) | ★★★★★ | ★★★★ | 快 |
| 改进型PI(MPI) | 中(3N+1) | ★★★★★ | ★★★★★ | 快 |
我的选择原则:
- 控制精度要求不高(5%以内),用经典PI,简单快速
- 精度要求高(1%以内),且迟滞不对称明显,用MPI
- 需要在线实时更新模型,用GPI,参数辨识更稳定
3.6 参数辨识方法
模型建好了,参数怎么确定?我推荐用最小二乘法。具体步骤:
- 采集一组输入输出数据(建议用正弦扫频信号,频率0.1-10Hz)
- 初始化阈值ri(按指数分布)
- 构造回归矩阵(每个算子的输出作为一列)
- 用最小二乘法求解权重wi
- 验证模型精度,如果不满足要求,调整算子个数或阈值分布
% 伪代码示例
function [w, y_pred] = pi_identification(u, y_meas, r)
% u: 输入信号
% y_meas: 实测输出
% r: 阈值向量
N = length(r);
Phi = zeros(length(u), N+1);
Phi(:,1) = u; % 线性项
for i = 1:N
Phi(:,i+1) = play_operator(u, r(i));
end
% 最小二乘求解
w = (Phi' * Phi) \ (Phi' * y_meas);
y_pred = Phi * w;
end
注意: 采集数据时,一定要覆盖整个工作范围。我曾经偷懒只采集了半幅数据,结果模型在另外半幅完全失效。数据质量决定模型上限,这个道理在哪个领域都适用。
3.7 本章知识体系
下面这张图总结了PI模型的核心逻辑,你可以对照着回顾一下:
这张图把PI模型的三个变种放在一起对比。你可以看到,从经典PI到GPI再到MPI,精度在提升,但参数也在增加。实际选型时,我建议你先用经典PI试试水,如果精度不够再升级。别一上来就上最复杂的模型——杀鸡焉用牛刀。
好了,PI模型就讲到这里。记住一句话:模型是工具,不是目的。选哪个模型,取决于你的控制精度要求和计算资源限制。我在项目中见过有人用经典PI做出了0.5%的精度,也见过有人用MPI反而因为参数太多调不好。关键还是理解每个模型的适用场景。
公众号:蓝海资料掘金营,微信deep3321