2. 信号与系统基础:连续时间信号与离散时间信号、采样定理(奈奎斯特准则)、量化与编码原理

好,咱们正式开始聊数据转换器。在动手设计ADC或DAC之前,有三大基石必须打牢——信号分类、采样定理、量化编码。这三块要是没吃透,后面做系统级仿真很容易翻车。我当年刚入行时,就因为对采样定理理解不深,把一个带通信号直接当低通信号处理,结果流片回来性能惨不忍睹……嗯,从那以后我再也不敢小看这些基础了。

2.1 连续时间信号 vs 离散时间信号

说白了,现实世界里的物理量都是连续的。温度、声音、压力——这些信号在时间轴上没有断点,我们叫它连续时间信号。但芯片里处理不了无限的点,只能每隔一小段时间抓一个快照,这就变成了离散时间信号

我个人习惯这样区分:

  • 连续时间信号:x(t),t是实数,信号在任意时刻都有定义。
  • 离散时间信号:x[n],n是整数,信号只在nTₛ时刻有值(Tₛ是采样周期)。

你想想看,ADC做的事情,就是把x(t)变成x[n]。这个过程中,信息会不会丢?当然会。但丢多少、能不能还原回来,这就是采样定理要回答的问题。

💡 我的小经验: 做系统级建模时,我习惯先用连续时间模型跑一遍理想情况,再换成离散时间模型加入非理想效应。这样对比着看,能快速定位问题是出在采样环节还是量化环节。

2.2 采样定理(奈奎斯特准则)

采样定理,也叫奈奎斯特准则。它的核心就一句话:采样频率fₛ必须大于信号最高频率f_max的两倍。写成公式就是:

fₛ > 2 × f_max

为什么是两倍?我试着用大白话解释一下。假设你有一个正弦波,频率是f₀。如果你每个周期只采一个点,你根本分不清这个点是在上升沿还是下降沿——说白了,你丢失了频率信息。只有每个周期至少采两个点,才能同时捕捉到波形的上升和下降,从而唯一确定频率。

这个2×f_max,我们叫它奈奎斯特频率。实际工程中,我从来不会卡着2倍去设计。为什么?因为抗混叠滤波器不是理想砖墙,总会有过渡带。我一般留出20%~30%的余量。比如信号最高频率是10MHz,我会选fₛ = 25MHz甚至更高。

⚠️ 避坑指南: 我曾经在一个项目中,为了省功耗把采样率压到刚好2.1倍信号带宽。结果抗混叠滤波器的滚降不够陡,带外噪声折叠回基带,SFDR直接掉了15dB。从那以后,我给自己定了个规矩:采样率至少留20%余量,除非你愿意花大价钱做高阶滤波器。

2.3 混叠现象

如果采样率不满足奈奎斯特准则,会发生什么?混叠。高频信号会伪装成低频信号,混进你的基带里。而且一旦混进来,就再也分不开了——数字滤波器也救不了你。

举个例子:假设fₛ = 100Hz,信号频率是80Hz。80Hz > 50Hz(奈奎斯特频率),所以它会被折叠到20Hz的位置。你明明想采80Hz的信号,结果看到的是20Hz的假信号。这就是混叠。

我常用的防混叠手段有两个:

  1. 前置抗混叠滤波器:在ADC之前加一个低通滤波器,把高于fₛ/2的成分滤掉。
  2. 过采样:用远高于奈奎斯特频率的采样率,把混叠推远,降低对模拟滤波器的要求。

🔑 记住这个原则: 混叠是不可逆的。一旦发生,任何数字处理都无法恢复原始信号。所以抗混叠滤波器的设计,是ADC系统级设计中最不能省的一环。

2.4 量化与编码原理

采样把时间离散化了,但每个采样点的幅度还是连续的。量化要做的,就是把连续幅度映射到有限个离散电平上。比如一个3位ADC,只能输出8个码字(000~111),每个码字对应一个电压区间。

量化过程必然引入误差,我们叫它量化误差。理想情况下,量化误差在±½ LSB之间均匀分布。LSB(Least Significant Bit)就是最低有效位对应的电压步长:

LSB = V_ref / 2^N

其中N是ADC位数,V_ref是参考电压。比如12位ADC,V_ref=3.3V,LSB ≈ 0.8mV。

量化误差的功率(也就是噪声)可以算出来:

量化噪声功率 = LSB² / 12

这个公式很实用。我经常用它来快速估算一个ADC的理论信噪比上限:

SNR_max (dB) = 6.02 × N + 1.76

举个例子:16位ADC的理论SNR是6.02×16 + 1.76 ≈ 98.08dB。但实际芯片能做到95dB就算不错了,因为还有热噪声、抖动、非线性等因素。

💡 我常用的快速估算: 每增加1位分辨率,SNR提升约6dB。所以当你看到某款ADC标称SNR=80dB,你大概能猜到它的有效位数ENOB ≈ (80 - 1.76) / 6.02 ≈ 13位。这个估算方法在选型时特别管用。

2.5 编码方式

量化之后,每个电平需要对应一个数字码字。常见的编码方式有:

编码方式 说明 典型应用
二进制原码 最高位为符号位,0正1负 早期ADC,简单直观
二进制补码 负数用补码表示,便于加减运算 现代ADC/DSP最常用
格雷码 相邻码字只有1位不同 高速ADC,减少误码率
温度计码 用连续1的个数表示数值 Flash ADC内部结构

我个人最常用的是二进制补码。为什么?因为后续的数字信号处理(比如FFT、滤波)都是基于补码运算的,省去了一次码型转换。但如果你做的是高速ADC(比如采样率超过1GSPS),格雷码会更友好——相邻码字只变1位,能显著降低误码率。

🔑 总结一下本章的核心:

  • 连续信号→离散信号:靠采样,必须满足奈奎斯特准则(fₛ > 2f_max)
  • 离散幅度→数字码字:靠量化,必然引入量化噪声(LSB²/12)
  • 编码方式选型:低速选补码,高速选格雷码

这些基础概念,后面每一章都会用到。尤其是采样定理和量化噪声模型,是系统级仿真的起点。建议你花点时间把公式推导一遍,自己写个小脚本验证一下。我当年就是这么干的——虽然慢,但理解深。

好,这一章就到这里。下一章我们聊数据转换器的关键性能指标,包括SNR、SNDR、SFDR、ENOB这些你一定会遇到的参数。到时候我会结合一个实际项目中的测试数据来讲,保证比教科书上的例子更接地气。