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 参数辨识方法

模型建好了,参数怎么确定?我推荐用最小二乘法。具体步骤:

  1. 采集一组输入输出数据(建议用正弦扫频信号,频率0.1-10Hz)
  2. 初始化阈值ri(按指数分布)
  3. 构造回归矩阵(每个算子的输出作为一列)
  4. 用最小二乘法求解权重wi
  5. 验证模型精度,如果不满足要求,调整算子个数或阈值分布
% 伪代码示例
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模型知识体系 Prandtl-Ishlinskii模型 经典PI模型 广义PI (GPI) 改进型PI (MPI) 对称迟滞 参数少,计算快 精度一般 不对称迟滞 引入死区算子 精度较高 不对称迟滞 修改Play算子 精度最高 应用:压电陶瓷前馈补偿、精密定位控制 参数辨识:最小二乘法 + 扫频数据

这张图把PI模型的三个变种放在一起对比。你可以看到,从经典PI到GPI再到MPI,精度在提升,但参数也在增加。实际选型时,我建议你先用经典PI试试水,如果精度不够再升级。别一上来就上最复杂的模型——杀鸡焉用牛刀。

好了,PI模型就讲到这里。记住一句话:模型是工具,不是目的。选哪个模型,取决于你的控制精度要求和计算资源限制。我在项目中见过有人用经典PI做出了0.5%的精度,也见过有人用MPI反而因为参数太多调不好。关键还是理解每个模型的适用场景。


公众号:蓝海资料掘金营,微信deep3321