跳转到内容
新建笔记

信号与系统 03:Z 变换、延迟与数字传递函数

完整入口 · 上一章:拉普拉斯与 RC · 下一章:傅里叶与采样

1. 当前值、整条序列和变换结果

跳转到“1. 当前值、整条序列和变换结果”

设 ADC 采到:

x[0]=1,x[1]=2,x[2]=3,x[0]=1,\qquad x[1]=2,\qquad x[2]=3,

其余编号的值都是 0。

写法含义
x[1]=2x[1]=2编号 1 的一个数
x[n]x[n]按编号描述整条序列
X(z)X(z)对整条序列做 Z 变换得到的函数
X(2)X(2)该函数在 z=2z=2 时的一个取值

数字滤波程序处理当前点时,当前输入始终是 x[n]x[n]。把整个序列写成 X(z)X(z) 是数学分析的一步,不能说一个当前点“变成了整个 X(z)X(z)”。

2. 从加权求和定义 Z 变换

跳转到“2. 从加权求和定义 Z 变换”

双边 Z 变换定义:

X(z)=∑n=−∞∞x[n]z−n.\boxed{X(z)=\sum_{n=-\infty}^{\infty}x[n]z^{-n}}.

此处 nn 是整数,zz 是复变量,z−n=1/znz^{-n}=1/z^n。例如:

nnx[n]x[n]权重本项
01z0=1z^0=111
12z−1=1/zz^{-1}=1/z2z−12z^{-1}
23z−2=1/z2z^{-2}=1/z^23z−23z^{-2}

加起来:

X(z)=1+2z−1+3z−2.\boxed{X(z)=1+2z^{-1}+3z^{-2}}.

临时令 z=2z=2:

X(2)=1+22+322=2.75.X(2)=1+\frac22+\frac3{2^2}=2.75.

完整表达式保留了位置与系数;单个 2.75 不能恢复三个采样值。[3,2,1][3,2,1] 虽然直接相加也是 6,但变换为 3+2z−1+z−23+2z^{-1}+z^{-2},与原序列不同。

∑x[n]\sum x[n] 只是在允许收敛时对应 z=1z=1 的取值,不能用它替代 Z 变换定义。一般的无限序列还必须声明加权和收敛的 zz 范围。

3. 为什么选择 z−nz^{-n} 这样的权重

跳转到“3. 为什么选择 z−nz^{-n}z−n 这样的权重”

要求每向后移动一个编号,就获得同一个乘数。最自然的权重因此是几何序列:

1,z−1,z−2,…1,\quad z^{-1},\quad z^{-2},\quad\ldots

后一个权重等于前一个权重乘 z−1z^{-1}。这使移位、线性叠加和卷积的处理很简单。

令:

z=rejΩ,r>0,z=re^{j\Omega},\qquad r>0,

则:

z−n=r−ne−jΩn.z^{-n}=r^{-n}e^{-j\Omega n}.

r−nr^{-n} 控制远处采样的权重,e−jΩne^{-j\Omega n} 比较不同振荡模式。r=1r=1 时权重仅有振荡,Z 变换在单位圆上的取值与 DTFT 连接。这里 zz 无量纲,它不是采样率,也不是内存地址。

4. 用具体数列证明延迟一拍

跳转到“4. 用具体数列证明延迟一拍”

定义 d[n]=x[n−1]d[n]=x[n-1],表示每个编号取原序列的上一点:

nnx[n]x[n]d[n]=x[n−1]d[n]=x[n-1]
01x[−1]=0x[-1]=0
12x[0]=1x[0]=1
23x[1]=2x[1]=2
30x[2]=3x[2]=3

因此延迟后的序列为 [0,1,2,3][0,1,2,3]。仍按同一定义变换:

D(z)=0+1z−1+2z−2+3z−3=z−1(1+2z−1+3z−2)=z−1X(z).\begin{aligned} D(z) &=0+1z^{-1}+2z^{-2}+3z^{-3}\\ &=z^{-1}(1+2z^{-1}+3z^{-2})\\ &=\boxed{z^{-1}X(z)}. \end{aligned}

