Linux语言写的高通滤波,嵌入式开发10种常见数字滤波算法

本文介绍了在单片机开发中常见的10种数字滤波算法,包括限幅滤波法、中位值滤波法、算术平均滤波法等,详细阐述了每种算法的工作原理、优缺点及应用场景,帮助开发者选择合适的滤波方法处理传感器数据和AD采样等任务。
摘要由CSDN通过智能技术生成

在单片机开发中,经常需要对输入的数据进行过滤处理,如传感器数据输出,AD采样等,合适的滤波处理能达到更好效果。下面分享几种较简单而常用的滤波算法:

一、限幅滤波法(又称程序判断滤波法)

二、中位值滤波法

三、算术平均滤波法

四、递推平均滤波法

五、中位值平均滤波法

六、限幅平均滤波法

七、一阶滞后滤波法

八、加权递推平均滤波法

九、消抖滤波法

十、限幅消抖滤波法

一、限幅滤波法(又称程序判断滤波法)

A、方法:

根据经验判断,确定两次采样允许的最大偏差值(设为A)

每次检测到新值时判断:

如果本次值与上次值之差<=A,则本次值有效

如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值

B、优点:

能有效克服因偶然因素引起的脉冲干扰

C、缺点:

无法抑制那种周期性的干扰

平滑度差

int Filter_Value;

int Value;

void setup(){

Serial.begin(9600); // 初始化串口通信

randomSeed(analogRead(0)); // 产生随机种子

Value = 300;

}

void loop(){

Filter_Value = Filter(); // 获得滤波器输出值

Value = Filter_Value; // 最近一次有效采样的值,该变量为全局变量

Serial.println(Filter_Value); // 串口输出

delay(50);

}

// 用于随机产生一个300左右的当前值

int Get_AD(){

return random(295, 305);

}

// 限幅滤波法(又称程序判断滤波法)

#define FILTER_A 1

int Filter(){

int NewValue;

NewValue = Get_AD();

if(((NewValue - Value) > FILTER_A) || ((Value - NewValue) > FILTER_A))

return Value;

else

return NewValue;

}

二、中位值滤波法

A、方法:

连续采样N次(N取奇数)

把N次采样值按大小排列

取中间值为本次有效值

B、优点:

能有效克服因偶然因素引起的波动干扰

对温度、液位的变化缓慢的被测参数有良好的滤波效果

C、缺点:

对流量、速度等快速变化的参数不宜

/* N值可根据实际情况调整排序采用冒泡法*/

#define N 11

char filter(){

char value_buf[N];

char count,i,j,temp;

for ( count=0;count

{

value_buf[count] =get_ad();

delay();

}

for (j=0;j

{

for (i=0;i

{

if (value_buf>value_buf[i+

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值