3、数据采集基础:模拟信号与数字信号、采样定理(奈奎斯特)、量化与编码
大家好,我是你们的老朋友。今天咱们聊聊数据采集里最基础、也最绕不开的几个概念。说实话,我刚开始做嵌入式那会儿,觉得这些东西太理论了,不就是把电压读进来嘛。直到有一次,我在一个工业振动监测项目里栽了跟头——采集回来的波形全是毛刺,根本没法用。后来才发现,是采样率没选对,违反了奈奎斯特定理。嗯,从那以后,我再也不敢小看这些基础了。
3.1 模拟信号与数字信号:两个世界的对话
咱们的世界是模拟的。温度、压力、声音、光照,这些都是连续变化的物理量。你想想看,温度从25度升到26度,中间经过了25.1、25.01、25.001……理论上可以无限细分。这就是模拟信号——在时间和幅值上都是连续的。
但单片机呢?它只认0和1。它没法直接处理25.1234567伏这种连续值。所以,我们必须把模拟信号转成数字信号。这个过程,我习惯叫它「翻译」——把模拟世界的「方言」翻译成数字世界的「普通话」。
核心区别一句话总结:
- 模拟信号:连续、无限取值、易受干扰
- 数字信号:离散、有限取值、抗干扰强
我在项目中遇到过最典型的例子就是温度传感器。LM35这种模拟输出传感器,直接输出电压值,10mV/℃。但如果你用一根长线把它连到单片机,线缆上的噪声就会叠加进去。这时候,数字传感器(比如DS18B20)的优势就出来了——它内部自己做了模数转换,传出来的是数字量,抗干扰能力强得多。
3.2 采样定理(奈奎斯特定理):别让你的信号「说谎」
好,现在我们要把模拟信号转成数字信号。第一步就是采样——每隔一段时间,取一个瞬间的值。
问题来了:采样频率得多快?
这就引出了奈奎斯特定理。说白了就是一句话:采样频率必须大于信号最高频率的两倍。公式很简单:
fs > 2 * fmax
其中fs是采样频率,fmax是信号中最高频率成分。
为什么会这样?我打个比方。你拍一个旋转的风扇,如果快门速度太慢,拍出来的风扇叶片看起来是静止的,甚至反转了。这就是「混叠效应」——高频信号被错误地采样成了低频信号。
避坑指南:
我曾经在一个音频采集项目里,采样率设成了8kHz,信号里有4.5kHz的成分。按道理8kHz > 2*4.5kHz=9kHz?不对!8kHz小于9kHz,违反了奈奎斯特定理。结果采集回来的音频里出现了1kHz的假信号(8-4.5=3.5?不对,是4.5-8/2=0.5kHz?嗯,混叠频率计算是|f - n*fs|,这里n=1时,|4.5-8|=3.5kHz)。总之,听起来就是怪怪的,像有人在水下说话。后来加了抗混叠滤波器,才解决问题。
工程经验:
实际项目中,我一般取采样频率为信号最高频率的5-10倍。比如音频信号最高20kHz,CD标准的44.1kHz就是2.2倍,勉强够用。但如果是精密测量,我会留更多余量。另外,采样前一定要加抗混叠滤波器(低通滤波器),把高于fs/2的频率成分滤掉。这是硬性要求,别偷懒。
3.3 量化与编码:从连续到离散的「舍入」艺术
采样之后,我们得到了一串时间上离散的样本值。但这些值还是连续的——比如2.71828伏。单片机没法存这个,得把它变成整数。这个过程就是量化。
量化说白了就是「舍入」。比如一个0-5V的信号,用8位ADC(分辨率256级),每级代表5/256 ≈ 0.0195V。那么2.71828V对应的量化值就是:
量化值 = round(2.71828 / 0.0195) = round(139.4) = 139
你看,2.71828V变成了139级,对应的实际电压是139 * 0.0195 = 2.7105V。误差0.0078V,这就是量化误差。
| ADC位数 | 量化级数 | 分辨率(5V参考) | 量化误差(最大) |
|---|---|---|---|
| 8位 | 256 | 19.53 mV | ±9.77 mV |
| 10位 | 1024 | 4.88 mV | ±2.44 mV |
| 12位 | 4096 | 1.22 mV | ±0.61 mV |
| 16位 | 65536 | 76.29 μV | ±38.15 μV |
量化之后就是编码。把量化后的整数转成二进制。比如上面的139,二进制就是10001011。这样单片机就能处理了。
编码方式常见的有:
- 自然二进制码:最常用,直接对应数值
- 格雷码:相邻数值只有一位不同,用于编码器防抖动
- 补码:用于表示有符号数
我个人习惯在项目初期先确定两个参数:采样率和分辨率。采样率决定了你能看到多快的信号变化,分辨率决定了你能分辨多小的信号变化。这两个参数直接决定了ADC芯片的选型。
3.4 一个完整的采集链路示例
咱们拿一个实际场景串起来:采集麦克风的声音信号。
- 模拟信号:麦克风输出一个连续变化的电压,比如±1V
- 抗混叠滤波:加一个低通滤波器,截止频率设为20kHz(人耳上限)
- 采样:用44.1kHz的采样率,每隔22.7μs取一个值
- 量化:用16位ADC,把每个样本量化成0-65535之间的整数
- 编码:把整数转成16位二进制数,存到缓冲区
- 数字信号处理:单片机或DSP对数字信号做滤波、FFT等处理
你看,从模拟到数字,每一步都有讲究。跳过任何一步,都可能出问题。
我的一个小习惯:
在调试ADC时,我会先用一个已知的直流电压(比如用精密稳压源输出1.25V)接到ADC输入,然后读回数值,反算电压。如果偏差超过预期,就检查参考电压、量化误差、或者是不是有噪声耦合进来了。这个方法帮我快速定位过好几次硬件问题。
好了,这一章的内容就到这里。模拟与数字的转换,是嵌入式采集的基石。理解了采样定理和量化误差,你就能在设计时做出更合理的取舍。下一章,咱们聊聊传感器接口与信号调理——怎么让传感器信号「干干净净」地进到ADC里。
公众号:蓝海资料掘金营,微信deep3321