4. 离散系统数学模型:差分方程、脉冲传递函数、零极点图

各位,咱们今天聊聊离散系统的数学模型。说实话,这部分内容是我当年学控制时觉得最「绕」的一块。但后来做项目多了才发现,搞懂了这三个东西——差分方程、脉冲传递函数、零极点图——你基本就能在数字控制的世界里横着走了。

为什么这么说?因为无论是设计数字滤波器,还是做电机伺服控制,底层都是这三样东西在撑腰。我习惯把它们看作「三位一体」:差分方程是时域的描述,脉冲传递函数是频域的工具,零极点图则是直观的「性格画像」。

离散系统数学模型 · 三位一体 差分方程 时域描述 y(k) + a₁y(k-1) + ... 脉冲传递函数 z域描述 G(z) = Y(z)/U(z) 零极点图 稳定性·响应特性 ○极点 ×零点 Z变换 ↔ 逆Z变换 ↔ 差分方程 三者等价,只是看问题的角度不同

4.1 差分方程:离散世界的「运动方程」

先说说差分方程。连续系统用微分方程描述,离散系统呢?用差分方程。说白了,就是把「导数」换成了「差值」。

一个典型的 n 阶差分方程长这样:

y(k) + a₁·y(k-1) + a₂·y(k-2) + ... + aₙ·y(k-n) 
    = b₀·u(k) + b₁·u(k-1) + ... + bₘ·u(k-m)

这里 y(k) 是当前输出,y(k-1) 是上一拍的输出,以此类推。u(k) 是当前输入。

核心理解:差分方程描述的是「当前输出与过去输入输出之间的关系」。你想想看,这不就是数字系统的「记忆」吗?

我在项目中遇到过一件事。有一次调试一个温控系统,采样周期设得太大,结果差分方程算出来的控制量总是滞后。后来把采样周期从 1 秒改成 0.2 秒,系统立马稳了。嗯,这里要注意:差分方程的系数跟采样周期是绑定的,换了采样率,系数必须重新算。

4.2 脉冲传递函数:z 域里的「黑箱」

差分方程在时域里挺好用,但分析稳定性、频率响应这些,还是得靠脉冲传递函数。

怎么得到它?对差分方程两边做 Z 变换,然后整理成输出/输入的形式:

G(z) = Y(z) / U(z) 
     = (b₀ + b₁·z⁻¹ + ... + bₘ·z⁻ᵐ) / (1 + a₁·z⁻¹ + ... + aₙ·z⁻ⁿ)

我个人习惯把 G(z) 看作一个「黑箱」——输入一串数字,输出另一串数字。这个黑箱的特性,完全由分子分母的系数决定。

实用技巧:在 MATLAB 里用 tf([b0 b1 ... bm], [1 a1 ... an], Ts) 就能直接得到脉冲传递函数。Ts 是采样周期,千万别忘了填。

我曾经犯过一个低级错误:把连续传递函数 G(s) 直接拿来当 G(z) 用。结果仿真跑出来完全不对。后来才意识到,离散化这一步不能省。常用的方法有零阶保持器法、双线性变换法,具体用哪个看你的应用场景。

4.3 零极点图:一眼看穿系统「性格」

零极点图,说白了就是把 G(z) 的分子根(零点)和分母根(极点)画在复平面上。别小看这张图,它能告诉你的事太多了:

  • 稳定性:所有极点都在单位圆内 → 系统稳定。只要有一个极点在圆外 → 系统发散。
  • 响应速度:极点越靠近原点,响应越快。极点靠近单位圆,响应就慢吞吞的。
  • 振荡特性:极点在负实轴上,容易产生振荡。极点有虚部,就会有衰减振荡。

⚠️ 避坑指南:我曾经设计过一个数字滤波器,零极点图看着挺漂亮,所有极点都在单位圆内。但实际跑起来,输出一直在小幅振荡。查了半天才发现——有个极点虽然在内,但离单位圆太近了(0.98),导致衰减极慢。所以记住:不仅要看「在不在圆内」,还要看「离圆边有多远」。

4.4 三者之间的「互转」关系

这三个模型其实是等价的。你只要知道其中一个,就能推出另外两个。我习惯用一张表来记它们的关系:

已知模型 转换方法 得到模型
差分方程 Z 变换 脉冲传递函数
脉冲传递函数 逆 Z 变换 差分方程
脉冲传递函数 分子分母因式分解 零极点图
零极点图 写出因式形式 脉冲传递函数

举个例子。假设你有一个差分方程:

y(k) - 1.5·y(k-1) + 0.7·y(k-2) = 0.2·u(k) + 0.1·u(k-1)

做 Z 变换得到:

G(z) = (0.2 + 0.1·z⁻¹) / (1 - 1.5·z⁻¹ + 0.7·z⁻²)

分子分母同乘 z²:

G(z) = (0.2·z² + 0.1·z) / (z² - 1.5·z + 0.7)

然后求根。分母的根是极点,分子的根是零点。画出来,你就能直观判断这个系统的稳定性了。

我的经验:实际项目中,我很少手动算这些。用 MATLAB 的 roots() 函数求根,用 pzmap() 画零极点图,几分钟搞定。但理解背后的原理很重要——不然你连图都看不懂,更别说调试了。

4.5 一个完整的例子

咱们走一遍完整的流程。假设你要设计一个数字低通滤波器,截止频率 100 Hz,采样频率 1000 Hz。

第一步,用双线性变换法得到脉冲传递函数:

G(z) = (0.0675 + 0.135·z⁻¹ + 0.0675·z⁻²) / (1 - 1.143·z⁻¹ + 0.4128·z⁻²)

第二步,写出对应的差分方程:

y(k) = 1.143·y(k-1) - 0.4128·y(k-2) + 0.0675·u(k) + 0.135·u(k-1) + 0.0675·u(k-2)

第三步,画零极点图。极点大概在 0.571 ± j0.293,都在单位圆内。零点在 -1(双重根),正好在单位圆上。

你看,从设计指标到实际可运行的代码,就是这么过来的。差分方程是最终写进单片机里的东西,脉冲传递函数是设计阶段的分析工具,零极点图则是验证手段。

小提示:写代码实现差分方程时,我习惯用「直接 II 型」结构。它用的存储单元最少,适合资源受限的嵌入式系统。具体实现可以查一下「数字滤波器结构」的相关资料。

好了,这一章的内容就到这儿。记住我说的:差分方程、脉冲传递函数、零极点图,三位一体,缺一不可。搞懂了它们,离散控制的大门就算正式打开了。


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