数值没有变,位置整体往后移了一格。每一项的幂次都多了 −1-1,因此能够提取共同因子。

5. 对任意序列证明移位规则

跳转到“5. 对任意序列证明移位规则”

双边求和中:

D(z)=∑n=−∞∞x[n−m]z−n.D(z)=\sum_{n=-\infty}^{\infty}x[n-m]z^{-n}.

令 k=n−mk=n-m,则 n=k+mn=k+m;整数范围仍覆盖全部整数:

D(z)=∑k=−∞∞x[k]z−(k+m)=z−m∑kx[k]z−k=z−mX(z).\begin{aligned} D(z) &=\sum_{k=-\infty}^{\infty}x[k]z^{-(k+m)}\\ &=z^{-m}\sum_k x[k]z^{-k}\\ &=\boxed{z^{-m}X(z)}. \end{aligned}

延迟 mm 拍对应乘 z−mz^{-m}。若均匀采样间隔为 TsT_s,实际延迟是 mTsmT_s。ROC 在有限的非零 zz 处保持相同,原点和无穷远的包含情况可能改变。

单边求和为什么有初始项

跳转到“单边求和为什么有初始项”

单边定义:

X+(z)=∑n=0∞x[n]z−n.X_+(z)=\sum_{n=0}^{\infty}x[n]z^{-n}.

对延迟一拍,从 n=0n=0 起展开:

Z+{x[n−1]}=x[−1]+x[0]z−1+x[1]z−2+⋯=x[−1]+z−1X+(z).\begin{aligned} \mathcal Z_+\{x[n-1]\} &=x[-1]+x[0]z^{-1}+x[1]z^{-2}+\cdots\\ &=\boxed{x[-1]+z^{-1}X_+(z)}. \end{aligned}

只有 x[−1]=0x[-1]=0 时才简化为 z−1X+z^{-1}X_+。延迟 mm 点的初始项:

Z+{x[n−m]}=z−mX+(z)+∑r=0m−1x[r−m]z−r.\mathcal Z_+\{x[n-m]\} =z^{-m}X_+(z)+\sum_{r=0}^{m-1}x[r-m]z^{-r}.

所以“开始之前输入为零”是单边推导里的明确条件;双边规则则已经把负编号部分包含在原变换中。

6. 真实程序怎样延迟一拍

跳转到“6. 真实程序怎样延迟一拍”

分析式中的 z−1z^{-1} 不会自动存数据。实际程序需要一个变量:

double previous = 0.0; // 启动前 x[-1] = 0
double process(double current) {
double delayed = previous; // 先读取旧值
previous = current; // 再为下次保存
return delayed;
}

逐次执行:

当前编号输入更新前 previous返回值更新后 previous
01001
12112
23223
30330

如果先写 previous=current,再读 delayed,返回的就会是当前值,延迟被消掉。多拍延迟需要移位寄存器或循环缓冲区;启动时缓冲区的值就是系统的初始状态。

这里的全局 previous 只服务于一条数据流。重新开始记录时应按所需初值复位;多个通道应分别保存自己的状态,不能让它们交错调用同一个全局变量。下一节的同名变量是另一个独立例子,两段代码应分别编译。

7. 两点平均器如何得到传递函数

跳转到“7. 两点平均器如何得到传递函数”

实际规则:

y[n]=12x[n]+12x[n−1].y[n]=\frac12x[n]+\frac12x[n-1].

零初始历史下,对整个等式做 Z 变换:

Y(z)=12X(z)+12z−1X(z).Y(z)=\frac12X(z)+\frac12z^{-1}X(z).

提取公共因子:

Y(z)=(12+12z−1)X(z).Y(z)=\left(\frac12+\frac12z^{-1}\right)X(z).

因此:

H(z)=12(1+z−1).\boxed{H(z)=\frac12(1+z^{-1})}.

冲激输入产生 h[n]=[0.5,0.5]h[n]=[0.5,0.5],其 Z 变换就是 H(z)H(z)。

用多项式乘法验证 [1,2,3][1,2,3]:

