数字 一阶低通滤波器 详细分析 冰三点水

数字 一阶低通滤波器 详细分析

作者:冰三点水

原创内容,转帖请注明出处: http://blog.youkuaiyun.com/u013608300/article/details/78814693

微信公众号:工程师看海

事件的起因是下图1,朋友偶然说到一阶低通滤波器,借此来详细介绍一阶低通滤波器的原理,并附上matlab仿真程序代码。图1中的一阶低通数字滤波器的公式为Eq(1):

y(n) = q*x(n) + (1-q)*y(n-1)    Eq(1)

其中,y(n)表示当前的输出,x(n)表示当前的输入,y(n-1)表示上一次的输出(图1中的符号不标准,因为一般时域用小写,频域或Z域用大写)。Eq(1)为差分方程,在分析离散系统时常用差分方程,而求解差分方程通常在z域实现,z变换使问题分析变得简单。这是一个IIR滤波器,那什么是FIR滤波器?什么是IIR滤波器呢?FIR滤波器是有限输入有限输出,换句话说当输入为0时输出也为0,系统无反馈;而IIR滤波器在输入为0时也可以有输出,由于增加了反馈回路,系统有不稳定发散的可能,因此IIR的分析要比FIR复杂一点。

                                            图1

我们将公式Eq(1)进行z变换得到z域传递函数。见Eq(2),注意其中z域的大写,我们要符合规范。根据Eq(2),系统具有一个极点z=1-q和一个零点z=0,我们这里关心的是极点。当极点处于z域单位圆内时,系统是稳定的,否则系统为不稳定系统会发散。单位圆是个重要的概念,z域的单位圆等同于s域的虚轴向左卷绕成z域的单位圆(s域中极点处于虚轴左边系统稳定)。分析z域的幅频响应(IIR的相位非线性这里不表)是在单位圆上进行的,z=r*exp(jw),单位圆上模值为1,所以z=exp(jw)(e的j*w次幂),根据欧拉公式

exp(jw) = cos(w)+j*sin(w),我们得到Eq(3)。我们可以借助matlab来方便的求出H(w)的幅频响应,后面会给出代码,我们先来看结果见图2.

当q和采样时间的参数和图1保持一致时(q=0.0565 fs=3.333k即300us),幅频响应见图2,在横坐标为30hz时的幅值为0.708约等于0.707(-3dB点),我们简单分析一下图2,一阶低通滤波器的通带。。。。额。。图中看着比较窄,而且不平坦和理想一阶低通滤波器相比差距明显,但是对于高频干扰抑制效果明显,而且简单易实现,很多单片机应用中就会使用此滤波器。图3为matlab代码,具体c语言代码实现数字一阶低通滤波器网上很多,这里不贴,matlab代码链接为:http://download.youkuaiyun.com/download/u013608300/10160717

                                                                    图2

                                                              图3

下面是对加躁的正弦信号进行仿真的部分。

图4是仿真使用的代码

                                                  图4 时域仿真代码

图5是仿真的时域结果,其中黑色线是理想信号,红色线是带躁信号,蓝色线是去噪后的信号,由于使用一阶低通滤波器后的信号波形和理想波形比较接近,所以图5中识别的不是很清晰。图6是结果局部示意图,这样可以清晰地看到理想信号、滤波前的带躁信号和滤波后的“干净”信号的时域波形情况。

                                                                 图5 理想信号、带躁信号、去噪信号

                                                                      图6 理想信号、带躁信号、去噪信号

不足之处请指正,在下当虚心接受。

你虽然跑得比别人慢,但你可以跑得比别人远。——冰三点水

相关阅读

华为海思软硬件开发资料

电容6大特性参数,你知道几个?

三端子电容好在哪?

LDO基本原理(一)

于天津

### 滤波算法的基本原理 低通滤波器种简单但有效的数字滤波技术,广泛应用于嵌入式系统中对信号进行去噪处理。其核心思想是过加权平均的方式,将当前采样值与上次滤波输出值进行线性组合,从而抑制高频噪声[^1]。 滤波的递推公式如下: ```c filtered_value = alpha * raw_value + (1 - alpha) * previous_filtered_value; ``` 其中: - `raw_value` 是当前时刻的原始采样值; - `previous_filtered_value` 是上时刻的滤波结果; - `alpha` 是个介于 0 和 1 的系数,决定了滤波器的时间常数和响应速度。 `alpha` 值越大,滤波器对输入变化的响应越快(灵敏度高),但噪声抑制能力较差;`alpha` 值越小,则滤波结果更平稳(平稳度高),但响应变慢[^1]。 ### 算法实现步骤 在嵌入式系统中实现该算法时,常采用定点运算以提高效率并减少浮点运算的资源消耗。以下是个典型的 C 语言实现示例: ```c #define ALPHA 64 // 固定点数形式下的 alpha, 范围为 0~256 int16_t low_pass_filter(int16_t raw_value, int16_t previous_filtered) { int32_t temp = (int32_t)raw_value * ALPHA + (int32_t)previous_filtered * (256 - ALPHA); return (int16_t)((temp + 128) >> 8); // 加 128 实现四舍五入后再右移 8 位 } ``` 上述代码使用了 256 作为固定比例因子,使得 `alpha` 可以用整数表示,避免浮点运算。例如,若希望 `alpha = 0.25`,则对应的整数值为 `64`。这种方法可以显著提升嵌入式系统的运行效率[^2]。 ### 参数选择建议 - **采样频率**:应远高于被测信号的最大频率成分,以满足奈奎斯特定理。 - **滤波系数 α**:需根据具体应用场景调整。例如,在电机控制电流环中,为了保证闭环稳定性,常选用较小的 `alpha` 值以获得更好的平稳性[^2]。 ### 应用场景 低通滤波器适用于对实时性要求较高、硬件资源有限的嵌入式系统,如: - 电机控制中的电流检测; - 温度传感器数据平滑; - 按键防抖动处理等。 它虽然不能完全替代更高的滤波算法(如卡尔曼滤波),但在许多实际应用中已经足够有效,并且易于实现和优化。 ---
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值