Appearance
采样定理:为什么 44.1kHz
概念
前面几乎所有内容都建立在一个前提上:手上已经有一串采样值。 但真实世界是连续的电压、声压、光强。采样就是那个把连续世界变成数字序列的动作,而这一步做错了,后面所有算法都救不回来。
采样定理(奈奎斯特-香农定理)只有一句话:
只要 fs > 2·f_max,就能从采样序列完美重建原信号。
其中 fs/2 叫奈奎斯特频率,2·f_max 叫奈奎斯特率。它为什么重要,而不是一句套话? 因为采样在频域做的事是"把频谱以 fs 为周期复制"。如果原信号的最高频率超过了 fs/2,复制出来的副本会互相重叠——重叠的部分永远分不开了(这就是混叠)。信息在采样的那一瞬间就丢了,后面无论用什么算法都拿不回来。
44.1 kHz 这个怪数字,是本章的落点:它不是从"20 kHz × 2"直接乘出来的。
原理
一、采样的频域本质:频谱被周期复制
时域采样 = 乘一个冲激串。乘冲激串在频域的等价动作是卷积一个冲激串,结果就是:
采样后信号的频谱 = 原频谱以
fs为周期、无限次平移后叠加。
由此立刻得到三件事:
| 结论 | 含义 |
|---|---|
频谱以 fs 为周期 | 所以"离散信号的频率"天然是模 fs 的等价类 |
只看 [0, fs/2] 就够 | 高于 fs/2 的部分只是镜像 |
fs/2 是折叠轴 | 频率 f 与 fs − f 采样后完全无法区分 |
第三条就是混叠的全部内容。 折叠公式可以写成一行:
f_alias = | f − fs · round(f / fs) |二、混叠:两个不同的模拟信号,一份相同的数据
以 fs = 1000 Hz 为例:
| 输入频率 | 采样后看到 | 判断 |
|---|---|---|
| 100 Hz | 100 Hz | 低于 fs/2,忠实还原 |
| 300 Hz | 300 Hz | 低于 fs/2,忠实还原 |
| 500 Hz | 500 Hz | 正好在奈奎斯特频率上,振幅与相位都不可靠 |
| 700 Hz | 300 Hz | 折叠成 300 Hz,与原信号无法区分 |
| 800 Hz | 200 Hz | 折叠成 200 Hz |
| 1100 Hz | 100 Hz | 折叠成 100 Hz |
| 1400 Hz | 400 Hz | 折叠成 400 Hz |
| 2000 Hz | 0 Hz | 折叠成直流 |
注意 300 与 700 Hz 的关系:它们关于 fs/2 = 500 Hz 对称,采样后得到的是一模一样的序列。也就是说——
"采样定理"管的不是"能不能重建",而是"重建出来的是不是原来那一个"。
为什么 500 Hz 特别危险:它落在折叠轴上,采样点全部落在正弦的同一相位(±1 交替),连振幅都读不出来。所以工程上永远不会让信号贴着 fs/2。
三、抗混叠滤波器:必须在采样之前
既然混叠之后的频段无法区分,唯一的对策就是在采样之前把高于 fs/2 的成分清掉——这就是抗混叠滤波器(anti-aliasing filter),一个模拟低通。
三条纪律:
- 它必须是模拟(或采样率更高的数字)滤波器:一旦采样完成,混叠就已经发生,"数字抗混叠"是个不存在的概念;
- 它必须放在采样器前面:放在后面等于没放;
- 它必须足够陡:留下的过渡带越窄,对滤波器阶数的要求越高——这就是 44.1 kHz 存在的全部理由。
四、重建:sinc 插值的理想与现实
理想重建是每个采样点乘一个 sinc:
x(t) = Σ_n x[n] · sinc( (t − nT)/T )实践中的三个妥协:
| 方式 | 频响 | 表现 |
|---|---|---|
| 理想 sinc | 陡峭的矩形 | 无限长、不可实现、非因果 |
| 零阶保持(ZOH) | sinc 包络 × 1/f 滚降 | DAC 的实际输出,高频幅度与相位都有损失 |
| 过采样 + 数字滤波 | 把过渡带搬进数字域 | 现代做法(见第七节) |
孔径效应:DAC 输出不是瞬间跳变,而是保持一个小宽度 τ,其频响是 sinc(f·τ) 形状——在 fs/2 处最多掉 −3.92 dB(sinc(0.5) = 2/π)。这就是为什么现代 DAC 都要做过采样和数字补偿。
五、量化:位深换信噪比
采样解决时间轴,量化解决幅度轴。均匀量化(步长 Δ = 满量程/2^N)的量化噪声近似均匀分布,可得:
SNR = 6.02·N + 1.76 dB (N 是位数)
动态范围(理论) = 20·lg(2^N) = 6.02·N dB| 位深 | 量化级数 | 理论信噪比 | 动态范围 | 2 V 满量程下 1 LSB |
|---|---|---|---|---|
| 8 位 | 256 | 49.92 dB | 48.16 dB | 7812.500 μV |
| 12 位 | 4096 | 74.00 dB | 72.25 dB | 488.281 μV |
| 16 位 | 65536 | 98.08 dB | 96.33 dB | 30.518 μV |
| 24 位 | 16777216 | 146.24 dB | 144.49 dB | 0.119 μV |
每多一位换 6.02 dB(约一个字比特)。16 位的 98.08 dB 已经覆盖录音棚实测 90 至 96 dB 的可用动态范围——这就是 CD 定 16 位的理由。
而低于 1 LSB 的信号会被量化噪声埋掉,所以有抖动(dither)技术:故意加一点点白噪声,把"量化台阶"变成"随机噪声",听感反而更自然。加噪声提高听感,这是量化里最反直觉的一条。
六、44.1 kHz 是怎么来的
它不是为了音频定的,而是为了录像机。
数字音频最早要靠视频磁带(VTR)存储:把 PCM 码流当成一帧图像的一行行来记录。要同时兼容两种电视制式,采样率必须满足:
| 制式 | 有效行数 | 帧率 | 每行样本数 | 折出的采样率 |
|---|---|---|---|---|
| NTSC(525 行) | 490 行 | 30 帧/s | 3 | 44100 Hz |
| PAL(625 行) | 588 行 | 25 帧/s | 3 | 44100 Hz |
490 × 3 × 30 = 44100,588 × 3 × 25 = 44100——两个看起来完全不搭的制式给出了同一个数。
为什么是 3 个样本每行:一对立体声 16 位样本 = 32 比特,加上同步与纠错码,正好塞进一条有效视频行的容量。
音频这边的要求只是"够用":要覆盖 20 kHz,fs > 40000 Hz 就够;剩下 22050 − 20000 = 2050 Hz 全部留给抗混叠滤波器的过渡带——这才是 44100 而不是 40000 的真正价值。 对比一下其他采样率:
| 应用 | 采样率 | 奈奎斯特频率 | 实际最高频率 | 保护带占 fs/2 |
|---|---|---|---|---|
| 电话 | 8000 Hz | 4000 Hz | 3400 Hz | 15.0% |
| 调幅广播 | 22050 Hz | 11025 Hz | 10000 Hz | 9.3% |
| CD 音频 | 44100 Hz | 22050 Hz | 20000 Hz | 9.3% |
| 专业音频 | 48000 Hz | 24000 Hz | 20000 Hz | 16.7% |
| 数字示波器 | 1 GHz | 500 MHz | 400 MHz | 20.0% |
读这张表的正确方式:fs/2 减去 f_max 就是留给滤波器的过渡带。电话只留 15.0%、CD 留 9.3%——保护带越窄,滤波器越难做,这就是 48 kHz(专业音频)比 44.1 kHz 更"舒服"的原因。48 kHz 的优势不是音质更好,而是滤波器更好做。
七、过采样与噪声整形:1 位怎么做到 24 位
既然量化噪声是"白"的(均匀铺满 [0, fs/2]),那就有一招:把采样率提得很高,噪声总功率不变但摊得极宽,落在音频带内的那一小部分就少了。过采样每提高一倍(一个倍频程),带内信噪比改善 3 dB。
ΔΣ(Delta-Sigma)调制器更狠:它把量化噪声"整形"推到高频(噪声整形),再用数字滤波器把高频噪声滤掉。效果是:
| 调制器阶数 | 过采样率 OSR | 折成倍频程 | 信噪比增益 | 折成有效位数 |
|---|---|---|---|---|
| 1 阶 ΔΣ | 64 | 6 | +54 dB | 9.0 位 |
| 1 阶 ΔΣ | 256 | 8 | +72 dB | 12.0 位 |
| 2 阶 ΔΣ | 64 | 6 | +90 dB | 15.0 位 |
| 2 阶 ΔΣ | 256 | 8 | +120 dB | 19.9 位 |
一阶每倍频程换 9 dB(1.5 位),二阶换 15 dB(2.5 位)。所以一个 1 位量化器 + 高阶噪声整形 + 高过采样率,就够做出 24 位音频——这正是 SACD / DSD 和几乎所有现代 ADC 的做法。DSD 用 2.8224 MHz 采样、每次只输出 1 位,靠的就是这张表。
八、采样率与位深一起决定数据量
数据率 = fs × 位深 × 声道数| 格式 | 采样率 | 位深 | 声道 | 数据率 | 每分钟体积 |
|---|---|---|---|---|---|
| 电话 | 8000 Hz | 8 bit | 1 | 64 kbps | 0.48 MB |
| CD | 44100 Hz | 16 bit | 2 | 1.41 Mbps | 10.58 MB |
| 高解析音频 | 96000 Hz | 24 bit | 2 | 4.61 Mbps | 34.56 MB |
| DSD | 2822400 Hz | 1 bit | 2 | 5.64 Mbps | 42.34 MB |
算出三个有用的数:
44100 × 16 × 2 = 1411200 bit/s就是常说的 1411.2 kbps;- MP3 的 128 kbps 相当于 11.0:1 的压缩;
- 一张 74 分钟 CD 的裸数据量 = 783.2 MB——这就是当年光盘定成 700 MB 量级的来源(还要加上纠错与寻址开销)。
高解析 96/24 是 CD 的 3.265 倍数据量。值不值另说,但先得把账算对。
示例
例 1:两个不同的模拟信号,一份相同的采样数据(C)
用 fs = 1000 Hz 分别采样 100、300、700、1100 Hz 四个频率,各取 16 个点,然后把两组"折叠对"的序列逐点相减——如果混叠是真的,差应该只有浮点舍入量级。
/* 混叠:fs = 1000 Hz 下采样四个频率,700 Hz 与 300 Hz 得到完全相同的序列 */
#include <stdio.h>
#include <math.h>
#define PI 3.14159265358979323846
#define FS 1000.0
#define N 16
int main(void)
{
static const double freqs[4] = {100.0, 300.0, 700.0, 1100.0};
double series[4][N];
printf("%-8s %s\n", "f(Hz)", "sampled values (fs = 1000 Hz, 16 points)");
for (int j = 0; j < 4; j++) {
printf("%-8.0f", freqs[j]);
for (int i = 0; i < N; i++) {
series[j][i] = cos(2.0 * PI * freqs[j] * i / FS);
printf(" %+.4f", series[j][i]);
}
printf("\n");
}
printf("\n");
for (int j = 0; j < 4; j++) {
double k = floor(freqs[j] / FS + 0.5);
printf("fold: %6.0f Hz -> %6.0f Hz\n", freqs[j], fabs(freqs[j] - k * FS));
}
printf("\n");
double d1 = 0.0, d2 = 0.0;
for (int i = 0; i < N; i++) {
double a = fabs(series[1][i] - series[2][i]); /* 300 与 700 */
double b = fabs(series[0][i] - series[3][i]); /* 100 与 1100 */
if (a > d1) {
d1 = a;
}
if (b > d2) {
d2 = b;
}
}
printf("max |300 Hz - 700 Hz| = %.3e -> identical sequence\n", d1);
printf("max |100 Hz - 1100 Hz| = %.3e -> identical sequence\n", d2);
printf("two different analog signals, one indistinguishable digital record.\n");
return 0;
}
c 本站为静态站,不提供在线运行;可复制到本地用 gcc / python 执行
预期输出:
f(Hz) sampled values (fs = 1000 Hz, 16 points)
100 +1.0000 +0.8090 +0.3090 -0.3090 -0.8090 -1.0000 -0.8090 -0.3090 +0.3090 +0.8090 +1.0000 +0.8090 +0.3090 -0.3090 -0.8090 -1.0000
300 +1.0000 -0.3090 -0.8090 +0.8090 +0.3090 -1.0000 +0.3090 +0.8090 -0.8090 -0.3090 +1.0000 -0.3090 -0.8090 +0.8090 +0.3090 -1.0000
700 +1.0000 -0.3090 -0.8090 +0.8090 +0.3090 -1.0000 +0.3090 +0.8090 -0.8090 -0.3090 +1.0000 -0.3090 -0.8090 +0.8090 +0.3090 -1.0000
1100 +1.0000 +0.8090 +0.3090 -0.3090 -0.8090 -1.0000 -0.8090 -0.3090 +0.3090 +0.8090 +1.0000 +0.8090 +0.3090 -0.3090 -0.8090 -1.0000
fold: 100 Hz -> 100 Hz
fold: 300 Hz -> 300 Hz
fold: 700 Hz -> 300 Hz
fold: 1100 Hz -> 100 Hz
max |300 Hz - 700 Hz| = 9.992e-15 -> identical sequence
max |100 Hz - 1100 Hz| = 7.105e-15 -> identical sequence
two different analog signals, one indistinguishable digital record.读数:
- 700 Hz 那一行与 300 Hz 那一行逐点完全相同(最大差
9.992e-15,浮点舍入级别);1100 Hz 与 100 Hz 也完全相同(7.105e-15)。 - 折叠表一目了然:
700 → 300、1100 → 100,都符合f_alias = |f − fs·round(f/fs)|。 - 结论句只有一句:两个不同的模拟信号,变成了一份无法区分的数字记录。 而这份记录在采样点之间怎么插值都无所谓——含 300 Hz 的那个插值结果对 700 Hz 的输入同样是"正确"的。
例 2:折叠、采样率、44.1 kHz、量化、数据量、ΔΣ 一次算完(Python)
C 段抓住了混叠的本质。这一段把整章的账补齐:混叠折叠表、采样率与保护带的选法、44.1 kHz 的双制式推导、量化信噪比与 LSB、数据率与光盘容量、过采样与噪声整形的增益。
import math
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. 混叠:采样之后,频率只剩一个模 fs 的等价类 ===")
fs = 1000.0
def fold(f):
return abs(f - round(f / fs) * fs)
rows = []
for f in (100.0, 300.0, 500.0, 700.0, 800.0, 1100.0, 1400.0, 2000.0):
a = fold(f)
if f == 500.0:
note = "正好在奈奎斯特频率上,振幅与相位都不可靠"
elif a == f:
note = "低于 fs/2,忠实还原"
else:
note = "折叠成 %.0f Hz,与原信号无法区分" % a
rows.append(["%.0f Hz" % f, "%.0f Hz" % a, note])
table(["输入频率", "采样后看到", "判断"], rows)
print(" 折叠公式只有一句:f_alias = |f − fs·round(f/fs)| —— 所有相差整数倍 fs 的频率,采样后完全重合。")
print(" 300 与 700 Hz 隔着 fs/2 对称,输出一模一样;800 Hz 变成 200 Hz,1100 Hz 变成 100 Hz。")
print()
print("=== 2. 采样率怎么选:奈奎斯特频率与保护带 ===")
rows = []
for name, fsv, fmax in (("电话", 8000.0, 3400.0), ("调幅广播", 22050.0, 10000.0),
("CD 音频", 44100.0, 20000.0), ("专业音频", 48000.0, 20000.0),
("数字示波器", 1e9, 4e8)):
nyq = fsv / 2
rows.append([name, "%.0f Hz" % fsv, "%.0f Hz" % nyq, "%.0f Hz" % fmax,
"%.1f%%" % ((nyq - fmax) / nyq * 100)])
table(["应用", "采样率 fs", "奈奎斯特频率 fs/2", "实际最高频率", "保护带占 fs/2"], rows)
print(" 奈奎斯特说 fs > 2·f_max 就够,工程上还要再留一条保护带给抗混叠滤波器用:")
print(" 电话只留 15.0%(3400 到 4000 Hz),CD 留 9.3% —— 保护带越窄,滤波器越难做。")
print()
print("=== 3. 44.1 kHz 的来历:为录像机留的带宽 ===")
rows = []
for name, lines, fps in (("NTSC(525 行)", 490, 30.0), ("PAL(625 行)", 588, 25.0)):
rows.append([name, "%d 行" % lines, "%.0f 帧/s" % fps, "3 样本/行",
"%.0f Hz" % (lines * 3 * fps)])
table(["制式", "有效行数", "帧率", "每行样点数", "折出的采样率"], rows)
print(" 490 × 3 × 30 = 44100,588 × 3 × 25 = 44100 —— 同一个 44100 能同时塞进两种电视制式,")
print(" 这才是 44.1 kHz 这个怪数字的真正来源(而不是从 20 kHz 直接乘出来的)。")
print(" 兼顾 20 kHz 音频只需要 40000 Hz,剩下的 4100 Hz 全部留给抗混叠滤波器的过渡带。")
print()
print("=== 4. 量化:位深换信噪比 ===")
rows = []
for bits in (8, 12, 16, 24):
snr = 6.02 * bits + 1.76
dyn = 20 * math.log10(2 ** bits)
rows.append(["%d 位" % bits, "%d" % (2 ** bits), "%.2f dB" % snr, "%.2f dB" % dyn,
"%.3f μV" % (2.0 / 2 ** bits * 1e6)])
table(["位深", "量化级数", "理论信噪比 6.02N+1.76", "动态范围 20lg(2^N)", "2 V 满量程下 1 LSB"], rows)
print(" 每多 1 位,量化信噪比涨 6.02 dB(约等于 1 个二进制位);")
print(" 16 位的 98.08 dB 已经覆盖录音棚实测 90 至 96 dB 的可用动态范围,再往上就是给后期处理留余量了。")
print(" 低于 1 LSB 的弱信号会被量化噪声完全埋掉 —— 所以有抖动(dither)技术,故意加一点噪声换听感。")
print()
print("=== 5. 采样率与位深一起决定数据量 ===")
rows = []
for name, fsv, bits, ch in (("电话", 8000.0, 8, 1), ("CD", 44100.0, 16, 2),
("高解析音频", 96000.0, 24, 2), ("DSD(1 位)", 2822400.0, 1, 2)):
rate = fsv * bits * ch
rr = "%.2f Mbps" % (rate / 1e6) if rate >= 1e6 else "%.0f kbps" % (rate / 1e3)
rows.append([name, "%.0f Hz" % fsv, "%d bit" % bits, "%d" % ch,
rr, "%.2f MB/分钟" % (rate * 60 / 8 / 1e6)])
table(["格式", "采样率", "位深", "声道", "数据率", "每分钟体积"], rows)
cd_rate = 44100.0 * 16 * 2
print(" CD 的 1411.2 kbps 是基准:MP3 的 128 kbps 相当于 %.1f:1 的压缩,高解析 96/24 则是 CD 的 %.3f 倍。"
% (cd_rate / 128000, 96000.0 * 24 * 2 / cd_rate))
print(" 一张 74 分钟 CD 的裸数据量 = %.1f MB —— 这就是当年光盘定成 700 MB 的量级来源。"
% (cd_rate * 74 * 60 / 8 / 1e6))
print()
print("=== 6. 过采样与噪声整形:ΔΣ 凭什么用 1 位做到 24 位 ===")
rows = []
for order, gain in ((1, 9.0), (2, 15.0)):
for osr in (64, 256):
rows.append(["%d 阶 ΔΣ" % order, "OSR = %d" % osr, "%.0f 倍频程" % math.log2(osr),
"+%.0f dB" % (gain * math.log2(osr)),
"%.1f 位" % (gain * math.log2(osr) / 6.02)])
table(["调制器阶数", "过采样率", "折成倍频程", "信噪比增益", "折成有效位数"], rows)
print(" 一阶 ΔΣ 每倍频程过采样换 9 dB(1.5 位),二阶换 15 dB(2.5 位):OSR = 256 时二阶能换到 120 dB。")
print(" 于是 1 位量化器配高阶噪声整形就够做 24 位音频 —— 这正是 SACD / DSD 和几乎所有现代 ADC 的做法。")
python 本站为静态站,不提供在线运行;可复制到本地用 gcc / python 执行
预期输出:
=== 1. 混叠:采样之后,频率只剩一个模 fs 的等价类 ===
输入频率 采样后看到 判断
100 Hz 100 Hz 低于 fs/2,忠实还原
300 Hz 300 Hz 低于 fs/2,忠实还原
500 Hz 500 Hz 正好在奈奎斯特频率上,振幅与相位都不可靠
700 Hz 300 Hz 折叠成 300 Hz,与原信号无法区分
800 Hz 200 Hz 折叠成 200 Hz,与原信号无法区分
1100 Hz 100 Hz 折叠成 100 Hz,与原信号无法区分
1400 Hz 400 Hz 折叠成 400 Hz,与原信号无法区分
2000 Hz 0 Hz 折叠成 0 Hz,与原信号无法区分
折叠公式只有一句:f_alias = |f − fs·round(f/fs)| —— 所有相差整数倍 fs 的频率,采样后完全重合。
300 与 700 Hz 隔着 fs/2 对称,输出一模一样;800 Hz 变成 200 Hz,1100 Hz 变成 100 Hz。
=== 2. 采样率怎么选:奈奎斯特频率与保护带 ===
应用 采样率 fs 奈奎斯特频率 fs/2 实际最高频率 保护带占 fs/2
电话 8000 Hz 4000 Hz 3400 Hz 15.0%
调幅广播 22050 Hz 11025 Hz 10000 Hz 9.3%
CD 音频 44100 Hz 22050 Hz 20000 Hz 9.3%
专业音频 48000 Hz 24000 Hz 20000 Hz 16.7%
数字示波器 1000000000 Hz 500000000 Hz 400000000 Hz 20.0%
奈奎斯特说 fs > 2·f_max 就够,工程上还要再留一条保护带给抗混叠滤波器用:
电话只留 15.0%(3400 到 4000 Hz),CD 留 9.3% —— 保护带越窄,滤波器越难做。
=== 3. 44.1 kHz 的来历:为录像机留的带宽 ===
制式 有效行数 帧率 每行样点数 折出的采样率
NTSC(525 行) 490 行 30 帧/s 3 样本/行 44100 Hz
PAL(625 行) 588 行 25 帧/s 3 样本/行 44100 Hz
490 × 3 × 30 = 44100,588 × 3 × 25 = 44100 —— 同一个 44100 能同时塞进两种电视制式,
这才是 44.1 kHz 这个怪数字的真正来源(而不是从 20 kHz 直接乘出来的)。
兼顾 20 kHz 音频只需要 40000 Hz,剩下的 4100 Hz 全部留给抗混叠滤波器的过渡带。
=== 4. 量化:位深换信噪比 ===
位深 量化级数 理论信噪比 6.02N+1.76 动态范围 20lg(2^N) 2 V 满量程下 1 LSB
8 位 256 49.92 dB 48.16 dB 7812.500 μV
12 位 4096 74.00 dB 72.25 dB 488.281 μV
16 位 65536 98.08 dB 96.33 dB 30.518 μV
24 位 16777216 146.24 dB 144.49 dB 0.119 μV
每多 1 位,量化信噪比涨 6.02 dB(约等于 1 个二进制位);
16 位的 98.08 dB 已经覆盖录音棚实测 90 至 96 dB 的可用动态范围,再往上就是给后期处理留余量了。
低于 1 LSB 的弱信号会被量化噪声完全埋掉 —— 所以有抖动(dither)技术,故意加一点噪声换听感。
=== 5. 采样率与位深一起决定数据量 ===
格式 采样率 位深 声道 数据率 每分钟体积
电话 8000 Hz 8 bit 1 64 kbps 0.48 MB/分钟
CD 44100 Hz 16 bit 2 1.41 Mbps 10.58 MB/分钟
高解析音频 96000 Hz 24 bit 2 4.61 Mbps 34.56 MB/分钟
DSD(1 位) 2822400 Hz 1 bit 2 5.64 Mbps 42.34 MB/分钟
CD 的 1411.2 kbps 是基准:MP3 的 128 kbps 相当于 11.0:1 的压缩,高解析 96/24 则是 CD 的 3.265 倍。
一张 74 分钟 CD 的裸数据量 = 783.2 MB —— 这就是当年光盘定成 700 MB 的量级来源。
=== 6. 过采样与噪声整形:ΔΣ 凭什么用 1 位做到 24 位 ===
调制器阶数 过采样率 折成倍频程 信噪比增益 折成有效位数
1 阶 ΔΣ OSR = 64 6 倍频程 +54 dB 9.0 位
1 阶 ΔΣ OSR = 256 8 倍频程 +72 dB 12.0 位
2 阶 ΔΣ OSR = 64 6 倍频程 +90 dB 15.0 位
2 阶 ΔΣ OSR = 256 8 倍频程 +120 dB 19.9 位
一阶 ΔΣ 每倍频程过采样换 9 dB(1.5 位),二阶换 15 dB(2.5 位):OSR = 256 时二阶能换到 120 dB。
于是 1 位量化器配高阶噪声整形就够做 24 位音频 —— 这正是 SACD / DSD 和几乎所有现代 ADC 的做法。四条结论:
- 混叠就是"模
fs的等价类":f_alias = |f − fs·round(f/fs)|;300 与 700 Hz 在fs = 1000下不可分,2000 Hz 直接折成直流。 fs/2 − f_max就是留给抗混叠滤波器的过渡带:电话 15.0%、CD 9.3%、专业音频 16.7%。采样率高一点(48 与 44.1 kHz 相比)的真正好处是滤波器更好做。- 44.1 kHz 是双制式的公约数:
490 × 3 × 30 = 588 × 3 × 25 = 44100。音频只要求 > 40000 Hz,多出来的 4100 Hz 全部是给滤波器的余量。 - 量化每多 1 位换 6.02 dB:16 位 98.08 dB(动态范围 96.33 dB,1 LSB = 30.518 μV)已经够用;二阶 ΔΣ 在 OSR = 256 时能换到 +120 dB(约 19.9 位有效),所以 1 位量化器就能做出 24 位音频。
考点
考点
1. 采样定理的准确表述
fs > 2·f_max才能无失真重建;fs/2叫奈奎斯特频率。
- 临界情况
fs = 2f_max不算数(振幅与相位都可能丢),必须严格大于。 - 采样的频域本质是频谱以
fs为周期复制;fs/2是折叠轴。
2. 混叠与折叠(高频计算题)
f_alias = |f − fs·round(f/fs)|;f与fs − f采样后不可分。- 混叠发生在采样那一刻,事后无法补救——所以抗混叠滤波器必须在采样之前,且必须是模拟滤波器。
- 已知输入频率与采样率,要能判断会不会混叠、混到哪个频率。
3. 重建
- 理想重建 = sinc 插值(无限长、非因果,不可实现)。
- 实际 DAC 用零阶保持,频响有
sinc包络的滚降;孔径效应在fs/2处最多掉 −3.92 dB。 - 现代做法是过采样 + 数字滤波,把陡峭的过渡带搬到数字域。
4. 量化(必背公式)
SNR = 6.02N + 1.76 dB;动态范围= 6.02N dB;1 LSB = 满量程 / 2^N。
- 每多 1 位 → 信噪比 +6.02 dB。
- 16 位 → 98.08 dB;24 位 → 146.24 dB。
- 抖动(dither):故意加噪声来消除量化台阶的相关性,加噪声反而改善听感。
5. 44.1 kHz 的来历(常考概念题)
490 × 3 × 30 = 44100(NTSC)与588 × 3 × 25 = 44100(PAL)——为视频磁带存储而定的"公约数"。- 音频只需要 > 40000 Hz;多出的 4100 Hz 是抗混叠滤波器的过渡带。
- 48 kHz 更好做的原因是保护带更宽(16.7% vs 9.3%),不是音质更好。
6. 过采样与噪声整形
- 过采样每翻一倍 → 带内信噪比 +3 dB。
- ΔΣ:一阶每倍频程 +9 dB(1.5 位)、二阶 +15 dB(2.5 位)。
- OSR = 256 时二阶换 +120 dB → 1 位量化器能做 24 位音频。
7. 数据量与易错点
数据率 = fs × 位深 × 声道数;CD =44100 × 16 × 2 = 1411200 bit/s;74 分钟 = 783.2 MB。- 把
fs/2当成"能用的最高频率":它是极限,不是工作点,实际要留保护带。 - 以为"采样率高就一定分辨率高":分辨率还看采集时长
T(见 数字信号处理)。 - 认为数字滤波器可以抗混叠:采样前没滤掉的高频已经折叠进来了,数字侧无解。
- 混淆"采样噪声"与"量化噪声":前者是时间轴离散化、后者是幅度轴离散化,公式完全不同。
小结
- 采样在频域做的事是"频谱以
fs为周期复制",fs/2是折叠轴;fs > 2f_max才不重叠。 - 混叠不可逆:
f与fs − f采样后完全一样,本例实测两组序列最大差只有9.992e-15。所以抗混叠滤波器必须在采样之前,且必须是模拟的。 - 量化是幅度轴的离散化:
SNR = 6.02N + 1.76 dB,16 位 98.08 dB、1 LSB = 30.518 μV;抖动用"加噪声"换听感。 - 44.1 kHz 是录像机时代的产物:
490×3×30 = 588×3×25,音频只需要 40 kHz,多出来的是滤波器的过渡带。 - 过采样 + ΔΣ 噪声整形让 1 位能做出 24 位音频:一阶 +9 dB/倍频程、二阶 +15 dB/倍频程,OSR = 256 时二阶换到 +120 dB。
- 数据量 =
fs × 位深 × 声道数:CD 的 1411.2 kbps、74 分钟的 783.2 MB,都是从这一行算出来的。
回到分支:这一章是整门电子通信分支的入口约束——信号与系统 讲连续、Z 变换 讲离散,而"什么时候可以从连续跨到离散"就是这一章给的;DSP 的 FFT 与 滤波器设计 的抗混叠滤波器、通信原理 的奈奎斯特与香农,全部建立在"采样没出错"这个前提上。
到这里,"信号处理与通信"这一段收口了。接下来进进阶部分:所有这一切最终都跑在真实的电磁场里——电磁场与电磁波 会给出波速、波阻抗与损耗,微波与射频基础 再把它们变成链路预算和收发机指标。前置数学仍是 复变函数与积分变换。
这一章回答的是"连续世界在哪里变成数字世界、这一步会丢什么";下一章换到物理层之下——这些信号究竟在什么介质里传播。
下一篇:电磁场与电磁波(进阶)
评论(0)
当前浏览器不允许本地存储,评论无法保存。
还没有评论,来说两句。