Y(z)=(0.5+0.5z−1)(1+2z−1+3z−2)=0.5+(1+0.5)z−1+(1.5+1)z−2+1.5z−3=0.5+1.5z−1+2.5z−2+1.5z−3.\begin{aligned} Y(z) &=(0.5+0.5z^{-1})(1+2z^{-1}+3z^{-2})\\ &=0.5+(1+0.5)z^{-1}+(1.5+1)z^{-2}+1.5z^{-3}\\ &=0.5+1.5z^{-1}+2.5z^{-2}+1.5z^{-3}. \end{aligned}

系数读回 [0.5,1.5,2.5,1.5][0.5,1.5,2.5,1.5],与时域计算相同。

double previous = 0.0;
double moving_average(double current) {
double output = 0.5 * current + 0.5 * previous;
previous = current;
return output;
}

8. 一般卷积为什么变成乘法

跳转到“8. 一般卷积为什么变成乘法”

零状态离散 LTI 系统:

y[n]=∑kh[k]x[n−k].y[n]=\sum_k h[k]x[n-k].

在绝对收敛等允许交换求和的条件下:

Y(z)=∑n∑kh[k]x[n−k]z−n=∑kh[k]∑nx[n−k]z−n.\begin{aligned} Y(z) &=\sum_n\sum_k h[k]x[n-k]z^{-n}\\ &=\sum_k h[k]\sum_n x[n-k]z^{-n}. \end{aligned}

令 m=n−km=n-k,则 z−n=z−kz−mz^{-n}=z^{-k}z^{-m}:

Y(z)=(∑kh[k]z−k)(∑mx[m]z−m)=H(z)X(z).Y(z) =\left(\sum_k h[k]z^{-k}\right) \left(\sum_m x[m]z^{-m}\right) =\boxed{H(z)X(z)}.

与连续卷积变成拉普拉斯乘法的逻辑相同。有限序列时,这就是普通多项式乘法,系数卷积无需额外收敛讨论。

9. 指数序列、几何级数与 ROC

跳转到“9. 指数序列、几何级数与 ROC”

对因果序列 x[n]=anu[n]x[n]=a^nu[n]:

X(z)=∑n=0∞anz−n=∑n=0∞(az−1)n=11−az−1,∣az−1∣<1.\begin{aligned} X(z) &=\sum_{n=0}^{\infty}a^nz^{-n}\\ &=\sum_{n=0}^{\infty}(az^{-1})^n\\ &=\boxed{\frac1{1-az^{-1}}}, \qquad |az^{-1}|<1. \end{aligned}

因此 ROC 为:

∣z∣>∣a∣.|z|>|a|.

例如 a=0.5a=0.5,序列 [1,0.5,0.25,…][1,0.5,0.25,\ldots],ROC 是半径 0.5 的圆外部。

令 a≠0a\ne0,换成左侧序列 x[n]=−anu[−n−1]x[n]=-a^nu[-n-1]:

X(z)=−∑n=−∞−1anz−n=−∑m=1∞(z/a)m=−z/a1−z/a=11−az−1,∣z∣<∣a∣.\begin{aligned} X(z)&=-\sum_{n=-\infty}^{-1}a^nz^{-n}\\ &=-\sum_{m=1}^{\infty}(z/a)^m\\ &=-\frac{z/a}{1-z/a}\\ &=\frac1{1-az^{-1}},\qquad |z|<|a|. \end{aligned}

同一分式有不同 ROC,对应不同序列。MIT Z 变换讲次 将 ROC 作为变换描述的必要部分。

反变换不能只背分式。例如:

11−0.5z−1=1+0.5z−1+0.25z−2+⋯ ,∣z∣>0.5\frac1{1-0.5z^{-1}} =1+0.5z^{-1}+0.25z^{-2}+\cdots,\quad |z|>0.5

才能读回右侧指数。若指定圆内 ROC,则须改用左侧展开。

10. 从差分方程推导 FIR/IIR

跳转到“10. 从差分方程推导 FIR/IIR”

一般常系数方程:

