一阶RC低通滤波器的数学模型及算法实现

1.一阶RC低通滤波器的连续域数学模型

1.1数学模型的推导

上图是RC低通滤波器的电路模型,根据基尔霍夫定律可知:

即:

根据电容的特性可知:

零状态条件下的时域响应可表示为:

定义时间常数τ=RC,对上述微分方程进行拉氏变换,可得:


由此可得传递函数:

即频域数学模型为:

1.2频率特性

相频特性:

幅频特性:

以R=100Ω,C=100nF为例,该低通滤波器的频率特性如下:

1.3物理作用:

输入一个阶跃信号,经过时间τ之后,输出大约为阶跃量的63%,滞后作用。

2.一阶RC低通滤波器的算法推导

2.1离散化

采用一阶后向差分法将传递函数G(s)从S域转化到Z域,其中一阶后向差分中S域与Z域的变化关系是:

其中T是采样周期,带入传递函数G(s)中得:



Z反变换求差分方程后可得:




可得

关于滤波系数A

所以

代入

可以得到滤波系数A与截止频率f的关系:

3.一阶RC低通滤波器的C语言实现

1
2
3
4
5
6
7
8
9
10
11
#define a 0.01               // 滤波系数a(0-1) 

static float oldOutData = 0; //上一次滤波值

char filter(void)
{
nowData = get_Data(); //本次滤波值
nowOutData = a * nowData + (1.0f - a) * oldOutData;
oldOutData = nowOutData;
return nowOutData;
}

4.缺点及改善方法

4.1缺点

●仍然存在灵敏度与平稳度之间的矛盾;
●小数舍弃带来的误差(单片机很少采用浮点数,小数位要么舍弃,要么四舍五入)。

4.2改善方法——动态调整滤波系数

4.2.1实现功能

●当数据快速变化时,滤波结果能及时跟进,并且数据的变化越快,灵敏度应该越高(灵敏度优先原则);
●当数据趋于稳定,并在一个范围内振荡时,滤波结果能趋于平稳(平稳度优先原则);
●当数据稳定后,滤波结果能逼近并最终等于采样数据(消除因计算中小数带来的误差)。

4.2.2调整前判断

●数据变化方向是否为同一个方向(如当连续两次的采样值都比其上次滤波结果大时,视为变化方向一致,否则视为不一致);
●数据变化是否较快(主要是判断采样值和上一次滤波结果之间的差值)。

4.2.3调整原则

●当两次数据变化不一致时,说明有抖动,将滤波系数清零,忽略本次新采样值;
●当数据持续向一个方向变化时,逐渐提高滤波系数,提供本次采样值得权;
●当数据变化较快(差值>消抖计数加速反应阈值)时,要加速提高滤波系数。