
1. 为什么数字时代我们还要谈模拟信号处理很多入行的工程师都有个错觉既然主控芯片里ADC越来越快、分辨率越来越高前端模拟电路是不是可以随便对付一下反正采样进来之后算法能救回来。这个想法我在实际项目中见过太多次翻车了。某次做工业振动监测ADC用的是24位的理论分辨率高得吓人结果采集回来的信号基线噪声大得离谱有效位连14位都不到。后来排查了一圈问题根本不在数字端而是前端调理电路的电源纹波、地回路阻抗和放大器选型全都有毛病。那一次让我意识到模拟前端做得不好再强的数字后端也等于在垃圾堆里挖金子。模拟信号处理指的是在信号进入ADC或比较器之前用连续时间的电路手段对信号进行放大、滤波、变换、匹配等一系列操作。它解决的核心问题很朴素传感器输出的原始信号往往太微弱、太脏、阻抗不匹配直接采样等于把问题留给数字域去擦屁股。而在很多场景下数字域根本擦不干净——比如信号信噪比太低、动态范围不够、频带内混入了强干扰这些损失是不可逆的。所以要理解模拟信号处理得先接受一个反直觉的事实数字系统再强大ADC入口之前的模拟信号质量决定了整个系统性能的上限。这就是Shannon采样定理里被很多人忽略的前提——它假设输入信号是带限干净的而现实中这个“带限干净”恰恰要由模拟电路来保证。这篇文章的读者我默认是两类人一类是刚接触嵌入式或硬件设计的学生和初级工程师正在困惑“为什么别人的采集电路噪声那么小”另一类是长期写代码、偶尔碰硬件的软件工程师想搞明白传感器信号从物理世界到ADC引脚之间到底发生了什么。文章里不堆公式重点讲清原理、设计取舍和实战中容易踩的坑。2. 模拟信号处理的基本功放大、滤波、调制、阻抗变换模拟信号处理之所以被称作“处理”而不是简单的“传输”是因为它包含了一整套对信号做操作的手段。我习惯把它拆成四大类幅度操作、频率操作、频谱搬移操作和阻抗操作。理解这套分类你拿到任何一份信号链设计需求都能迅速定位到对应模块。2.1 幅度操作把小信号变成ADC的“舒适区”绝大多数传感器输出的信号都很微弱。热电偶的输出是毫伏级电桥式应变片的差分输出也就是每伏激励几个毫伏的变化量MEMS加速度计在低g场景下输出同样很小。而ADC的满量程输入通常是几伏。这时候就需要放大器把信号幅度抬到ADC量程范围内同时尽量不引入额外噪声。放大器选型上仪表放大器INA是处理差分小信号的第一选择因为它天生就有高共模抑制比。比如桥式传感器两端的共模电压可能有2.5V甚至更高而差模信号只有10mV。如果用一个普通运放搭差分电路电阻失配0.1%就会引入额外的共模到差模转换直接毁掉信噪比。INA内部做了激光修调的电阻网络共模抑制比能做到90dB以上这是分立方案很难匹敌的。不过要注意INA的增益不是越高越好。增益高了带宽就下来了。我记得某款常用INAG1000时的带宽只有几十kHz拿去做振动信号有效带宽10kHz都勉强。很多新手选型只看增益精度不看增益带宽积结果电路搭出来是个低通滤波器高频信号全被削了。2.2 频率操作滤波器的角色不可替代滤波器是模拟信号处理里最“花心思”的部分。它干的事情从字面上理解很直白——让想要频率成分通过、把不想要的滤掉。但工程上真正难的是确定“哪个频带是想要的、哪个是该滤的”以及滤波器本身引入的相位失真、群延迟、振铃能不能接受。按实现方式分有源滤波器和无源滤波器。无源滤波器只用电阻、电容和电感适合高频和功率场景但电感在低频段体积大、损耗高所以在传感器信号链路里更多用的是有源RC滤波器——运放配合电阻电容构成。常见的结构有Sallen-Key和Multiple FeedbackMFB。关于滤波器阶数有个经验法则一阶滤波器滚降速率只有20dB/dec很多时候不够用两阶是40dB/dec是工程中最常用的折中四阶以上能到80dB/dec但电路复杂度和元件敏感度会迅速上升。你要滤除一个频率很近的强干扰时高阶数几乎不可避免但高Q值滤波器在阶跃响应下会很明显地振铃这在脉冲类信号处理里是致命伤。2.3 频率搬移操作模拟域的调制与解调很多人一想到调制解调就觉得那是通信IC的事。但实际上模拟信号处理里的频率搬移大量出现在传感器激励和解调链路里。最典型的例子是锁相放大器和斩波放大器。锁相放大器的思路是给传感器一个已知频率的正弦激励然后让输出信号与参考信号相乘经过低通滤波后得到直流分量。这个直流分量正比于传感器响应信号的同相分量而所有与参考频率不一致的噪声、漂移和工频干扰都会被平均掉。能做到多狠呢用锁相放大技术能在100dB噪声背景下把信号捞出来。生物电检测里的皮肤电反应、荧光检测里微弱光信号提取靠的都是这个原理。斩波放大器则是在运放内部把输入信号斩波调制到高频放大后再解调回基带从而避开运放本身的1/f噪声和失调漂移。像一些高精度的电流检测放大器内部就是这样的架构。这类手段的本质是先把信号搬到噪声较弱的频段去处理再搬回来——模拟域里典型的“换个战场再战斗”思路。2.4 阻抗变换很多人忽略的关键一步信号从高阻抗源传递到低阻抗负载时如果不做缓冲信号幅度和波形就会被负载吃掉。教科书上说的是分压效应工程上的表现就是“悬空测是好的一接负载就变形”。举个例子一个高阻压电传感器的输出阻抗可能在数十兆欧而滤波电容的阻抗在低频下可能只有几百千欧。直接把传感器接RC滤波器滤波器的电容会瞬间把传感器的电荷泄放掉你不会量到真实信号。正确的做法是在中间加一级高输入阻抗的电压跟随器做缓冲用运放的输入阻抗吉欧级别去匹配传感器用低输出阻抗去驱动后级。电化学传感器的恒电位仪电路里对电极和工作电极之间的电解液阻抗极高必须用高输入阻抗的运算放大器做前端。我记得实际调试时遇到过一个问题某一批电路低频输出异常查来查去发现是PCB上残留的助焊剂在潮湿环境下形成漏电通路等效阻抗只有几十兆欧把信号分流掉了一截。清洗板子后问题消失——这种与“阻抗思维”直接相关的隐性坑不亲自动手很难遇到。3. 运放选型时容易被低估的十个参数运放是模拟信号处理的核心积木可以说模拟信号链路的性能上限就是由运放决定的。很多工程师选运放只看增益带宽积和压摆率这两个参数虽然重要但远不是全部。下面我按实际调试时踩坑的频次逐个说清楚那些容易被低估的参数。3.1 输入偏置电流高阻节点的隐形杀手输入偏置电流是运放输入端实际流入或流出的微小电流。对于像OP07、OPA2277这类双极型运放偏置电流可能是纳安级而CMOS输入级的运放比如OPA333、LMP7701偏置电流能低到皮安甚至飞安级。为什么这个参数要命因为当信号源是高阻抗的比如光电二极管、压电传感器、高阻分压网络偏置电流流过源阻抗会形成额外的直流压降。假使偏置电流是10nA源阻抗是10MΩ压降就是0.1V——这已经比很多传感器的有效信号还大了。我做过一个微弱电流检测的项目用5GΩ的反馈电阻把皮安级电流转成电压。一开始选了某款便宜的双极运放输出端飘得厉害示波器看全是低频噪声。后来换成输入偏置电流在飞安级别的静电计运放噪声立刻下去了两个数量级。一个简单的参数直接决定了一个设计行不行。3.2 电压噪声密度和电流噪声密度运放的噪声指标通常用噪声密度表示电压噪声密度nV/√Hz和电流噪声密度pA/√Hz。很多人看到“8nV/√Hz”觉得挺小就选了——但没有结合源阻抗来算总噪声。这里有个关键概念运放的总等效输入噪声是由电压噪声、电流噪声乘以源阻抗的乘积、以及源电阻本身的热噪声共同构成。在低源阻抗几百欧以下下电压噪声主导在高源阻抗上百千欧下电流噪声乘以源阻抗往往变成大头。选低电压噪声的运放去配高阻源电流噪声反而可能毁掉信噪比——方向反了。热电偶这类源阻抗很低的传感器适合电压噪声极低的运放如ADA4528电压噪声密度约5nV/√Hz光电二极管这类高阻源则应该选电流噪声低的CMOS运放。信息增益密度比en和源阻抗匹配是模拟信号链路设计里最容易被跳过的核算步骤。3.3 共模输入范围与轨到轨输入的取舍很多工程师看到“轨到轨输入”就认为所有运放都能把输入电压一直推到电源轨。实际上轨到轨输入的运放输入级通常用了互补的PMOS和NMOS差分对在共模电压跨越中间某段区间时会发生输入级切换导致失调电压跳变。这个跳变幅度可能从几十微伏到几百微伏不等不同型号差异很大。如果你的应用是单电源供电、信号跨越中间电平这种跳变就会变成实实在在的输出扰动而且很难滤除。更稳妥的方案一是选择输入级设计较好的轨到轨运放二是尽量把共模工作点限制在运放输入级性能较优的区间内不要真的把输入电压顶在电源轨上。3.4 开环增益和其随频率的下降运放的开环增益并非恒定而是随频率增加以-20dB/dec的斜率下降。在闭环放大器的增益误差分析里有限的开环增益会导致闭环增益误差并且在接近运放开环增益与噪声增益交点的频率附近会产生增益峰化。高频小信号放大时这个误差不可忽视。比如设计一个101倍增益的放大器如果运放开环增益只有80dB实际误差已经接近0.1%且引入了相位偏移。做精度要求高的采集系统建议核算一下你信号频率处的开环增益裕量不能让增益误差吃掉你的系统指标。3.5 压摆率与满功率带宽压摆率决定了运放能输出的最大电压变化速率。如果你需要放大一个幅度为Vpp、频率为f的正弦波满功率带宽近似为SR/(π·Vpp)。一个简单的算例输出5Vpp、频率1MHz的正弦波需要的最小压摆率是SRπ×5V×1MHz≈15.7V/μs。选型时如果只看增益带宽积而忽视压摆率大信号下波形直接变成三角波谐波失真大幅上升。这个参数对脉冲信号的边沿保真度同样关键压摆率不足会让方波变成梯形波进而破坏后续比较器的触发时刻判定。3.6 失调电压与温漂失调电压是运放输出的“偏置误差”。做直流精密测量时失调电压会被放大倍数放大直接体现在输出直流电平上。温漂μV/℃则更隐蔽——有时候你上午校准好的系统下午就偏了很多就是温漂在作怪。自动校准型运放chopper能把失调电压压到微伏级别温漂可以做到小于50nV/℃是精密直流链路的首选。但要注意chopper运放的内部开关会引入一些开关噪声在低频段尤其明显做音频或窄带低频信号时反而要慎重。4. 滤波器设计与实现从传递函数到实际电路滤波器设计是模拟信号处理中最容易“看着简单、做着翻车”的部分。我见过不少工程师直接下载一个在线工具生成参数然后照着焊电路结果实测响应跟仿真差了一大截。问题大多出在器件非理想性和布局寄生上。4.1 有源滤波器拓扑选择Sallen-Key还是MFBSallen-Key和MFB是两种最常见的二阶有源滤波器结构。Sallen-Key的非反相结构可以提供单位增益元件R、C数值比较均匀调试相对容易缺点是它对运放的共模输入范围有要求并且Q值较高时对元件失配比较敏感。MFB结构是反相的Q值随元件比值增大而增大虽然元件取值范围比较极端但高频性能通常优于Sallen-Key所以常用于较高频率或较高Q值的场合。针对传感器前端我通常的建议是低频几百Hz以下、低Q小于1、单电源场景优先用Sallen-Key中高频、高Q或对运放带宽要求严格的场景用MFB。需要注意的是滤波器电阻不能随便选大——过大的电阻与运放输入电容、寄生电容相互作用会形成极点偏移响应曲线向低频方向漂移。4.2 一个实操案例设计一个4阶低通滤波器我之前设计过一个截止频率1kHz的四阶巴特沃斯低通用于振动加速度信号抗混叠。直接用一个四阶滤波器实现时Q值比较大元件选择比较苛刻。更稳定的做法是级联两个Sallen-Key二阶节把总Q值分配给两个节第一节Q≈0.54第二节Q≈1.31。元件值取法有很多种我习惯用等值电容法所有电容取同值C然后反推电阻值。对于Sallen-Key拓扑每个节两个电阻分别记为R1和R2。当R1R2R、C1C2C时中心频率f₀1/(2πRC)Q0.5——这个Q值不够所以实际设计里通常让两个电阻等值两个电容取不同值。具体计算时等值电阻R、电容比αC1/C2Q由α决定Q≈√α/2。选择Q0.54时α≈1.17选择Q1.31时α≈6.86。电容值选好后R1/(2πf₀√(C1·C2))。那一次实测的偏差主要来自电容的容差——我用了±5%精度电容响应曲线中心频率偏移了大约8%超过了系统允许的5%误差带。后来换成±1%的薄膜电容同时把所有电阻改成0.1%精度金属膜电阻实测曲线和仿真误差控制在1%以内。这给了我一个教训滤波器的元件精度直接决定设计指标省成本不能省在这里。4.3 无源滤波器的“隐藏”问题无源RC滤波器的截止频率计算很简单f₀1/(2πRC)但实际工程中它有几个隐藏问题。第一是负载效应。RC低通后面接的负载会与滤波器的输出阻抗分压从而拉低输出幅度并改变截止频率。如果你在滤波器后面直接接一个输入阻抗为10kΩ的ADC驱动器而滤波器本身的输出阻抗也是10kΩ输出幅度就衰减了一半。解决办法是让滤波器输出阻抗远低于负载阻抗或者紧跟一个缓冲器。第二是电容类型选择。电解电容在高频下有相当明显的ESR和ESL除非做大时间常数的低频滤波否则不建议在信号链里用。C0G/NP0陶瓷电容适合高频X7R电容在偏压下的容值下降问题则要特别留意。有次我在一个1kHz滤波器里用了X7R电容结果实际截止频率比设计值高了30%原因就是直流偏置让电容容值掉了一截。5. 模拟与数字交界的关口ADC驱动、抗混叠与接地策略模拟信号处理并不以ADC引脚为终点。信号怎么样被ADC“看到”和“采进去”是模拟电路和数字电路结合最微妙的部分。很多系统里模拟前端做得漂漂亮亮输送到ADC输入端时却因为驱动能力不足或布局不当把最终性能拉低。5.1 ADC输入端的驱动问题逐次逼近型SARADC的输入端并不是纯高阻负载。它内部有采样电容阵列在每个采样周期这个电容阵列会被切换到输入电压上进行充电。如果外部驱动电路的输出阻抗太高无法在ADC采样时间内完成对采样电容的充电就会产生“采样建立误差”——表现为每次采到的值都比实际值偏低且与输入信号的摆率相关。解决的办法是加一级RC低通滤波器作为“充电电容”同时加大驱动运放的输出电流能力。一个常用的取值起点是驱动运放的输出带宽设置为主时钟频率的数倍并让串联电阻在几十到几百欧之间、电容几纳法到几十纳法确保时间常数远小于ADC采样时间。5.2 抗混叠滤波的必要性抗混叠滤波器和普通信号调理滤波器的最大区别是它的设计目标不是“让信号变好”而是“避免高频信号折叠进带内”。Shannon采样定理告诉我们采样率必须高于信号最高频率的两倍否则会发生混叠。但在现实中如果你采集一个20kHz的振动信号而信号里有40kHz的开关电源干扰即使采样率是50kSPS40kHz也会折叠到10kHz位置直接污染有效频带。这个时候就需要模拟抗混叠滤波器。它的截止频率要设置在采样率的一半以下而且阻带衰减必须足够大使得折叠到带内的杂散信号贡献可忽略。为了达成高阻带衰减通常需要至少两阶以上的模拟低通。工程实践上阶梯状的设计思路很常见先用一阶RC大致带限再用有源滤波器做到更陡的滚降两级分工前级大范围抑制后级精细控制通带。5.3 单端转差分与采样保持高分辨率ADC比如18位以上通常是差分输入结构。差分输入的好处是ADC的共模抑制能力可以把地弹和共模干扰抑制掉。这就要求前端把传感器信号转换为真正的差分信号。用仪表放大器的输出接单端-差分转换电路或者在架构上直接用全差分运放如THS4131、AD8138这一类的FDA完成转换。FDA的反馈回路会把共模输出电压稳定在用户设定的共模电平上同时产生真正的互补差分输出。值得注意的是FDA输出共模电压的设定要贴近ADC的输入共模范围要求否则ADC输入端动态性能大打折扣。不少使用ADS127x系列或AD7760系列的朋友都栽过这个跟头。5.4 接地模拟与数字之间最实际的问题接地是整个模拟信号处理里最容易被问起、也最容易被讲玄学的话题。我给出的经验一句话就能概括让信号电流回路尽量短、尽量干净不要让数字电流流过模拟回路。具体来说要注意模拟地和数字地要统一参考点位在ADC处做单点连接不要到处都铺成一片“地海”让大电流乱窜ADC下方的模拟地平面要完整、不被数字信号线切割电源模块的地回流不要经过模拟信号下方。实践中的典型错误是四处铺铜、到处打过孔结果数字电路的开关噪声在模拟地上建立起毫伏级的噪声压降全部叠加在信号上。用台式示波器量这种地噪声时用一支短弹簧地线的无源探头去测量ADC模拟输入引脚附近的GND和信号源公共点之间的电压能看到几十毫伏的毛刺——这就是地噪声在作祟。对比把数字模块关掉前后的波形定位噪声源头非常有效。6. 一次从传感器到ADC的完整信号链路设计复盘讲了一堆理论最后用一个完整案例把这些内容串起来。这个案例是模拟项目X里的一套血压模拟前端。它虽然不是那种要上天的高精尖但刚好覆盖了放大、滤波、抗混叠、ADC驱动和接地这几个核心环节。6.1 传感器与后端约束传感器是某款压阻式压力传感器满量程输出60mV桥路激励电压是5V。我们想以24位ADC、128SPS采样率来采集脉搏波。脉搏波的有效频带大约在0.5Hz到10Hz心搏峰值精度要求血氧计算中误差不超过2mmHg。满量程60mV精度0.1%的要求意味着我们至少要分辨60μV的电压变化而进一步换算AD位数需要有效位数不低于16位。模拟链路的总增益规划为50倍输出幅度3V左右接近ADC输入满量程。6.2 链路设计与关键参数第一级用INA选某款共模抑制比110dB、增益设为20倍的仪表放大器输入差分放大小信号共模抑制掉桥路的共模漂移。第二级用低噪声运放再做2.5倍增益的宽带放大同时把信号从单端转为以2.5V为参考的单端信号。然后是两阶Sallen-Key有源低通截止频率设置在30Hz用来完成抗混叠和带外噪声的衰减。最后一级是ADC驱动器配置成单位增益缓冲保证ADC采样电容有足够低的阻抗源可以充电。链路里最敏感的是增益分配。把20倍增益放在第一级让INA的高共模抑制比参与处理最小信号——因为越往后的放大器对共模干扰越不敏感但引入的噪声不可再被前级增益压低。信噪比策略上第一级放大倍数越大越有利但要保证第一级输出不饱和同时增益不能压垮其带宽。6.3 实测遇到的坑与排查过程系统第一次上电基线噪声高达5mV峰值远远超过设计预期的μV级别。我没有急着改电路参数而是做了几件事来定位问题源头。第一步用屏蔽短路线把传感器输入短路观察输出噪声。发现噪声没有明显改变——这基本排除了传感器本身说明噪声来自后续电路或环境耦合。第二步逐级断开后面的放大级用示波器看第一级的输出。断开后级的输入连接线测量第一级输出噪声明显降低。再把后级接上噪声又回来了——这个现象让我怀疑是第二级的电源退耦不到位。第三步重点检查第二级运放的电源引脚。用示波器看电源纹波发现开关电源的5V输出在第二级所在区域叠了大约5mV的200kHz纹波纹波通过运放电源引脚直接耦合到输出。短期对策是在运放电源引脚加LC滤波、把储能电容从10μF加大到47μF、并在靠近引脚位置加100nF陶瓷电容长期对策是重新规划了电源走线让开关电源的功率回路彻底避开模拟区域。这个坑解决后基线噪声降到了0.3mV以内但另一个问题浮现出来ADC采集到的脉搏波在波峰处有轻微削波且波形不够圆滑。用示波器看ADC输入端波形发现波形存在阶梯状台阶。这个台阶的来源是信号源的驱动能力不够——SAR ADC采样电容在每个采样周期都会“偷”走一点电荷而最后一个缓冲器输出阻抗稍高来不及建立稳定电压。对症的修法是调整ADC引脚与驱动之间RC网络的取值把串联电阻从1kΩ减小到330Ω同时把并联电容从10nF增大到33nF。这样既保留了足够的高频抑制又显著缩短了建立时间。更换后波形立刻正常脉搏波峰值细节也清晰了。6.4 链路性能的终极验证优化完之后我用一段标准方波替代传感器进行了频响测试确认20Hz以内幅度误差小于0.3%30Hz处衰减到大约-3dB。随后把传感器接上用真实脉搏数据做连续采样基线漂移在长时间测试的10分钟尺度上小于5μV。整体信噪比和波形质量达到设计目标。这次实战给我的整体感觉是信号链路设计本质上是一连串“匹配”的过程——阻抗匹配、幅度匹配、频带匹配、噪声匹配。任何一环出现问题最终都会以噪声、失真或蛛丝马迹的形式暴露在波形图上。排查问题不需要玄学只需要从信号链的头到尾逐级验证、逐级测量、逐级隔离总能挖出真正的元凶。我最后再分享一个被很多人忽视的小技巧在任何模拟信号链路里多用零欧电阻和测试点。它平时不起眼但在你怀疑某一级出问题时可以直接撬开跳线串或焊掉电阻实现快速级间隔离。成本几乎为零却能在调试阶段帮你节省大量时间。