y[n]+∑r=1Pary[n−r]=∑m=0Qbmx[n−m].y[n]+\sum_{r=1}^{P}a_r y[n-r] =\sum_{m=0}^{Q}b_mx[n-m].

零初始历史时:

(1+∑r=1Parz−r)Y(z)=(∑m=0Qbmz−m)X(z).\left(1+\sum_{r=1}^{P}a_rz^{-r}\right)Y(z) =\left(\sum_{m=0}^{Q}b_mz^{-m}\right)X(z).

于是:

H(z)=∑m=0Qbmz−m1+∑r=1Parz−r.\boxed{ H(z)=\frac{\sum_{m=0}^{Q}b_mz^{-m}} {1+\sum_{r=1}^{P}a_rz^{-r}} }.

实现时再解出当前输出:

y[n]=∑m=0Qbmx[n−m]−∑r=1Pary[n−r].y[n]=\sum_{m=0}^{Q}b_mx[n-m]-\sum_{r=1}^{P}a_ry[n-r].

求法中分母写加号,实现中就要减去对应项。不同资料可能把反馈系数的负号预先并入符号,要看原方程。

  • FIR 指冲激响应只有有限个非零点。常用实现只加权有限输入历史。
  • IIR 指冲激响应延续无限多个点。常见实现使用输出反馈,但递归实现并不在所有特殊情况都意味着无限响应。

11. 一阶递归平滑器与初始输出

跳转到“11. 一阶递归平滑器与初始输出”

规则:

y[n]=a y[n−1]+(1−a)x[n],0<a<1.y[n]=a\,y[n-1]+(1-a)x[n],\qquad 0<a<1.

若 y[−1]=0y[-1]=0,传递函数为:

Y=az−1Y+(1−a)X⇒H(z)=1−a1−az−1.Y=az^{-1}Y+(1-a)X \Rightarrow \boxed{H(z)=\frac{1-a}{1-az^{-1}}}.

因果冲激响应:

h[n]=(1−a)anu[n].h[n]=(1-a)a^nu[n].

hh 无限延续但逐渐减小,因此是 IIR。对输入单位阶跃,递推:

y[0]=1−a,y[1]=a(1−a)+(1−a)=1−a2.y[0]=1-a,\quad y[1]=a(1-a)+(1-a)=1-a^2.

假设 y[n−1]=1−any[n-1]=1-a^n,则:

y[n]=a(1−an)+(1−a)=1−an+1.y[n]=a(1-a^n)+(1-a)=1-a^{n+1}.

所以:

y[n]=1−an+1,n≥0.\boxed{y[n]=1-a^{n+1}},\qquad n\ge0.

如果 y[−1]=y−1≠0y[-1]=y_{-1}\ne0,单边变换给出:

Y=a[z−1Y+y−1]+(1−a)X,Y=a[z^{-1}Y+y_{-1}]+(1-a)X, Y=H(z)X+ay−11−az−1.Y=H(z)X+\frac{a y_{-1}}{1-az^{-1}}.

反变换后加上 an+1y−1a^{n+1}y_{-1};完整阶跃响应是:

y[n]=1+(y−1−1)an+1.y[n]=1+(y_{-1}-1)a^{n+1}.

12. 极点与稳定:为何通常要求单位圆内

跳转到“12. 极点与稳定:为何通常要求单位圆内”

因果一阶系统极点在 z=az=a,ROC 为 ∣z∣>∣a∣|z|>|a|。其冲激响应绝对和:

∑n=0∞∣h[n]∣=∣1−a∣∑n=0∞∣a∣n.\sum_{n=0}^{\infty}|h[n]| =|1-a|\sum_{n=0}^{\infty}|a|^n.

∣a∣<1|a|<1 时有限。对因果有理系统,约简后极点严格位于单位圆内,对应单位圆包含在 ROC 中,得到 BIBO 稳定。

a=1a=1 时需要重新看具体分子与约简,不能把 0/00/0 当作普通滤波器。本节一般判据使用约简后有效传递函数;数字积分器 H=1/(1−z−1)H=1/(1-z^{-1}) 极点在 1,常数输入使输出增长。

