4. 离散时间信号与系统
4.1 离散时间信号的表示与分类
离散时间信号是时间上离散的信号,通常表示为一个序列。离散时间信号可以用数学形式表示为 x [ n ] x[n] x[n],其中 n n n 是整数,表示时间的离散点。离散时间信号可以分为以下几类:
- 周期信号:如果存在一个正整数 N N N,使得 x [ n + N ] = x [ n ] x[n+N] = x[n] x[n+N]=x[n] 对所有 n n n 成立,则 x [ n ] x[n] x[n] 是周期信号,周期为 N N N。
- 非周期信号:不存在这样的正整数 N N N,使得 x [ n + N ] = x [ n ] x[n+N] = x[n] x[n+N]=x[n] 对所有 n n n 成立。
- 有限长信号:信号在有限的时间范围内非零,其余时间为零。
- 无限长信号:信号在无限的时间范围内非零。
- 能量信号:信号的能量是有限的,定义为 ∑ n = − ∞ ∞ ∣ x [ n ] ∣ 2 < ∞ \sum_{n=-\infty}^{\infty} |x[n]|^2 < \infty ∑n=−∞∞∣x[n]∣2<∞。
- 功率信号:信号的功率是有限的,定义为 lim N → ∞ 1 2 N + 1 ∑ n = − N N ∣ x [ n ] ∣ 2 < ∞ \lim_{N \to \infty} \frac{1}{2N+1} \sum_{n=-N}^{N} |x[n]|^2 < \infty limN→∞2N+11∑n=−NN∣x[n]∣2<∞。
4.1.1 离散时间信号的表示
离散时间信号可以用多种方式表示,包括:
- 数学表达式:例如,单位脉冲信号 δ [ n ] \delta[n] δ[n]。
- 图形表示:用茎图(stem plot)显示信号的幅度。
- 列表表示:用一个数值列表表示信号的幅度。
4.1.2 常见的离散时间信号
- 单位脉冲信号 δ [ n ] \delta[n] δ[n]:在 n = 0 n = 0 n=0 时为 1,其余时间为 0。
- 单位阶跃信号 u [ n ] u[n] u[n]:在 n ≥ 0 n \geq 0 n≥0 时为 1,其余时间为 0。
- 正弦信号 x [ n ] = A sin ( ω 0 n + ϕ ) x[n] = A \sin(\omega_0 n + \phi) x[n]=Asin(ω0n+ϕ):幅度 A A A,频率 ω 0 \omega_0 ω0,相位 ϕ \phi ϕ。
- 指数信号 x [ n ] = a n x[n] = a^n x[n]=an:其中 a a a 是常数。
4.1.3 信号的操作
离散时间信号可以进行以下操作:
- 时移: x [ n − k ] x[n-k] x[n−k],将信号 x [ n ] x[n] x[n] 向右(或向左)移动 k k k 个单位。
- 尺度变换: x [ a n ] x[an] x[an],将信号 x [ n ] x[n] x[n] 的时间尺度压缩(或扩展)。
- 反转: x [ − n ] x[-n] x[−n],将信号 x [ n ] x[n] x[n] 沿时间轴反转。
- 线性组合: y [ n ] = ∑ k c k x k [ n ] y[n] = \sum_{k} c_k x_k[n] y[n]=∑kckxk[n],其中 c k c_k ck 是常数。
4.2 离散时间系统的表示与分类
离散时间系统是处理离散时间信号的系统,通常表示为 y [ n ] = T { x [ n ] } y[n] = T\{x[n]\} y[n]=T{x[n]},其中 T T T 是系统操作, x [ n ] x[n] x[n] 是输入信号, y [ n ] y[n] y[n] 是输出信号。离散时间系统可以分为以下几类:
- 线性系统:满足线性叠加原理,即 T { a x 1 [ n ] + b x 2 [ n ] } = a T { x 1 [ n ] } + b T { x 2 [ n ] } T\{ax_1[n] + bx_2[n]\} = aT\{x_1[n]\} + bT\{x_2[n]\} T{ax1[n]+bx2[n]}=aT{x1[n]}+bT{x2[n]}。
- 时不变系统:系统的输入信号时移 k k k 个单位,输出信号也时移 k k k 个单位,即 T { x [ n − k ] } = y [ n − k ] T\{x[n-k]\} = y[n-k] T{x[n−k]}=y[n−k]。
- 因果系统:系统的输出仅取决于当前和过去的输入,即 y [ n ] y[n] y[n] 仅依赖于 x [ m ] x[m] x[m]( m ≤ n m \leq n m≤n)。
- 稳定系统:有界输入产生有界输出,即 ∣ x [ n ] ∣ ≤ M |x[n]| \leq M ∣x[n]∣≤M 时, ∣ y [ n ] ∣ ≤ N |y[n]| \leq N ∣y[n]∣≤N。
4.3 离散时间系统的数学模型
离散时间系统的数学模型可以用差分方程、传递函数、状态空间模型等表示。
4.3.1 差分方程
差分方程是描述离散时间系统的常用方法。一个
N
N
N 阶线性时不变系统的差分方程可以表示为:
y
[
n
]
=
∑
k
=
0
N
a
k
y
[
n
−
k
]
+
∑
k
=
0
M
b
k
x
[
n
−
k
]
y[n] = \sum_{k=0}^{N} a_k y[n-k] + \sum_{k=0}^{M} b_k x[n-k]
y[n]=k=0∑Naky[n−k]+k=0∑Mbkx[n−k]
其中,
a
k
a_k
ak 和
b
k
b_k
bk 是常数。
4.3.2 传递函数
传递函数是描述系统的频率响应的工具。对于线性时不变系统,传递函数可以表示为:
H
(
z
)
=
∑
k
=
0
M
b
k
z
−
k
∑
k
=
0
N
a
k
z
−
k
H(z) = \frac{\sum_{k=0}^{M} b_k z^{-k}}{\sum_{k=0}^{N} a_k z^{-k}}
H(z)=∑k=0Nakz−k∑k=0Mbkz−k
其中,
z
z
z 是复数变量。
4.3.3 状态空间模型
状态空间模型是描述系统的另一种方法,适用于多输入多输出系统。状态空间模型可以表示为:
x
[
n
+
1
]
=
A
x
[
n
]
+
B
u
[
n
]
\mathbf{x}[n+1] = A \mathbf{x}[n] + B \mathbf{u}[n]
x[n+1]=Ax[n]+Bu[n]
y
[
n
]
=
C
x
[
n
]
+
D
u
[
n
]
\mathbf{y}[n] = C \mathbf{x}[n] + D \mathbf{u}[n]
y[n]=Cx[n]+Du[n]
其中,
x
[
n
]
\mathbf{x}[n]
x[n] 是状态向量,
u
[
n
]
\mathbf{u}[n]
u[n] 是输入向量,
y
[
n
]
\mathbf{y}[n]
y[n] 是输出向量,
A
A
A、
B
B
B、
C
C
C 和
D
D
D 是矩阵。
4.4 离散时间系统的响应
离散时间系统的响应可以分为零状态响应(Zero-State Response, ZSR)和零输入响应(Zero-Input Response, ZIR)。
4.4.1 零状态响应
零状态响应是指系统在初始状态为零时的响应。计算方法可以通过卷积求得:
y
[
n
]
=
x
[
n
]
∗
h
[
n
]
y[n] = x[n] * h[n]
y[n]=x[n]∗h[n]
其中,
h
[
n
]
h[n]
h[n] 是系统的单位脉冲响应。
4.4.2 零输入响应
零输入响应是指系统在没有输入信号时的响应。计算方法可以通过解差分方程的齐次部分求得。
4.4.3 总响应
总响应是零状态响应和零输入响应的叠加:
y
[
n
]
=
y
Z
S
R
[
n
]
+
y
Z
I
R
[
n
]
y[n] = y_{ZSR}[n] + y_{ZIR}[n]
y[n]=yZSR[n]+yZIR[n]
4.5 卷积
卷积是计算线性时不变系统响应的重要工具。离散时间信号
x
[
n
]
x[n]
x[n] 和
h
[
n
]
h[n]
h[n] 的卷积定义为:
y
[
n
]
=
x
[
n
]
∗
h
[
n
]
=
∑
k
=
−
∞
∞
x
[
k
]
h
[
n
−
k
]
y[n] = x[n] * h[n] = \sum_{k=-\infty}^{\infty} x[k] h[n-k]
y[n]=x[n]∗h[n]=k=−∞∑∞x[k]h[n−k]
4.5.1 卷积的性质
- 交换律: x [ n ] ∗ h [ n ] = h [ n ] ∗ x [ n ] x[n] * h[n] = h[n] * x[n] x[n]∗h[n]=h[n]∗x[n]
- 结合律: ( x [ n ] ∗ h 1 [ n ] ) ∗ h 2 [ n ] = x [ n ] ∗ ( h 1 [ n ] ∗ h 2 [ n ] ) (x[n] * h_1[n]) * h_2[n] = x[n] * (h_1[n] * h_2[n]) (x[n]∗h1[n])∗h2[n]=x[n]∗(h1[n]∗h2[n])
- 分配律: x [ n ] ∗ ( h 1 [ n ] + h 2 [ n ] ) = x [ n ] ∗ h 1 [ n ] + x [ n ] ∗ h 2 [ n ] x[n] * (h_1[n] + h_2[n]) = x[n] * h_1[n] + x[n] * h_2[n] x[n]∗(h1[n]+h2[n])=x[n]∗h1[n]+x[n]∗h2[n]
4.5.2 卷积的计算
卷积可以通过直接计算或快速傅里叶变换(FFT)计算。以下是使用Python进行卷积计算的示例:
import numpy as np
import matplotlib.pyplot as plt
# 定义输入信号 x[n]
x = np.array([1, 2, 3, 4, 5])
# 定义单位脉冲响应 h[n]
h = np.array([1, 1, 1])
# 计算卷积
y = np.convolve(x, h, mode='full')
# 绘制输入信号 x[n]
plt.stem(range(len(x)), x, basefmt="C0-", label='x[n]')
plt.legend()
plt.title('输入信号 x[n]')
plt.xlabel('n')
plt.ylabel('幅度')
plt.show()
# 绘制单位脉冲响应 h[n]
plt.stem(range(len(h)), h, basefmt="C1-", label='h[n]')
plt.legend()
plt.title('单位脉冲响应 h[n]')
plt.xlabel('n')
plt.ylabel('幅度')
plt.show()
# 绘制卷积结果 y[n]
plt.stem(range(len(y)), y, basefmt="C2-", label='y[n]')
plt.legend()
plt.title('卷积结果 y[n]')
plt.xlabel('n')
plt.ylabel('幅度')
plt.show()
4.6 离散时间系统的频率响应
离散时间系统的频率响应可以通过系统的传递函数
H
(
z
)
H(z)
H(z) 在单位圆上的值来表示。频率响应
H
(
e
j
ω
)
H(e^{j\omega})
H(ejω) 可以表示为:
H
(
e
j
ω
)
=
H
(
z
)
∣
z
=
e
j
ω
H(e^{j\omega}) = H(z) \bigg|_{z=e^{j\omega}}
H(ejω)=H(z)
z=ejω
4.6.1 频率响应的计算
频率响应可以通过传递函数的傅里叶变换来计算。以下是使用Python计算频率响应的示例:
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import freqz
# 定义传递函数的分子和分母系数
b = [1, 1, 1]
a = [1, 0, 0]
# 计算频率响应
w, h = freqz(b, a)
# 绘制频率响应的幅度
plt.plot(w, 20 * np.log10(abs(h)), label='幅度响应')
plt.legend()
plt.title('频率响应的幅度')
plt.xlabel('频率 (rad/sample)')
plt.ylabel('幅度 (dB)')
plt.grid(True)
plt.show()
# 绘制频率响应的相位
plt.plot(w, np.angle(h), label='相位响应')
plt.legend()
plt.title('频率响应的相位')
plt.xlabel('频率 (rad/sample)')
plt.ylabel('相位 (rad)')
plt.grid(True)
plt.show()
4.7 离散时间系统的稳定性
系统的稳定性是指系统在有界输入下产生有界输出。对于线性时不变系统,可以通过传递函数的极点来判断稳定性。如果传递函数的所有极点都在单位圆内,则系统是稳定的。
4.7.1 稳定性的判断
可以通过计算传递函数的极点来判断系统的稳定性。以下是使用Python计算传递函数极点的示例:
import numpy as np
from scipy.signal import TransferFunction
# 定义传递函数的分子和分母系数
b = [1, 1, 1]
a = [1, -0.5, 0.2]
# 创建传递函数对象
tf = TransferFunction(b, a, dt=1)
# 计算传递函数的极点
poles = tf.poles
# 绘制极点图
plt.plot(np.real(poles), np.imag(poles), 'x', label='极点')
plt.legend()
plt.title('传递函数的极点')
plt.xlabel('实部')
plt.ylabel('虚部')
plt.grid(True)
plt.axhline(0, color='black',linewidth=0.5)
plt.axvline(0, color='black',linewidth=0.5)
plt.show()
4.8 离散时间系统的因果性
系统的因果性是指系统的输出仅取决于当前和过去的输入。对于线性时不变系统,可以通过单位脉冲响应 h [ n ] h[n] h[n] 来判断因果性。如果 h [ n ] = 0 h[n] = 0 h[n]=0 对于所有 n < 0 n < 0 n<0,则系统是因果的。
4.8.1 因果性的判断
可以通过检查单位脉冲响应 h [ n ] h[n] h[n] 是否满足因果性条件来判断系统的因果性。以下是使用Python检查因果性的示例:
import numpy as np
# 定义单位脉冲响应 h[n]
h = np.array([0, 1, 2, 3, 4])
# 检查因果性
is_causal = all(h[:0] == 0)
print(f"系统是否因果:{is_causal}")
4.9 离散时间系统的分析方法
离散时间系统的分析方法包括时域分析和频域分析。
4.9.1 时域分析
时域分析主要通过差分方程、卷积等方法来分析系统的特性。以下是使用Python进行时域分析的示例:
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import lfilter
# 定义输入信号 x[n]
x = np.array([1, 2, 3, 4, 5])
# 定义传递函数的分子和分母系数
b = [1, 1, 1]
a = [1, -0.5, 0.2]
# 计算系统的输出 y[n]
y = lfilter(b, a, x)
# 绘制输入信号 x[n]
plt.stem(range(len(x)), x, basefmt="C0-", label='x[n]')
plt.legend()
plt.title('输入信号 x[n]')
plt.xlabel('n')
plt.ylabel('幅度')
plt.show()
# 绘制系统的输出 y[n]
plt.stem(range(len(y)), y, basefmt="C1-", label='y[n]')
plt.legend()
plt.title('系统的输出 y[n]')
plt.xlabel('n')
plt.ylabel('幅度')
plt.show()
4.9.2 频域分析
频域分析主要通过频率响应、傅里叶变换等方法来分析系统的特性。以下是使用Python进行频域分析的示例:
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import freqz
# 定义传递函数的分子和分母系数
b = [1, 1, 1]
a = [1, -0.5, 0.2]
# 计算频率响应
w, h = freqz(b, a)
# 绘制频率响应的幅度
plt.plot(w, 20 * np.log10(abs(h)), label='幅度响应')
plt.legend()
plt.title('频率响应的幅度')
plt.xlabel('频率 (rad/sample)')
plt.ylabel('幅度 (dB)')
plt.grid(True)
plt.show()
# 绘制频率响应的相位
plt.plot(w, np.angle(h), label='相位响应')
plt.legend()
plt.title('频率响应的相位')
plt.xlabel('频率 (rad/sample)')
plt.ylabel('相位 (rad)')
plt.grid(True)
plt.show()
4.10 离散时间系统的实现
离散时间系统的实现可以通过直接形式、级联形式、并联形式等方法来实现。
4.10.1 直接形式实现
直接形式实现是直接通过差分方程来实现系统的。以下是使用Python实现直接形式的示例:
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import lfilter
# 定义输入信号 x[n]
x = np.array([1, 2, 3, 4, 5])
# 定义传递函数的分子和分母系数
b = [1, 1, 1]
a = [1, -0.5, 0.2]
# 计算系统的输出 y[n]
y = lfilter(b, a, x)
# 绘制输入信号 x[n]
plt.stem(range(len(x)), x, basefmt="C0-", label='x[n]')
plt.legend()
plt.title('输入信号 x[n]')
plt.xlabel('n')
plt.ylabel('幅度')
plt.show()
# 绘制系统的输出 y[n]
plt.stem(range(len(y)), y, basefmt="C1-", label='y[n]')
plt.legend()
plt.title('系统的输出 y[n]')
plt.xlabel('n')
plt.ylabel('幅度')
plt.show()
4.10.2 级联形式实现
级联形式实现是将系统分解为多个子系统,然后将这些子系统串联起来。以下是使用Python实现级联形式的示例:
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import lfilter
# 定义输入信号 x[n]
x = np.array([1, 2, 3, 4, 5])
# 定义子系统的分子和分母系数
b1 = [1, 1]
a1 = [1, -0.5]
b2 = [1, 1]
a2 = [1, 0.2]
# 计算第一个子系统的输出 y1[n]
y1 = lfilter(b1, a1, x)
# 计算第二个子系统的输出 y2[n]
y2 = lfilter(b2, a2, y1)
# 绘制输入信号 x[n]
plt.stem(range(len(x)), x, basefmt="C0-", label='x[n]')
plt.legend()
plt.title('输入信号 x[n]')
plt.xlabel('n')
plt.ylabel('幅度')
plt.show()
# 绘制第一个子系统的输出 y1[n]
plt.stem(range(len(y1)), y1, basefmt="C1-", label='y1[n]')
plt.legend()
plt.title('第一个子系统的输出 y1[n]')
plt.xlabel('n')
plt.ylabel('幅度')
plt.show()
# 绘制第二个子系统的输出 y2[n]
plt.stem(range(len(y2)), y2, basefmt="C2-", label='y2[n]')
plt.legend()
plt.title('第二个子系统的输出 y2[n]')
plt.xlabel('n')
plt.ylabel('幅度')
plt.show()
4.10.3 并联形式实现
并联形式实现是将系统分解为多个子系统,然后将这些子系统的输出相加。这种实现方法在某些情况下可以简化系统的计算,特别是在系统传递函数可以分解为多个简单传递函数的乘积时。以下是使用Python实现并联形式的示例:
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import lfilter
# 定义输入信号 x[n]
x = np.array([1, 2, 3, 4, 5])
# 定义子系统的分子和分母系数
b1 = [1, 1]
a1 = [1, -0.5]
b2 = [1, 1]
a2 = [1, 0.2]
# 计算第一个子系统的输出 y1[n]
y1 = lfilter(b1, a1, x)
# 计算第二个子系统的输出 y2[n]
y2 = lfilter(b2, a2, x)
# 计算并联系统的总输出 y[n]
y = y1 + y2
# 绘制输入信号 x[n]
plt.stem(range(len(x)), x, basefmt="C0-", label='x[n]')
plt.legend()
plt.title('输入信号 x[n]')
plt.xlabel('n')
plt.ylabel('幅度')
plt.show()
# 绘制第一个子系统的输出 y1[n]
plt.stem(range(len(y1)), y1, basefmt="C1-", label='y1[n]')
plt.legend()
plt.title('第一个子系统的输出 y1[n]')
plt.xlabel('n')
plt.ylabel('幅度')
plt.show()
# 绘制第二个子系统的输出 y2[n]
plt.stem(range(len(y2)), y2, basefmt="C2-", label='y2[n]')
plt.legend()
plt.title('第二个子系统的输出 y2[n]')
plt.xlabel('n')
plt.ylabel('幅度')
plt.show()
# 绘制并联系统的总输出 y[n]
plt.stem(range(len(y)), y, basefmt="C3-", label='y[n]')
plt.legend()
plt.title('并联系统的总输出 y[n]')
plt.xlabel('n')
plt.ylabel('幅度')
plt.show()
4.11 离散时间系统的反馈
反馈是离散时间系统中常用的设计技术,可以通过反馈来改善系统的性能,如稳定性和响应速度。反馈系统可以分为正反馈和负反馈。
4.11.1 正反馈
正反馈是指系统的输出通过一个反馈路径加回到输入。正反馈系统可以用以下差分方程表示:
y
[
n
]
=
x
[
n
]
+
G
y
[
n
−
d
]
y[n] = x[n] + G y[n-d]
y[n]=x[n]+Gy[n−d]
其中,
G
G
G 是反馈增益,
d
d
d 是反馈延迟。
4.11.2 负反馈
负反馈是指系统的输出通过一个反馈路径减回到输入。负反馈系统可以用以下差分方程表示:
y
[
n
]
=
x
[
n
]
−
G
y
[
n
−
d
]
y[n] = x[n] - G y[n-d]
y[n]=x[n]−Gy[n−d]
其中,
G
G
G 是反馈增益,
d
d
d 是反馈延迟。
4.12 离散时间系统的滤波器设计
滤波器是离散时间系统中的一种重要应用,用于对信号进行滤波处理。滤波器可以分为低通滤波器、高通滤波器、带通滤波器和带阻滤波器。
4.12.1 低通滤波器
低通滤波器允许低频信号通过,同时衰减高频信号。常见的低通滤波器设计方法包括FIR滤波器和IIR滤波器。
4.12.1.1 FIR低通滤波器
FIR(Finite Impulse Response)低通滤波器是一种非递归滤波器,其单位脉冲响应是有限的。FIR滤波器可以通过窗函数法或频率采样法设计。
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import firwin, lfilter
# 定义滤波器参数
N = 31 # 滤波器阶数
cutoff = 0.2 # 截止频率
# 设计FIR低通滤波器
b = firwin(N, cutoff, window='hamming')
# 定义输入信号 x[n]
x = np.random.randn(100)
# 计算系统的输出 y[n]
y = lfilter(b, [1], x)
# 绘制输入信号 x[n]
plt.stem(range(len(x)), x, basefmt="C0-", label='x[n]')
plt.legend()
plt.title('输入信号 x[n]')
plt.xlabel('n')
plt.ylabel('幅度')
plt.show()
# 绘制系统的输出 y[n]
plt.stem(range(len(y)), y, basefmt="C1-", label='y[n]')
plt.legend()
plt.title('低通滤波器的输出 y[n]')
plt.xlabel('n')
plt.ylabel('幅度')
plt.show()
4.12.1.2 IIR低通滤波器
IIR(Infinite Impulse Response)低通滤波器是一种递归滤波器,其单位脉冲响应是无限的。IIR滤波器可以通过Butterworth、Chebyshev等方法设计。
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import butter, lfilter
# 定义滤波器参数
N = 4 # 滤波器阶数
cutoff = 0.2 # 截止频率
# 设计IIR低通滤波器
b, a = butter(N, cutoff, btype='low', analog=False)
# 定义输入信号 x[n]
x = np.random.randn(100)
# 计算系统的输出 y[n]
y = lfilter(b, a, x)
# 绘制输入信号 x[n]
plt.stem(range(len(x)), x, basefmt="C0-", label='x[n]')
plt.legend()
plt.title('输入信号 x[n]')
plt.xlabel('n')
plt.ylabel('幅度')
plt.show()
# 绘制系统的输出 y[n]
plt.stem(range(len(y)), y, basefmt="C1-", label='y[n]')
plt.legend()
plt.title('低通滤波器的输出 y[n]')
plt.xlabel('n')
plt.ylabel('幅度')
plt.show()
4.12.2 高通滤波器
高通滤波器允许高频信号通过,同时衰减低频信号。常见的高通滤波器设计方法包括FIR滤波器和IIR滤波器。
4.12.2.1 FIR高通滤波器
FIR高通滤波器可以通过窗函数法或频率采样法设计。
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import firwin, lfilter
# 定义滤波器参数
N = 31 # 滤波器阶数
cutoff = 0.2 # 截止频率
# 设计FIR高通滤波器
b = firwin(N, cutoff, window='hamming', pass_zero=False)
# 定义输入信号 x[n]
x = np.random.randn(100)
# 计算系统的输出 y[n]
y = lfilter(b, [1], x)
# 绘制输入信号 x[n]
plt.stem(range(len(x)), x, basefmt="C0-", label='x[n]')
plt.legend()
plt.title('输入信号 x[n]')
plt.xlabel('n')
plt.ylabel('幅度')
plt.show()
# 绘制系统的输出 y[n]
plt.stem(range(len(y)), y, basefmt="C1-", label='y[n]')
plt.legend()
plt.title('高通滤波器的输出 y[n]')
plt.xlabel('n')
plt.ylabel('幅度')
plt.show()
4.12.2.2 IIR高通滤波器
IIR高通滤波器可以通过Butterworth、Chebyshev等方法设计。
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import butter, lfilter
# 定义滤波器参数
N = 4 # 滤波器阶数
cutoff = 0.2 # 截止频率
# 设计IIR高通滤波器
b, a = butter(N, cutoff, btype='high', analog=False)
# 定义输入信号 x[n]
x = np.random.randn(100)
# 计算系统的输出 y[n]
y = lfilter(b, a, x)
# 绘制输入信号 x[n]
plt.stem(range(len(x)), x, basefmt="C0-", label='x[n]')
plt.legend()
plt.title('输入信号 x[n]')
plt.xlabel('n')
plt.ylabel('幅度')
plt.show()
# 绘制系统的输出 y[n]
plt.stem(range(len(y)), y, basefmt="C1-", label='y[n]')
plt.legend()
plt.title('高通滤波器的输出 y[n]')
plt.xlabel('n')
plt.ylabel('幅度')
plt.show()
4.13 离散时间系统的应用
离散时间系统在数字信号处理、通信工程、控制理论等领域有广泛的应用。以下是一些典型的应用示例:
4.13.1 数字信号处理
在数字信号处理中,离散时间系统用于信号滤波、信号压缩、信号增强等。例如,音频信号的噪声滤除可以使用FIR或IIR滤波器实现。
4.13.2 通信工程
在通信工程中,离散时间系统用于信号调制、解调、信道编码等。例如,数字通信中的脉冲成型滤波器可以使用FIR滤波器实现。
4.13.3 控制理论
在控制理论中,离散时间系统用于控制器设计、系统建模等。例如,PID控制器可以使用差分方程实现。
4.14 总结
离散时间信号与系统是数字信号处理的基础,通过数学模型和各种分析方法,可以深入理解系统的特性和行为。常见的系统实现方法包括直接形式、级联形式和并联形式,这些方法在实际应用中各有优势。滤波器设计是离散时间系统中的一个重要应用,通过设计不同类型的滤波器,可以对信号进行有效的处理和分析。
希望这些内容能帮助你更好地理解离散时间信号与系统。如果你有任何问题或需要进一步的解释,请随时提问。