4. 差分方程的Z变换解法

说实话,Z变换这东西,我刚接触时也觉得挺抽象的。但干了几十年信号处理,我越来越觉得它就是个好工具——把复杂的差分方程变成简单的代数问题。今天咱们就聊聊这个。

4.1 Z变换的定义

先说说Z变换是啥。说白了,它就是把离散时间信号映射到复频域的一种变换。你想想看,连续系统有拉普拉斯变换,离散系统就有Z变换,这俩是对应的。

对于一个离散序列 x[n],它的Z变换定义为:

X(z) = Σ x[n] z^(-n)    (n从 -∞ 到 +∞)

这里 z 是个复变量。嗯,要注意,这个求和不一定收敛,只有在一定范围内才收敛,这个范围叫收敛域(ROC)。

重要概念:Z变换的收敛域决定了系统的稳定性和因果性。我在项目中遇到过好几次,明明Z变换表达式写对了,但收敛域搞错了,结果系统分析全翻车。

实际工程中,我们更常用的是单边Z变换(n从0开始),因为大多数系统都是因果的:

X(z) = Σ x[n] z^(-n)    (n从 0 到 +∞)

4.2 Z变换的性质

Z变换之所以好用,就是因为它有一堆漂亮的性质。我个人习惯把这些性质记在脑子里,用起来特别顺手。

性质 时域 Z域
线性 a·x[n] + b·y[n] a·X(z) + b·Y(z)
移位(右移) x[n-k] z^(-k)·X(z)
移位(左移) x[n+k] z^k·[X(z) - Σ x[i]·z^(-i)]
卷积 x[n] * h[n] X(z)·H(z)
初值定理 x[0] lim(z→∞) X(z)
终值定理 lim(n→∞) x[n] lim(z→1) (z-1)·X(z)

这里我最想强调的是移位性质。为什么?因为差分方程里到处都是移位项。你想想看,y[n+1] 和 y[n] 之间的关系,用Z变换一处理,就变成了 z·Y(z) - z·y[0]。简单吧?

我的小技巧:处理左移时,千万别忘了减去初始条件。我曾经在这个坑里摔过好几次——算到一半发现结果不对,回头一看,初始条件没处理。

4.3 利用Z变换求解差分方程

好了,重头戏来了。怎么用Z变换解差分方程?我一般分三步走:

  1. Z变换:对差分方程两边同时做Z变换
  2. 代数求解:在Z域解出 Y(z)
  3. 逆Z变换:把 Y(z) 变回 y[n]

举个例子,假设我们有差分方程:

y[n+2] - 3y[n+1] + 2y[n] = x[n]
初始条件:y[0] = 1, y[1] = 2
输入:x[n] = u[n](单位阶跃)

第一步,两边做Z变换:

z²Y(z) - z²y[0] - zy[1] - 3[zY(z) - zy[0]] + 2Y(z) = X(z)

代入初始条件:

z²Y(z) - z²·1 - z·2 - 3zY(z) + 3z·1 + 2Y(z) = z/(z-1)

第二步,整理出 Y(z):

(z² - 3z + 2)Y(z) = z/(z-1) + z² + 2z - 3z
Y(z) = [z/(z-1) + z² - z] / (z² - 3z + 2)

嗯,看着有点乱,但别怕。化简一下:

Y(z) = [z + (z² - z)(z-1)] / [(z-1)(z² - 3z + 2)]
     = [z + z(z-1)²] / [(z-1)(z-1)(z-2)]
     = z[1 + (z-1)²] / [(z-1)²(z-2)]

注意:这里分母因式分解要仔细。z² - 3z + 2 = (z-1)(z-2),别搞错了。我见过有人把 (z-1) 和 (z-2) 搞混,结果逆变换全错。

4.4 逆Z变换

最后一步,把 Y(z) 变回 y[n]。常用的方法有三种:

  • 部分分式展开法:把 Y(z) 拆成简单项之和
  • 幂级数展开法:直接做长除法
  • 留数法:用围线积分(理论课常用,工程上少用)

我个人最常用的是部分分式展开法。为啥?因为简单、直观、不容易出错。

继续上面的例子,我们把 Y(z)/z 做部分分式展开(注意,这里除个z是为了方便查表):

Y(z)/z = [1 + (z-1)²] / [(z-1)²(z-2)]

设:Y(z)/z = A/(z-1) + B/(z-1)² + C/(z-2)

解出:A = -1, B = -1, C = 2

所以:Y(z) = -z/(z-1) - z/(z-1)² + 2z/(z-2)

查Z变换表:

z/(z-1) → u[n]
z/(z-1)² → n·u[n]
z/(z-2) → 2^n·u[n]

因此:

y[n] = -u[n] - n·u[n] + 2·2^n·u[n]
     = (2^(n+1) - n - 1)·u[n]

验证一下:n=0时,y[0] = 2^1 - 0 - 1 = 1,符合初始条件。n=1时,y[1] = 2^2 - 1 - 1 = 2,也符合。完美!

下面这张图总结了整个流程:

Z变换求解差分方程流程图 步骤1:Z变换 差分方程 → Z域方程 步骤2:代数求解 解出 Y(z) 表达式 步骤3:逆Z变换 Y(z) → y[n] 关键点 ⚠ 初始条件不能漏 ⚠ 收敛域要确认 ⚠ 部分分式要仔细 三步走,步步为营,差分方程不再难

说实话,Z变换解差分方程,说白了就是把时域的递推关系变成Z域的代数方程。你想想看,本来要一步一步迭代算半天,现在直接代数求解再查表,多省事。

我的经验:刚开始学的时候,建议多练几个例子。特别是初始条件不同的情况,多做几遍就熟了。我曾经带过一个实习生,他练了20道题后,闭着眼睛都能做。

好了,Z变换解差分方程就聊到这儿。记住三步走:Z变换、代数求解、逆Z变换。每一步都有坑,但踩过几次就记住了。


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