非因果系统不能只用“极点必须在圆内”判断。例如 1/(1−2z−1)1/(1-2z^{-1}) 若取 ∣z∣<2|z|<2,左侧冲激响应 −2nu[−n−1]-2^nu[-n-1] 绝对可和,是稳定但非因果的系统。

内部状态稳定与输入输出稳定的区别与连续系统相同;还需留意有限字长、溢出和量化引起的实际实现问题。

13. 两点平均器的频率响应

跳转到“13. 两点平均器的频率响应”

单位圆在 ROC 内,令 z=ejΩz=e^{j\Omega}:

H(ejΩ)=12(1+e−jΩ)=12e−jΩ/2(ejΩ/2+e−jΩ/2)=e−jΩ/2cos⁡(Ω/2).\begin{aligned} H(e^{j\Omega}) &=\frac12(1+e^{-j\Omega})\\ &=\frac12 e^{-j\Omega/2} (e^{j\Omega/2}+e^{-j\Omega/2})\\ &=\boxed{e^{-j\Omega/2}\cos(\Omega/2)}. \end{aligned}

在 0≤Ω<π0\le\Omega<\pi,cos⁡(Ω/2)>0\cos(\Omega/2)>0:

∣H∣=cos⁡(Ω/2),arg⁡H=−Ω/2.|H|=\cos(\Omega/2),\qquad \arg H=-\Omega/2.

在 Ω=π\Omega=\pi 幅值为零,相位没有定义。群延迟为:

τg=−darg⁡HdΩ=12 sample.\tau_g=-\frac{d\arg H}{d\Omega}=\frac12\ \text{sample}.

程序存了一点历史,为什么群延迟却是半点?输出是两个相邻点的平均,等效时间中心位于两个采样点中间;存储深度与频域群延迟是不同概念。

直流 z=1z=1 增益为 1;交替模式 z=−1z=-1 增益为 0。输入 10,14,10,14,…10,14,10,14,\ldots 可写成 12−2(−1)n12-2(-1)^n,零历史启动时输出 5,12,12,…5,12,12,\ldots。第一点是暂态,不能声称所有点都是 12。

-3 dB 点:

cos⁡(Ωc/2)=1/2⇒Ωc=π/2⇒fc=fs/4.\cos(\Omega_c/2)=1/\sqrt2 \Rightarrow \Omega_c=\pi/2 \Rightarrow f_c=f_s/4.

这只是两点平均器的结果,不是所有数字低通的统一截止频率。

14. 为什么复指数能读取系统增益

跳转到“14. 为什么复指数能读取系统增益”

对双边输入 x[n]=z0nx[n]=z_0^n,卷积:

y[n]=∑kh[k]z0n−k=z0n∑kh[k]z0−k=H(z0)z0n,\begin{aligned} y[n] &=\sum_k h[k]z_0^{n-k}\\ &=z_0^n\sum_k h[k]z_0^{-k}\\ &=H(z_0)z_0^n, \end{aligned}

要求 z0z_0 位于 HH 的 ROC 中。复指数经过 LTI 系统后仍是同一模式,仅乘常数 H(z0)H(z_0)。正弦可用一对共轭复指数表示,于是获得幅度与相位结果。单边启动的正弦还会附带暂态。

  1. [2,−1,4][2,-1,4] 的变换:2−z−1+4z−22-z^{-1}+4z^{-2};延迟两点后乘 z−2z^{-2}。
  2. y[n]=x[n]−x[n−1]y[n]=x[n]-x[n-1]:H=1−z−1H=1-z^{-1},直流增益 0,因果且 FIR 稳定。
  3. a=0.5a=0.5 的平滑器对单位阶跃前三点:0.5,0.75,0.8750.5,0.75,0.875。
  4. 均匀采样率 2000 Hz,延迟 3 点是多久?3/2000=1.53/2000=1.5 ms。
  5. 为什么 X(1)X(1) 不能代替整条 Z 变换?求和把不同位置叠在一起,很多不同序列可以有相同和。