完整入口 · 上一章:拉普拉斯与 RC · 下一章:傅里叶与采样
设 ADC 采到:
x[0]=1,x[1]=2,x[2]=3,
其余编号的值都是 0。
| 写法 | 含义 |
|---|
| x[1]=2 | 编号 1 的一个数 |
| x[n] | 按编号描述整条序列 |
| X(z) | 对整条序列做 Z 变换得到的函数 |
| X(2) | 该函数在 z=2 时的一个取值 |
数字滤波程序处理当前点时,当前输入始终是 x[n]。把整个序列写成 X(z) 是数学分析的一步,不能说一个当前点“变成了整个 X(z)”。
双边 Z 变换定义:
X(z)=n=−∞∑∞x[n]z−n.
此处 n 是整数,z 是复变量,z−n=1/zn。例如:
| n | x[n] | 权重 | 本项 |
|---|
| 0 | 1 | z0=1 | 1 |
| 1 | 2 | z−1=1/z | 2z−1 |
| 2 | 3 | z−2=1/z2 | 3z−2 |
加起来:
X(z)=1+2z−1+3z−2.
临时令 z=2:
X(2)=1+22+223=2.75.
完整表达式保留了位置与系数;单个 2.75 不能恢复三个采样值。[3,2,1] 虽然直接相加也是 6,但变换为 3+2z−1+z−2,与原序列不同。
∑x[n] 只是在允许收敛时对应 z=1 的取值,不能用它替代 Z 变换定义。一般的无限序列还必须声明加权和收敛的 z 范围。
要求每向后移动一个编号,就获得同一个乘数。最自然的权重因此是几何序列:
1,z−1,z−2,…
后一个权重等于前一个权重乘 z−1。这使移位、线性叠加和卷积的处理很简单。
令:
z=rejΩ,r>0,
则:
z−n=r−ne−jΩn.
r−n 控制远处采样的权重,e−jΩn 比较不同振荡模式。r=1 时权重仅有振荡,Z 变换在单位圆上的取值与 DTFT 连接。这里 z 无量纲,它不是采样率,也不是内存地址。
定义 d[n]=x[n−1],表示每个编号取原序列的上一点:
| n | x[n] | d[n]=x[n−1] |
|---|
| 0 | 1 | x[−1]=0 |
| 1 | 2 | x[0]=1 |
| 2 | 3 | x[1]=2 |
| 3 | 0 | x[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).
数值没有变,位置整体往后移了一格。每一项的幂次都多了 −1,因此能够提取共同因子。
双边求和中:
D(z)=n=−∞∑∞x[n−m]z−n.
令 k=n−m,则 n=k+m;整数范围仍覆盖全部整数:
D(z)=k=−∞∑∞x[k]z−(k+m)=z−mk∑x[k]z−k=z−mX(z).
延迟 m 拍对应乘 z−m。若均匀采样间隔为 Ts,实际延迟是 mTs。ROC 在有限的非零 z 处保持相同,原点和无穷远的包含情况可能改变。
单边定义:
X+(z)=n=0∑∞x[n]z−n.
对延迟一拍,从 n=0 起展开:
Z+{x[n−1]}=x[−1]+x[0]z−1+x[1]z−2+⋯=x[−1]+z−1X+(z).
只有 x[−1]=0 时才简化为 z−1X+。延迟 m 点的初始项:
Z+{x[n−m]}=z−mX+(z)+r=0∑m−1x[r−m]z−r.
所以“开始之前输入为零”是单边推导里的明确条件;双边规则则已经把负编号部分包含在原变换中。
分析式中的 z−1 不会自动存数据。实际程序需要一个变量:
double previous = 0.0; // 启动前 x[-1] = 0
double process(double current) {
double delayed = previous; // 先读取旧值
previous = current; // 再为下次保存
逐次执行:
| 当前编号 | 输入 | 更新前 previous | 返回值 | 更新后 previous |
|---|
| 0 | 1 | 0 | 0 | 1 |
| 1 | 2 | 1 | 1 | 2 |
| 2 | 3 | 2 | 2 | 3 |
| 3 | 0 | 3 | 3 | 0 |
如果先写 previous=current,再读 delayed,返回的就会是当前值,延迟被消掉。多拍延迟需要移位寄存器或循环缓冲区;启动时缓冲区的值就是系统的初始状态。
这里的全局 previous 只服务于一条数据流。重新开始记录时应按所需初值复位;多个通道应分别保存自己的状态,不能让它们交错调用同一个全局变量。下一节的同名变量是另一个独立例子,两段代码应分别编译。
实际规则:
y[n]=21x[n]+21x[n−1].
零初始历史下,对整个等式做 Z 变换:
Y(z)=21X(z)+21z−1X(z).
提取公共因子:
Y(z)=(21+21z−1)X(z).
因此:
H(z)=21(1+z−1).
冲激输入产生 h[n]=[0.5,0.5],其 Z 变换就是 H(z)。
用多项式乘法验证 [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.
系数读回 [0.5,1.5,2.5,1.5],与时域计算相同。
double moving_average(double current) {
double output = 0.5 * current + 0.5 * previous;
零状态离散 LTI 系统:
y[n]=k∑h[k]x[n−k].
在绝对收敛等允许交换求和的条件下:
Y(z)=n∑k∑h[k]x[n−k]z−n=k∑h[k]n∑x[n−k]z−n.
令 m=n−k,则 z−n=z−kz−m:
Y(z)=(k∑h[k]z−k)(m∑x[m]z−m)=H(z)X(z).
与连续卷积变成拉普拉斯乘法的逻辑相同。有限序列时,这就是普通多项式乘法,系数卷积无需额外收敛讨论。
对因果序列 x[n]=anu[n]:
X(z)=n=0∑∞anz−n=n=0∑∞(az−1)n=1−az−11,∣az−1∣<1.
因此 ROC 为:
∣z∣>∣a∣.
例如 a=0.5,序列 [1,0.5,0.25,…],ROC 是半径 0.5 的圆外部。
令 a=0,换成左侧序列 x[n]=−anu[−n−1]:
X(z)=−n=−∞∑−1anz−n=−m=1∑∞(z/a)m=−1−z/az/a=1−az−11,∣z∣<∣a∣.
同一分式有不同 ROC,对应不同序列。MIT Z 变换讲次 将 ROC 作为变换描述的必要部分。
反变换不能只背分式。例如:
1−0.5z−11=1+0.5z−1+0.25z−2+⋯,∣z∣>0.5
才能读回右侧指数。若指定圆内 ROC,则须改用左侧展开。
一般常系数方程:
y[n]+r=1∑Pary[n−r]=m=0∑Qbmx[n−m].
零初始历史时:
(1+r=1∑Parz−r)Y(z)=(m=0∑Qbmz−m)X(z).
于是:
H(z)=1+∑r=1Parz−r∑m=0Qbmz−m.
实现时再解出当前输出:
y[n]=m=0∑Qbmx[n−m]−r=1∑Pary[n−r].
求法中分母写加号,实现中就要减去对应项。不同资料可能把反馈系数的负号预先并入符号,要看原方程。
- FIR 指冲激响应只有有限个非零点。常用实现只加权有限输入历史。
- IIR 指冲激响应延续无限多个点。常见实现使用输出反馈,但递归实现并不在所有特殊情况都意味着无限响应。
规则:
y[n]=ay[n−1]+(1−a)x[n],0<a<1.
若 y[−1]=0,传递函数为:
Y=az−1Y+(1−a)X⇒H(z)=1−az−11−a.
因果冲激响应:
h[n]=(1−a)anu[n].
h 无限延续但逐渐减小,因此是 IIR。对输入单位阶跃,递推:
y[0]=1−a,y[1]=a(1−a)+(1−a)=1−a2.
假设 y[n−1]=1−an,则:
y[n]=a(1−an)+(1−a)=1−an+1.
所以:
y[n]=1−an+1,n≥0.
如果 y[−1]=y−1=0,单边变换给出:
Y=a[z−1Y+y−1]+(1−a)X,
Y=H(z)X+1−az−1ay−1.
反变换后加上 an+1y−1;完整阶跃响应是:
y[n]=1+(y−1−1)an+1.
因果一阶系统极点在 z=a,ROC 为 ∣z∣>∣a∣。其冲激响应绝对和:
n=0∑∞∣h[n]∣=∣1−a∣n=0∑∞∣a∣n.
∣a∣<1 时有限。对因果有理系统,约简后极点严格位于单位圆内,对应单位圆包含在 ROC 中,得到 BIBO 稳定。
a=1 时需要重新看具体分子与约简,不能把 0/0 当作普通滤波器。本节一般判据使用约简后有效传递函数;数字积分器 H=1/(1−z−1) 极点在 1,常数输入使输出增长。
非因果系统不能只用“极点必须在圆内”判断。例如 1/(1−2z−1) 若取 ∣z∣<2,左侧冲激响应 −2nu[−n−1] 绝对可和,是稳定但非因果的系统。
内部状态稳定与输入输出稳定的区别与连续系统相同;还需留意有限字长、溢出和量化引起的实际实现问题。
单位圆在 ROC 内,令 z=ejΩ:
H(ejΩ)=21(1+e−jΩ)=21e−jΩ/2(ejΩ/2+e−jΩ/2)=e−jΩ/2cos(Ω/2).
在 0≤Ω<π,cos(Ω/2)>0:
∣H∣=cos(Ω/2),argH=−Ω/2.
在 Ω=π 幅值为零,相位没有定义。群延迟为:
τg=−dΩdargH=21 sample.
程序存了一点历史,为什么群延迟却是半点?输出是两个相邻点的平均,等效时间中心位于两个采样点中间;存储深度与频域群延迟是不同概念。
直流 z=1 增益为 1;交替模式 z=−1 增益为 0。输入 10,14,10,14,… 可写成 12−2(−1)n,零历史启动时输出 5,12,12,…。第一点是暂态,不能声称所有点都是 12。
-3 dB 点:
cos(Ωc/2)=1/2⇒Ωc=π/2⇒fc=fs/4.
这只是两点平均器的结果,不是所有数字低通的统一截止频率。
对双边输入 x[n]=z0n,卷积:
y[n]=k∑h[k]z0n−k=z0nk∑h[k]z0−k=H(z0)z0n,
要求 z0 位于 H 的 ROC 中。复指数经过 LTI 系统后仍是同一模式,仅乘常数 H(z0)。正弦可用一对共轭复指数表示,于是获得幅度与相位结果。单边启动的正弦还会附带暂态。
- [2,−1,4] 的变换:2−z−1+4z−2;延迟两点后乘 z−2。
- y[n]=x[n]−x[n−1]:H=1−z−1,直流增益 0,因果且 FIR 稳定。
- a=0.5 的平滑器对单位阶跃前三点:0.5,0.75,0.875。
- 均匀采样率 2000 Hz,延迟 3 点是多久?3/2000=1.5 ms。
- 为什么 X(1) 不能代替整条 Z 变换?求和把不同位置叠在一起,很多不同序列可以有相同和。