Z变换是一种强有力的数学工具,用于分析和设计离散时间信号和系统。它是傅里叶变换和拉普拉斯变换在离散时间域的推广,广泛应用于数字信号处理、控制系统等领域。
定义
离散时间信号的Z变换定义为:
其中,是一个复数,,是幅度,是相角。
Z变换的基本性质
- 线性性:
若和的Z变换分别为和,则 - 时间平移:
若的Z变换为,则 - 卷积:
若和的Z变换分别为和,则卷积 - 初值定理:
- 终值定理:
逆Z变换
逆Z变换用于将频域信号转换回时域信号,定义为:
其中,积分路径是一个包含所有极点的闭合路径。
常用的方法包括:
- 部分分式展开法:将展开成部分分式,再将每个部分分式逆变换。
- 幂级数展开法:将展开成幂级数,再根据定义求逆变换。
- 查表法:利用Z变换对照表进行逆变换。
稳定性和因果性
- 稳定性:系统的Z变换在单位圆内绝对收敛。
- 因果性:系统的Z变换具有所有极点在单位圆内。
Z变换的应用
- 差分方程求解:
通过Z变换,将差分方程转换为代数方程,求解后再通过逆Z变换得到时域解。 - 系统分析:
分析系统的稳定性、频率响应等。 - 滤波器设计:
设计数字滤波器,满足特定频率特性。
代码示例
以下是使用Python和scipy
库进行Z变换和逆Z变换的示例:
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import residue, freqz
# 定义差分方程系数
b = [1, -0.5] # 分子系数
a = [1, -1.5, 0.7] # 分母系数
# 计算系统的频率响应
w, h = freqz(b, a)
# 绘制频率响应
plt.figure()
plt.plot(w, 20 * np.log10(abs(h)))
plt.title('Frequency response')
plt.xlabel('Frequency [rad/sample]')
plt.ylabel('Amplitude [dB]')
plt.grid()
plt.show()
# 部分分式展开
r, p, k = residue(b, a)
print("Residues:", r)
print("Poles:", p)
print("Direct term:", k)
# 使用逆Z变换求解时域响应(部分分式展开法)
n = np.arange(0, 20)
h = np.zeros_like(n, dtype=np.float64)
for i in range(len(r)):
h += r[i] * p[i]**n
plt.figure()
plt.stem(n, h, use_line_collection=True)
plt.title('Impulse response')
plt.xlabel('n')
plt.ylabel('h[n]')
plt.grid()
plt.show()
在这个示例中,定义了一个差分方程,通过Z变换分析其频率响应,并通过部分分式展开法计算时域响应。