尧图精选

一阶低通滤波器从推导到实现:RC参数选型与离散化

🕒 发布时间:2026/10/1 3:17:55 📁 来源:尧图网络
1. 为什么一个RC电路值得反复推导很多人第一次接触滤波器是在模电课上老师写下一个分压公式说这就是低通滤波器然后就开始讲伯德图。当时觉得挺简单直到真正做项目——比如给ADC采样前端加抗混叠滤波、给PWM输出做平滑、给传感器信号去噪——才发现事情没那么简单。截止频率选多少电阻电容怎么搭配为什么同样的截止频率有的电路响应快有的响应慢阶跃响应到底长什么样这些问题光背一个公式是解决不了的。一阶低通滤波器是所有滤波器的原子。它的核心就三个元件一个电阻、一个电容加上一个信号源和一个负载。但就是这么简单的结构把传递函数、截止频率、相位延迟、阶跃响应、离散化实现这几件事全串起来了。搞透它后面看二阶、看巴特沃斯、看卡尔曼心里都有底。这篇东西我打算从最基础的电路出发把公式一步步推出来不跳步。然后讲清楚每个参数背后的物理意义再落到实际工程里怎么选值、怎么离散化写进代码、怎么用示波器验证。适合刚入门的电子/嵌入式方向的朋友也适合做了几年但一直没系统梳理过的人。推导过程我会写得细一点因为暴力枚举推导公式数学构造这套思路在滤波器设计里真的很好用——先把所有可能的形式列出来再根据需求筛选比一上来就套公式靠谱得多。2. 从分压电路到传递函数一步步推2.1 电路结构长什么样先把电路画清楚。一阶低通滤波器最经典的形式是RC串联输入信号Vin经过电阻R接到电容C的上端电容下端接地输出Vout从电容两端取出。负载如果是高阻抗比如运放输入、ADC输入可以暂时忽略如果负载不可忽略后面会讲怎么修正。这个结构为什么叫低通直观理解电容对高频信号呈现低阻抗高频成分被电容短路到地输出就小了对低频信号电容阻抗高几乎不分流输出接近输入。所以低频能过高频被挡。但光靠直觉不够得用数学说话。这里用复频域s域来分析因为电容的伏安关系在时域是微分方程在s域变成代数运算推导会干净很多。2.2 用阻抗分压写出传递函数在s域里电阻的阻抗还是R电容的阻抗是1/(sC)。输出取自电容两端所以这是一个分压Vout(s) Vin(s) · Zc / (R Zc)其中Zc 1/(sC)。代入Vout(s) Vin(s) · [1/(sC)] / [R 1/(sC)]分子分母同乘sCVout(s) Vin(s) · 1 / (1 sRC)所以传递函数H(s) Vout(s)/Vin(s) 1 / (1 sRC)这就是一阶低通滤波器最核心的表达式。分母是s的一次多项式所以叫一阶。整个系统只有一个极点位于s -1/(RC)。注意这里假设输出端没有负载电流。如果后级输入阻抗不是无穷大相当于电容并联了一个负载电阻RL传递函数会变成RL/(RRL) · 1/(1 s·(R||RL)·C)直流增益不再是1截止频率也会变。实际设计时一定要确认后级阻抗。2.3 从s域到频率响应令s jω要分析不同频率下的表现把s换成jωω 2πfH(jω) 1 / (1 jωRC)这是一个复数有模和相角。模幅频特性|H(jω)| 1 / √(1 (ωRC)²)相角相频特性∠H(jω) -arctan(ωRC)从模的表达式能直接看出低通特性ω0时|H|1直流全过ω→∞时|H|→0高频全挡。中间有个过渡带。2.4 截止频率到底怎么定义截止频率也叫-3dB频率的定义是输出功率降到直流功率的一半对应幅值降到直流的1/√2 ≈ 0.707倍。令|H(jω)| 1/√21 / √(1 (ωRC)²) 1/√2两边平方1/(1 (ωRC)²) 1/2所以(ωRC)² 1ωRC 1ωc 1/(RC)换成频率fc 1/(2πRC)这就是那个被无数人背下来的公式。但我想强调的是它的来源——不是凭空来的是从功率减半这个物理定义推出来的。理解了这一点以后看到其他滤波器的截止频率定义就不会混淆。提示有些教材用-3dB定义有些用幅值0.707定义其实是一回事。但要注意一阶滤波器的截止频率处相移正好是-45°这个特性在相位敏感的系统里很重要。2.5 为什么是-20dB/十倍频把幅频特性取dB20log|H| -20log√(1 (ωRC)²) -10log(1 (ωRC)²)当ω ωc时(ωRC)² 1近似为20log|H| ≈ -10log((ωRC)²) -20log(ωRC)频率每增加10倍log(ωRC)增加1所以幅值下降20dB。这就是一阶滤波器滚降斜率-20dB/dec的由来。这个斜率决定了滤波器的陡峭程度。一阶只有-20dB/dec意味着如果要在截止频率10倍处把干扰压到1/100一阶刚好够如果要压到1/1000就得上二阶甚至更高。实际选阶数时先算干扰频率和截止频率的比值再算需要的衰减量反推阶数。3. 参数怎么选从公式到实际电路3.1 截止频率定了R和C怎么分配公式fc 1/(2πRC)只约束了RC乘积R和C可以有无穷多种组合。那到底怎么选这里有几个实际约束第一阻抗匹配。如果前级输出阻抗高R不能太小否则分压严重如果后级输入阻抗低R也不能太大否则带不动负载。一般R选在1k到100k之间比较稳妥。第二电容类型。小电容pF级容易受寄生电容影响大电容uF级以上可能是电解电容等效串联电阻ESR大高频特性差。信号路径上一般用陶瓷电容或薄膜电容容量在nF到uF之间。第三噪声。电阻热噪声密度是√(4kTR)R越大噪声越大。但R大时C可以小C本身不产生热噪声。所以低噪声场合倾向于用较小的R和较大的C。第四响应速度。时间常数τ RC阶跃响应的上升时间10%到90%约2.2τ。如果要求快速响应τ要小即RC乘积小。综合下来我的经验是先根据截止频率算出RC乘积然后在这个乘积下R取10k左右作为起点C 1/(2πfc·R)。比如fc 1kHzRC 159usR取10kC 15.9nF取标准值15nF或16nF。然后根据实际约束微调。约束条件R的选择倾向C的选择倾向原因低噪声小大电阻热噪声与R成正比快速响应小小τRC要小低功耗大小电流小抗寄生中中避免极端值成本中中标准值易采购3.2 负载效应被忽略的坑前面推导假设负载无穷大。实际电路中如果后级输入阻抗Rin不是远大于R就会出问题。考虑负载后电容两端并联了Rin。传递函数变成H(s) (Rin/(RRin)) / (1 s·(R||Rin)·C)直流增益从1降到Rin/(RRin)截止频率从1/(2πRC)变成1/(2π(R||Rin)C)。如果Rin R直流增益只有0.5截止频率也降了一半。这个偏差在精密测量里是致命的。解决办法要么让Rin R至少10倍以上要么在滤波器后面加一级电压跟随器运放缓冲。我一般会在ADC前端加一个运放跟随既隔离负载又降低输出阻抗。3.3 阶跃响应时域里看滤波器频域看完了回到时域。给一个阶跃输入Vin V0·u(t)解微分方程或者做拉普拉斯逆变换得到Vout(t) V0·(1 - e^(-t/RC))这就是经典的指数充电曲线。时间常数τ RCt τ时输出达到63.2%t 3τ时达到95%t 5τ时达到99.3%。上升时间10%到90%t_r τ·(ln0.9 - ln0.1) τ·ln9 ≈ 2.2τ这个关系在选参数时非常有用。比如你要做一个按键消抖电路要求按下后10ms内输出稳定到95%那3τ ≤ 10msτ ≤ 3.33msRC ≤ 3.33ms。如果R取10kC ≤ 333nF。实操心得很多人只关注截止频率忽略了阶跃响应。实际上在数字信号采集里阶跃响应决定了建立时间直接影响采样率的上限。如果滤波器建立太慢两次采样之间信号还没稳定就会产生码间干扰。3.4 相位延迟低通的代价一阶低通在截止频率处相移-45°在远低于截止频率处相移接近0远高于截止频率处接近-90°。相移意味着延迟。群延迟定义为相位对频率的负导数τg -dφ/dω对一阶低通φ -arctan(ωRC)求导τg RC / (1 (ωRC)²)直流时群延迟等于RC随着频率升高而减小。这意味着不同频率成分延迟不同方波经过低通后边沿会变缓还会出现轻微的过冲振铃虽然一阶不会振铃但边沿会指数变化。在闭环控制系统里这个相位延迟会吃掉相位裕度。如果滤波器放在反馈环路里截止频率不能选得太低否则系统会振荡。我一般会把滤波器截止频率设在环路带宽的5到10倍以上确保在穿越频率处相移足够小。4. 从模拟到数字离散化实现4.1 为什么需要离散化现在大部分信号处理都在MCU或DSP里做模拟RC电路只是前端抗混叠。真正的主力是一行代码实现的数字低通滤波器。所以必须把s域传递函数转成z域差分方程。4.2 一阶后向差分法最简单的方法是用后向差分近似微分。s ≈ (1 - z⁻¹)/T其中T是采样周期。代入H(s) 1/(1 sRC)H(z) 1 / (1 RC·(1 - z⁻¹)/T)分子分母同乘TH(z) T / (T RC - RC·z⁻¹)写成差分方程。设y[n]是输出x[n]是输入y[n]·(T RC) T·x[n] RC·y[n-1]y[n] [T·x[n] RC·y[n-1]] / (T RC)令α T/(T RC)则y[n] α·x[n] (1-α)·y[n-1]这就是那个在嵌入式里被用烂了的一行滤波代码。α越小滤波越强但响应越慢。4.3 α和截止频率的关系从α T/(T RC)反推RC T·(1-α)/αfc 1/(2πRC) α / (2πT(1-α))反过来给定fc和采样率fs 1/Tα 2πfc·T / (1 2πfc·T) 2πfc/(fs 2πfc)这个公式在选α时直接能用。比如fs 10kHzfc 100Hzα 2π·100/(10000 2π·100) ≈ 628/10628 ≈ 0.059。代码里就写y 0.059x 0.941y。注意后向差分法在低频时精度不错但高频时频率映射会畸变。如果fc接近fs/2实际截止频率会偏离设计值。更精确的方法是用双线性变换Tustin但一阶滤波器一般用后向差分就够了误差在可接受范围内。4.4 定点数实现的坑在低成本MCU上浮点运算慢很多人用定点数。α通常小于1定点表示时要放大。比如用Q15格式α_int round(α * 32768)。y[n] (α_int·x[n] (32768-α_int)·y[n-1]) 15这里有两个坑一是累加可能溢出要用32位中间变量二是右移截断会引入直流偏置最好加四舍五入。我一般会写temp α_int * x (32768 - α_int) * y_prev; y (temp 16384) 15;加16384就是加0.5的Q15表示实现四舍五入。4.5 实测验证用示波器看阶跃响应代码写完了怎么验证最直接的方法是给一个阶跃输入用示波器看输出。如果是模拟电路用信号发生器产生方波频率远低于截止频率看边沿的指数上升。如果是数字滤波器用DAC输出或者PWM加RC还原再测量。我习惯用这个方法方波频率设为fc/10这样方波的平坦部分能充分建立边沿能看清时间常数。测量从10%到90%的时间和理论值2.2RC对比。如果偏差超过20%检查负载效应或电容的实际容值陶瓷电容的容值随电压和温度变化很大X7R比C0G差很多。5. 常见问题与排查实录5.1 截止频率实测和计算对不上这是最常见的问题。原因通常有四个一是电容实际容值偏差陶瓷电容标称值±10%很常见X7R在直流偏压下可能掉30%二是电阻精度碳膜电阻±5%金属膜±1%三是负载效应后级阻抗不够高四是寄生电容PCB走线和输入引脚电容在pF级如果C本身只有几pF影响就大了。排查顺序先断开负载测如果对了就是负载问题再用LCR表测实际C值最后检查PCB布局输入走线尽量短地平面完整。5.2 输出有高频噪声理论上低通应该把高频滤掉但实际输出可能还有噪声。原因可能是电容的等效串联电感ESL在高频时让电容变成电感滤波失效或者地线环路引入了干扰或者电源噪声耦合过来。解决办法在电容旁边并联一个小电容比如100nF并联10pF大电容管低频小电容管高频。PCB上滤波器尽量靠近干扰源或接收端。必要时加屏蔽。5.3 数字滤波器输出有直流偏置定点数实现时右移截断总是向下取整导致输出平均值略低于输入。长时间积分后偏置累积。解决办法就是前面说的加四舍五入或者用更高精度的中间变量。另一个原因是α计算时用了近似值导致直流增益不是精确的1。检查方法输入一个恒定值看输出是否稳定在同一个值。如果不等重新算α确保α (1-α) 1在定点数里也成立。5.4 阶跃响应有振荡一阶滤波器理论上不会振荡如果看到振荡说明电路里存在寄生电感或电容形成了高阶系统。比如长导线电感加上电容可能在高频产生谐振。解决办法是加阻尼比如串联一个小电阻几欧到几十欧或者缩短导线。数字滤波器如果振荡检查是不是用了错误的差分方程或者α大于1了。α必须在0到1之间否则系统不稳定。问题现象可能原因排查方法解决措施截止频率偏高电容实际值偏小LCR表测量更换电容或并联截止频率偏低负载效应断开负载测试加缓冲器高频噪声大ESL或地环路换小电容并联优化布局直流偏置定点截断输入恒定值测试加四舍五入阶跃振荡寄生参数缩短导线加阻尼电阻响应太慢RC太大测上升时间减小R或C5.5 采样率选多少才够数字滤波器的采样率至少是截止频率的10倍以上否则离散化误差大而且抗混叠滤波器不好设计。比如fc 1kHzfs至少10kHz最好20kHz以上。如果fs只有2fc那截止频率附近的频率映射会严重畸变实际响应和设计值差很远。我一般遵循这个规则fs ≥ 20·fc。这样后向差分的频率畸变小于5%工程上够用了。如果要求更高用双线性变换但计算量稍大。6. 几个容易被忽略的细节6.1 电容的直流偏压效应陶瓷电容尤其是X7R、X5R的容值随直流偏压变化。比如一个10uF/16V的X7R电容在10V偏压下实际容值可能只有5uF。如果滤波器用在有直流偏置的场合比如单电源运放的偏置点截止频率会翻倍。解决办法选C0G/NP0电容稳定但容量小或者降额使用选耐压高得多的或者用薄膜电容。6.2 电阻的热噪声和电流噪声电阻热噪声密度en √(4kTR)室温下4kT ≈ 1.6e-20。R 10k时en ≈ 12.6nV/√Hz。如果带宽是10kHz总噪声约1.26uV。这个量级在12位ADCLSB约0.8mV下可以忽略但在24位ADCLSB约0.1uV下就显著了。低噪声设计要用小R。电流噪声在低阻值电阻里更明显但一般信号源阻抗不高时不用太担心。6.3 滤波器级联的阻抗匹配如果需要更陡的滚降可以把两个一阶滤波器级联。但不能简单地把两个RC串起来因为后级的R会成为前级的负载。正确做法是每级之间加缓冲器或者用有源滤波器Sallen-Key等。如果非要用无源级联第二级的R要远大于第一级的R至少10倍否则前级的截止频率会被拉低。但这样第二级的噪声会更大。所以无源级联一般只用在要求不高的场合。6.4 上电初始状态数字滤波器上电时y[n-1]初始值如果是0而输入不是0输出会有一个过渡过程。如果系统对启动时间敏感可以把y初始化为第一个采样值或者先跑几个周期再启用输出。模拟电路上电时电容从0开始充电也有类似过程一般几十个τ后稳定。6.5 温度漂移电阻的温度系数一般是±100ppm/°C电容C0G是±30ppm/°CX7R是±15%。如果工作温度范围大截止频率会漂移。精密场合要选低温漂元件或者用温度补偿。一般消费级产品不用太在意工业级要算一下最坏情况。7. 从一阶到更高阶思路延伸搞透一阶之后二阶、三阶就是水到渠成的事。二阶低通传递函数是H(s) ωn² / (s² 2ζωn·s ωn²)其中ωn是自然频率ζ是阻尼系数。ζ 1/√2时是巴特沃斯响应最平坦ζ 1/√2时有过冲ζ 1/√2时响应慢。设计时先根据衰减要求定阶数再根据响应形状定ζ。离散化时二阶用双线性变换更稳。差分方程会变成y[n] b0·x[n] b1·x[n-1] b2·x[n-2] - a1·y[n-1] - a2·y[n-2]系数用标准公式算网上有现成的计算器。但理解了推导过程你就能自己算不用依赖工具。我个人的习惯是能用一阶解决就不用二阶因为一阶相位延迟小、计算量小、参数少、不容易出错。只有在一阶滚降不够时才上二阶。很多传感器去噪、按键消抖、PWM平滑一阶完全够用。最后分享一个我常用的快速估算方法如果你要在某个频率f1处把干扰衰减到原来的1/N一阶滤波器的截止频率大约取fc f1/N。比如1kHz的干扰要衰减到1/10fc取100Hz。这个估算基于-20dB/dec的斜率在f1 fc时误差不大现场调试时很好用。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →