Appearance
Z 变换与离散系统
概念
前面三章都活在连续世界里。但计算机处理的是采样后的序列——一串离散的数。离散世界需要自己的"拉普拉斯变换",它就是 Z 变换。
两者的关系只差一个换元:
z = e^(sT) T 是采样间隔
X(z) = Σ_n x[n] · z^(−n)| 连续世界(拉氏) | 离散世界(Z 变换) | 为什么 |
|---|---|---|
s = σ + jω | z = e^(sT) | 采样把 s 平面周期折叠到 z 平面 |
| σ 决定衰减快慢 | ∣z∣ 决定衰减快慢 | e^(σT) = ∣z∣ |
| 稳定看左半平面 | 稳定看单位圆内 | 左半平面映到单位圆内 |
| 虚轴(σ = 0) | 单位圆(∣z∣ = 1) | 这是"不衰减也不增长"的那条线 |
一句话记忆:Z 变换是离散世界的拉普拉斯变换,稳定的几何判据从"左半平面"换成了"单位圆内"。
这一章还有个更实用的目的:把"滤波器"变成一个可以用几行代码写出来的差分方程——这正是 数字信号处理 与 数字音频 的起点。
原理
一、定义与收敛域
| 类型 | 定义 | 用途 |
|---|---|---|
| 双边 | X(z) = Σ_{n=−∞}^{∞} x[n]z^(−n) | 理论分析 |
| 单边 | X(z) = Σ_{n=0}^{∞} x[n]z^(−n) | 工程与考研默认(因果序列) |
ROC(收敛域)是一个环形区域:因果序列是 |z| > r(圆外),反因果序列是 |z| < r(圆内),双边序列可能是圆环 r₁ < |z| < r₂。
和拉氏一样:同一个 X(z) 配不同 ROC 就是不同序列——所以写答案要带 ROC。
二、常用变换对(要背)
序列 x[n](n ≥ 0) | X(z) | ROC |
|---|---|---|
δ[n] | 1 | 全平面 |
δ[n − m] | z^(−m) | ∣z∣ > 0 |
u[n] | 1/(1 − z^(−1)) = z/(z − 1) | ∣z∣ > 1 |
a^n u[n] | 1/(1 − a z^(−1)) | ∣z∣ > ∣a∣ |
n·a^n u[n] | a z^(−1)/(1 − a z^(−1))² | ∣z∣ > ∣a∣ |
cos(ω₀n)u[n] | (1 − z^(−1)cosω₀)/(1 − 2z^(−1)cosω₀ + z^(−2)) | ∣z∣ > 1 |
sin(ω₀n)u[n] | z^(−1)sinω₀/(1 − 2z^(−1)cosω₀ + z^(−2)) | ∣z∣ > 1 |
最重要的一行是 a^n u[n] ↔ 1/(1 − a z^(−1)):它的极点就在 z = a——于是"极点位置"和"序列的衰减率"直接对应起来了:
a 的值 | 极点 | 序列 a^n 的行为 |
|---|---|---|
0 < a < 1 | 单位圆内正实轴 | 单调衰减 |
−1 < a < 0 | 单位圆内负实轴 | 正负交替、衰减 |
a = 1 | z = 1(单位圆上) | 恒为 1,不衰减 |
a = −1 | z = −1(单位圆上) | ±1 交替振荡 |
a > 1 | 单位圆外 | 发散 |
这一张表就是"稳定性"的几何版:极点的模长就是每一步的缩放倍数。
三、和 DTFT、DFT 的关系
| 变换 | 在哪取值 | 结果 |
|---|---|---|
| Z 变换 | 整个 z 平面 | 复函数 X(z) |
| DTFT | 单位圆 z = e^(jω) | 连续周期谱(周期 2π) |
| DFT | 单位圆上均取 N 点 | N 条离散谱线 |
| FFT | 同 DFT | 只是算法更快(O(N log N)) |
一条线贯通:
拉氏 X(s) ──σ=0──▶ 傅里叶 X(jω)
│z = e^(sT) │z = e^(jω)
▼ ▼
Z 变换 X(z) ──单位圆──▶ DTFT X(e^jω) ──均匀取样──▶ DFT注意离散谱是周期的:X(e^jω) 以 2π 为周期——这正是"采样导致频谱周期延拓"在变换域的样子。
四、差分方程与系统函数
离散系统的输入输出关系是差分方程,取 Z 变换(用移位性质:
| 时域 | z 域 |
|---|---|
x[n − k] | z^(−k)·X(z)(零初始条件下) |
卷积 x * h | X(z)·H(z) |
)就得到系统函数:
y[n] = a·y[n−1] + x[n] ⇔ H(z) = Y(z)/X(z) = 1/(1 − a z^(−1))这就是"IIR 滤波器"的样子:输出又回到输入里(反馈),所以 H(z) 的分母不为 1。若分子是 Σ b_k z^(−k)、分母是 1 − Σ a_k z^(−k),则:
- 分母的根 = 极点 → 决定稳定性
- 分子的根 = 零点 → 决定频率响应的凹陷
五、稳定判据与逆 Z 变换
稳定判据(因果系统):
全部极点落在单位圆内(
|z| < 1)⇔ 稳定;单位圆上(|z| = 1)是临界;圆外则发散。
这和连续域的"左半平面"完全对应。
逆 Z 变换三条路:
| 方法 | 做法 | 适用 |
|---|---|---|
| 部分分式 + 查表 | 拆成 A/(1 − a z^(−1)) 这类项再反查 | 最常用 |
| 幂级数(长除法) | 把 X(z) 展成 z^(−n) 的级数,系数就是序列 | 只要前几项 |
| 留数法 | 沿闭合路径积分求留数 | 理论题 |
部分分式的系数求法:与拉氏完全一样,用"乘上因子后取极限"。
六、频率响应:把 z 放到单位圆上
H(e^jω) = H(z)|_{z = e^jω} 就是频率响应——它说"每个频率被放大或衰减多少"。
以 H(z) = 1/(1 − 0.5z^(−1)) 为例:
| ω | ∣H(e^jω)∣ | 增益 (dB) | 相位 (rad) |
|---|---|---|---|
| 0(直流) | 2.000000 | 6.0206 | 0.000000 |
| 0.25π | 1.357197 | 2.6529 | −0.500474 |
| 0.5π | 0.894427 | −0.9691 | −0.463648 |
| 0.75π | 0.714813 | −2.9161 | −0.255495 |
| π(最高频) | 0.666667 | −3.5218 | −0.000000 |
直流被放大 2 倍、最高频被压到 2/3——这是一个低通滤波器。
−3 dB 点(增益降到 1/√2 的地方)可以解出来:|1 − 0.5e^(−jω)| = √2 ⇒ ω = arccos(0.75) = 0.7227 rad。若采样率是 8 kHz,这个角频率对应 920.21 Hz——这就是这个滤波器的"截止频率"。
七、写出来就是个循环:Direct Form
上面的 H(z) 对应一条极简单的差分方程:
c
y = 0.5 * y + x; /* 一步就是一拍 */"滤波器"在代码里就是一个循环里的一行——这是整门课最实用的一句话。DSP 里的 IIR/FIR 结构(Direct Form I/II、级联、并联)不过是把这一行按零极点排布重新组织(见 数字信号处理)。
示例
例 1:同一套差分方程,两条路径给出同一个数(C)
一个一阶 IIR 低通 y[n] = 0.5y[n−1] + x[n],输入一个周期方波。路径一按差分方程递推,路径二按"与冲激响应卷积"。
#include <stdio.h>
int main(void) {
int x[16];
double y = 0.0;
for (int n = 0; n < 16; n++) x[n] = ((n % 8) < 4) ? 1 : 0;
printf("%-4s %-4s %-12s %-12s\n", "n", "x[]", "iterate", "convolve");
for (int n = 0; n < 16; n++) {
y = 0.5 * y + x[n]; /* 路径一:差分方程 */
double s = 0.0; /* 路径二:与 h[k] = 0.5^k 卷积 */
for (int k = 0; k <= n; k++) {
double hk = 1.0;
for (int i = 0; i < k; i++) hk *= 0.5;
s += hk * x[n - k];
}
printf("%-4d %-4d %-12.6f %-12.6f\n", n, x[n], y, s);
}
printf("two paths agree -> the difference equation and h[n] describe the same filter\n");
return 0;
}
c 本站为静态站,不提供在线运行;可复制到本地用 gcc / python 执行
预期输出:
n x[] iterate convolve
0 1 1.000000 1.000000
1 1 1.500000 1.500000
2 1 1.750000 1.750000
3 1 1.875000 1.875000
4 0 0.937500 0.937500
5 0 0.468750 0.468750
6 0 0.234375 0.234375
7 0 0.117188 0.117188
8 1 1.058594 1.058594
9 1 1.529297 1.529297
10 1 1.764648 1.764648
11 1 1.882324 1.882324
12 0 0.941162 0.941162
13 0 0.470581 0.470581
14 0 0.235291 0.235291
15 0 0.117645 0.117645
two paths agree -> the difference equation and h[n] describe the same filter读数:两列逐行完全相同——"差分方程"和"冲激响应"是同一个滤波器的两种说法(这正是 H(z) = 1/(1 − 0.5z^(−1)) 的含义)。
还能看出低通的效果:输入是"4 个 1、4 个 0"的方波,输出爬不上去也降不下来——峰值只到 1.88、谷值只降到 0.12,高频的跳变被削平了。
例 2:冲激、阶跃、极点、频率响应、逆 Z 一次验完(Python)
C 段验证了"两条路径等价"。这里把 Z 变换的六件事补齐:冲激与阶跃响应、极点位置的三种命运、频率响应与 −3 dB 点、逆 Z 的两条路径、以及 s 平面到 z 平面的映射。
import math
import cmath
def pad(s, w):
dw = sum(2 if ord(c) > 0x2000 else 1 for c in str(s))
return str(s) + " " * max(0, w - dw)
def table(head, rows, gap=2):
data = [[str(c) for c in r] for r in rows]
w = [max([sum(2 if ord(c) > 0x2000 else 1 for c in str(head[i]))]
+ [sum(2 if ord(c) > 0x2000 else 1 for c in r[i]) for r in data]) + gap
for i in range(len(head))]
print(" " + "".join(pad(head[i], w[i]) for i in range(len(head))))
for r in data:
print(" " + "".join(pad(r[i], w[i]) for i in range(len(head))))
print("=== 1. 一阶系统 y[n] = a·y[n-1] + x[n]:两个输入两种答案 ===")
a = 0.5
h = [a ** n for n in range(8)]
rows = [["输入 x[n] = δ[n]", "h[n] = 0.5^n", " ".join("%.4f" % v for v in h),
"前 8 项和 %.4f(无穷和为 2)" % sum(h)]]
y = [0.0] * 8
for n in range(8):
y[n] = a * (y[n - 1] if n else 0.0) + 1.0 # 输入换成单位阶跃
rows.append(["输入 x[n] = u[n]", "y[n] = 2 - 0.5^n", " ".join("%.4f" % v for v in y),
"第 8 项 %.4f(趋于 2)" % y[-1]])
table(["输入", "闭式解", "前 8 项", "极限"], rows)
print(" 同一套差分方程:冲激输入得到 h[n] = 0.5^n,阶跃输入得到 2 - 0.5^n。")
print(" 两者都收敛到有限值,因为极点 |z| = 0.5 < 1 —— 这就是离散系统的稳定判据。")
print()
print("=== 2. 极点位置决定命运:|a| 是否小于 1 ===")
rows = []
for aa in (0.5, -0.8, 1.0, 1.2):
seq = [aa ** n for n in range(8)]
if abs(aa) < 1:
kind = "收敛 → 稳定"
elif abs(aa) == 1:
kind = "不衰减也不增长 → 临界(不稳定)"
else:
kind = "发散 → 不稳定"
rows.append(["a = %+.1f" % aa, "%+.4f" % aa, " ".join("%+.3f" % v for v in seq[:6]), kind])
table(["系数", "极点 z=a", "h[n] 前 6 项", "结论"], rows)
print(" a = -0.8 时序列正负交替但在衰减;a = 1.2 时前 6 项已经涨到 2.488(第 7 项 2.986),别被'头几项还小'骗了。")
print(" Z 域的稳定判据只有一句:全部极点落在单位圆内(|z| < 1)。")
print()
print("=== 3. 频率响应 |H(e^jω)|:数字低通长什么样 ===")
rows = []
for w_frac in (0.0, 0.25, 0.5, 0.75, 1.0):
w = math.pi * w_frac
H = 1.0 / (1 - a * cmath.exp(-1j * w))
rows.append(["%.2fπ(%.4f rad)" % (w_frac, w), "%.6f" % abs(H),
"%.4f" % (20 * math.log10(abs(H))), "%.6f" % cmath.phase(H)])
table(["ω", "|H(e^jω)|", "增益 (dB)", "相位 (rad)"], rows)
w3 = math.acos(0.75)
table(["派生量", "值"],
[["ω = 0(直流)增益", "2.000000(= 1/(1-0.5))"],
["ω = π(最高频)增益", "%.6f(= 1/1.5)" % abs(1.0 / (1 + a))],
["-3 dB 点 ω = arccos(0.75)", "%.6f rad" % w3],
["折成采样率 fs = 8 kHz", "%.2f Hz" % (w3 / (2 * math.pi) * 8000)]])
print(" 直流增益 2、最高频增益 0.6667 —— 低频放、高频压,一阶低通的教科书形状。")
print(" -3 dB 点在 ω = arccos(0.75) = %.4f rad,换算到 8 kHz 采样率就是 %.1f Hz。"
% (w3, w3 / (2 * math.pi) * 8000))
print()
print("=== 4. 二阶系统的逆 Z:部分分式拆开再反变换 ===")
print(" H(z) = 1/((1 - 0.5z^-1)(1 - 0.25z^-1)) = 2/(1 - 0.5z^-1) - 1/(1 - 0.25z^-1)")
print(" 反变换:h[n] = 2·0.5^n - 0.25^n")
direct = []
for n in range(6):
if n == 0:
direct.append(1.0)
elif n == 1:
direct.append(0.75 * direct[0])
else:
direct.append(0.75 * direct[n - 1] - 0.125 * direct[n - 2])
rows = []
for n in range(6):
rows.append(["n=%d" % n, "%.6f" % (2 * 0.5 ** n - 0.25 ** n),
"%.6f" % direct[n]])
table(["项", "闭式 2·0.5^n - 0.25^n", "差分方程逐项迭代"], rows)
print(" 两条路径给出同一列数:闭式来自部分分式(解析),迭代来自差分方程(数值)。")
print(" 两个极点 z = 0.5 与 0.25 都在单位圆内 → 稳定;极点在单位圆内的不同半径决定衰减快慢。")
print()
print("=== 5. s 平面 ↔ z 平面:一次映射把两门课连起来 ===")
rows = [["s 平面(连续)", "z = e^(sT)(离散)", "含义"],
["虚轴 σ = 0", "单位圆 |z| = 1", "稳定与不稳定的分界"],
["左半平面 σ < 0", "单位圆内 |z| < 1", "稳定(衰减)"],
["右半平面 σ > 0", "单位圆外 |z| > 1", "不稳定(发散)"],
["s = jπ/T", "z = -1", "奈奎斯特频率(最高可表示频率)"]]
table(rows[0], rows[1:])
print(" 所以'Z 变换是离散世界的拉普拉斯变换':把 s = jω 再代进去,就得到 DTFT,而它只是 Z 变换在单位圆上的取值。")
print(" 一条线:拉氏(连续、全平面)→ 取 σ=0 → 傅里叶;拉氏 → z = e^(sT) → Z 变换 → 取 z = e^(jω) → DTFT。")
python 本站为静态站,不提供在线运行;可复制到本地用 gcc / python 执行
预期输出:
=== 1. 一阶系统 y[n] = a·y[n-1] + x[n]:两个输入两种答案 ===
输入 闭式解 前 8 项 极限
输入 x[n] = δ[n] h[n] = 0.5^n 1.0000 0.5000 0.2500 0.1250 0.0625 0.0312 0.0156 0.0078 前 8 项和 1.9922(无穷和为 2)
输入 x[n] = u[n] y[n] = 2 - 0.5^n 1.0000 1.5000 1.7500 1.8750 1.9375 1.9688 1.9844 1.9922 第 8 项 1.9922(趋于 2)
同一套差分方程:冲激输入得到 h[n] = 0.5^n,阶跃输入得到 2 - 0.5^n。
两者都收敛到有限值,因为极点 |z| = 0.5 < 1 —— 这就是离散系统的稳定判据。
=== 2. 极点位置决定命运:|a| 是否小于 1 ===
系数 极点 z=a h[n] 前 6 项 结论
a = +0.5 +0.5000 +1.000 +0.500 +0.250 +0.125 +0.062 +0.031 收敛 → 稳定
a = -0.8 -0.8000 +1.000 -0.800 +0.640 -0.512 +0.410 -0.328 收敛 → 稳定
a = +1.0 +1.0000 +1.000 +1.000 +1.000 +1.000 +1.000 +1.000 不衰减也不增长 → 临界(不稳定)
a = +1.2 +1.2000 +1.000 +1.200 +1.440 +1.728 +2.074 +2.488 发散 → 不稳定
a = -0.8 时序列正负交替但在衰减;a = 1.2 时前 6 项已经涨到 2.488(第 7 项 2.986),别被'头几项还小'骗了。
Z 域的稳定判据只有一句:全部极点落在单位圆内(|z| < 1)。
=== 3. 频率响应 |H(e^jω)|:数字低通长什么样 ===
ω |H(e^jω)| 增益 (dB) 相位 (rad)
0.00π(0.0000 rad) 2.000000 6.0206 0.000000
0.25π(0.7854 rad) 1.357197 2.6529 -0.500474
0.50π(1.5708 rad) 0.894427 -0.9691 -0.463648
0.75π(2.3562 rad) 0.714813 -2.9161 -0.255495
1.00π(3.1416 rad) 0.666667 -3.5218 -0.000000
派生量 值
ω = 0(直流)增益 2.000000(= 1/(1-0.5))
ω = π(最高频)增益 0.666667(= 1/1.5)
-3 dB 点 ω = arccos(0.75) 0.722734 rad
折成采样率 fs = 8 kHz 920.21 Hz
直流增益 2、最高频增益 0.6667 —— 低频放、高频压,一阶低通的教科书形状。
-3 dB 点在 ω = arccos(0.75) = 0.7227 rad,换算到 8 kHz 采样率就是 920.2 Hz。
=== 4. 二阶系统的逆 Z:部分分式拆开再反变换 ===
H(z) = 1/((1 - 0.5z^-1)(1 - 0.25z^-1)) = 2/(1 - 0.5z^-1) - 1/(1 - 0.25z^-1)
反变换:h[n] = 2·0.5^n - 0.25^n
项 闭式 2·0.5^n - 0.25^n 差分方程逐项迭代
n=0 1.000000 1.000000
n=1 0.750000 0.750000
n=2 0.437500 0.437500
n=3 0.234375 0.234375
n=4 0.121094 0.121094
n=5 0.061523 0.061523
两条路径给出同一列数:闭式来自部分分式(解析),迭代来自差分方程(数值)。
两个极点 z = 0.5 与 0.25 都在单位圆内 → 稳定;极点在单位圆内的不同半径决定衰减快慢。
=== 5. s 平面 ↔ z 平面:一次映射把两门课连起来 ===
s 平面(连续) z = e^(sT)(离散) 含义
虚轴 σ = 0 单位圆 |z| = 1 稳定与不稳定的分界
左半平面 σ < 0 单位圆内 |z| < 1 稳定(衰减)
右半平面 σ > 0 单位圆外 |z| > 1 不稳定(发散)
s = jπ/T z = -1 奈奎斯特频率(最高可表示频率)
所以'Z 变换是离散世界的拉普拉斯变换':把 s = jω 再代进去,就得到 DTFT,而它只是 Z 变换在单位圆上的取值。
一条线:拉氏(连续、全平面)→ 取 σ=0 → 傅里叶;拉氏 → z = e^(sT) → Z 变换 → 取 z = e^(jω) → DTFT。四条结论:
- 同一个差分方程换输入就换答案:冲激给
0.5^n(前 8 项和 1.9922、无穷和 2),阶跃给2 − 0.5^n。"系统"这个角色由差分方程(也就是 H(z))扮演。 - 极点位置的三分法很干净:
|a| < 1收敛、= 1临界、> 1发散。a = 1.2时第 7 项就到 2.986——绝不能只看前几项判断稳定性。 - 一阶低通的两个端点和截止点都能手算:直流增益 2、最高频 2/3、−3 dB 在
ω = arccos(0.75),折成 8 kHz 采样率是 920.21 Hz。 - 逆 Z 的两条路径一致:部分分式给闭式
2·0.5^n − 0.25^n,差分方程迭代也给同一列数。两个极点都在单位圆内,所以两条路径都收敛。
考点
考点
1. 定义与收敛域
X(z) = Σ x[n]z^(−n);单边是 n ≥ 0。- ROC 是环形:因果
|z| > r;同一个 X(z) 配不同 ROC 就是不同序列。
2. 常用变换对
| x[n] | X(z) |
|---|---|
| δ[n] | 1 |
| u[n] | z/(z−1) |
| aⁿu[n] | 1/(1 − az^(−1)) |
| naⁿu[n] | az^(−1)/(1 − az^(−1))² |
3. Z 变换、DTFT、DFT 的关系(高频)
- DTFT 是 Z 变换在单位圆上的取值:
z = e^(jω)。 - DFT 是单位圆上均匀取 N 点;FFT 只是算法上的加速。
X(e^jω)以 2π 为周期——对应"采样导致频谱周期延拓"。
4. 差分方程与系统函数
- 移位性质:
x[n − k] ⇔ z^(−k)X(z)(零初始条件)。 H(z) = Y(z)/X(z);卷积 ⇔ 相乘。- 分母的根是极点(定稳定),分子的根是零点(定凹陷)。
5. 稳定性判据
因果系统稳定 ⇔ 全部极点位于单位圆内(
|z| < 1)。
对应关系:左半平面 ↔ 单位圆内;虚轴 ↔ 单位圆。单位圆上 = 临界振荡(如 a = 1 或 a = −1)。
6. 频率响应与截止频率
H(e^jω) = H(z)|_{z=e^jω},以 2π 为周期(所以只看 ω ∈ [0, π] 就够)。- 一阶低通
1/(1 − az^(−1)):直流增益1/(1−a)、最高频增益1/(1+a)。 - −3 dB 点解方程
|1 − ae^(−jω)| = √2·(1−a)之类的式子,再乘fs/(2π)换成 Hz。
7. 逆 Z 变换
- 部分分式 + 查表最常用;重极点要拆成
A/(1−az^(−1)) + B/(1−az^(−1))²。 - 长除法只适合"要前几项"。
- 反变换的结果取决于 ROC(同一个 H(z) 可能是因果衰减,也可能是反因果发散)。
8. 易错点清单
- 把稳定判据写成"极点在左半平面":那是连续域的;离散域看单位圆。
- 忘记 ROC:答案不唯一。
- 把
z^(−1)和s当作同类:z^(−1)代表一个采样周期的延迟。 - 频率响应里把 ω 当普通频率:ω 是归一化角频率,
f = ω·fs/(2π)。 - 只看前几项判断发散:
a = 1.2时前几项还很小。 - 把 DFT 的谱线当连续谱:它只在 N 个频率点上取值。
- 把
H(z)用于非零初始条件的差分方程:移位性质里会多出初始值项(与拉氏的−y(0)同理)。
小结
- Z 变换是离散世界的拉普拉斯变换:
z = e^(sT),把连续域的左半平面折成离散域的单位圆内。 - 稳定判据从"左半平面"换成"单位圆内":
|z| < 1稳定,= 1临界,> 1发散——极点的模长就是每一步的缩放倍数。 - Z 变换 → 单位圆 → DTFT → 均匀取样 → DFT:一条线把五个变换串起来。
- 差分方程、系统函数 H(z)、冲激响应 h[n] 是同一个东西的三种写法(示例里两条路径给出同一列数)。
- 频率响应就是"把 z 放到单位圆上":直流增益
1/(1−a)、最高频增益1/(1+a)、−3 dB 点可以解方程算出来。 - 一个数字滤波器在代码里是一行:
y = 0.5*y + x。
回到分支:这四章是一条完整的链——信号与系统 讲"卷积描述系统"、傅里叶变换 讲"信号由哪些频率组成"、拉普拉斯变换 把两者合到 s 域并给出稳定性判据,这一章把 s 换成 z、让整套逻辑在采样系统里重新成立。
这就是数字信号处理的全部预备知识:有了 H(z),就可以设计滤波器(滤波器设计基础)、做频谱分析(数字信号处理)、写音频与图像的算法(数字音频、数字图像处理)。前置数学仍是 复变函数与积分变换。
这一章回答的是"离散系统怎么描述自己",下一章问的是"离散信号里到底藏了哪些频率,以及怎么算得足够快"。
下一篇:数字信号处理(DSP)
评论(0)
当前浏览器不允许本地存储,评论无法保存。
还没有评论,来说两句。