一、限幅滤波法

1、

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

每次检测到新采样值时进行判断:

(1)如果本次新采样值与上一次滤波效果之差<=A,则本次采样值有效,令本次滤波结果=新采样值;

(2)如果本次采样值与上次滤波结果之差>A,则本次采样值无效,放弃本次采样值,本次滤波结果=上次滤波结果。

2、例程

#define A 10

uchar Value;    //上次采样有效值

uchar AmplitudeLimiterFilter()

{

uchar NewValue,ReturnValue;

NewValue=GetAD();          //本次采样值

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

ReturnValue=Value;

else ReturnValue=NewValue;

return(ReturnValue);

}

二、中位值滤波法

1、连续采样N次值,把采样值按大小排列,取中间值为本次有效值。

2、例程

#define N 9

unchar MiddleValueFilter()

{

unchar i,j,k;

uchar temp;

uchar ArrDataBuffer[N];

for(i=0;i<N;i++)  //一次采集N个数据放入数组中

{

ArrDataBuffer[i]=GetAD();

Delay();

}

for(j=0;j<N-1;j++)//采样值由小到大排列

{

for(k=0;k<N-j-1;k++)

{

if(ArrDataBuffer[k]>ArrDataBuffer[k+1])

{

temp=ArrDataBuffer[k];

ArrDataBuffer[k]=ArrDataBuffer[k+1];

ArrDataBuffer[k+1]=temp;

}

}

}

return(ArrDataBuffer[(N-1)/2]);//取中间值

}

三、算术平均滤波法

1、连续取N个值进行算术平均运算。

N较大时,信号平滑度较高,但灵敏度较低;N较小,信号平滑度低,但灵敏度较高。

2、例程

#define N 12

uchar ArithmeticalAverageValueFilter()

{

uchar i;

uchar Value;

uchar sum;

sum=0;

for(i=0;i<N;i++)

{

sum+=GetAD();

Delay();

}

Value=sum/N;

return(Value);

}

四、递推平均滤波法

1、把连续N个采集值看成一个队列,每次采集到的新数据放入队尾,并扔掉原来队首的数据。把队列中的N个数据进行平均计算,即可获得新的滤波结果。

2、例程

#define N 12

uchar Data[];

uchar Gilde(Data[])

{

ucahr i,Value,sum;

sum=0;

Data[N]=GetAD();

for(i=0;i<N;i++)

{

Data[i]=Data[i+1];//所有数据左移,低位仍掉

sum+=Data[i];

}

Value=sum/N;

return(Value);

}

五、中位值平均滤波法

1、中位值平均滤波法又称脉冲干扰平均滤波法,相当于“中位值滤波法”+“算术平均滤波法”。

连续采集N个数据,去掉一个最大和最小值,然后计算N-2个数的平均值。

2、例程

#define N 12

uchar Middle()

{

ucahr i,j,k,l;

uchar temp;

uchar ArrDataBuffer[N];

uchar sum,Value;

for(i=0;i<N;i++)//一次采集N个数据,存入数组

{

ArrDataBuffer[i]=GetAD();

Delay();

}

for(j=0;j<N-1;j++)//采样值由小到大排列

{

for(k=0;k<N-j-1;k++)

{

if(ArrDataBuffer[k]>ArrDataBuffer[k+1])

{

temp=ArrDataBuffer[k];

ArrDataBuffer[k]=ArrDataBuffer[k+1];

ArrDataBuffer[k+1]=temp;

}

}

}

for(l=0;l<N-1;l++)

{

sum=ArrDataBuffer[l];

}

Value=Sum/(N-2);

return(Value);

}

六、递推中位值平均滤波法

1、相当于“中位值滤波法”+“递推平均滤波法”。这种方法把连续N个值看成一个队列,每次采集到一个新数据放入队尾,并扔掉原来队首的值。 把队列中的N个数据先去掉一个最大值和最小值,然后计算N-2个数据的平均值。

2、例程

char Filter()

{

char max.min;

int sum;

char i;

QUEUE[0]=NewData;

max=QUEUE[0];

min=QUEUE[0];

sum=QUEUE[0];

for(i=n-1;i!=0;i--)

{

if(QUEUE[i]>max) max=QUEUE[i];

else if(QUEUE[i]<min) min=QUEUE[i];

sum+=QUEUE[i];

QUEUE[i]=QUEUE[i-1];

}

i=n-2;

sum=sum-max-min+i/2;//加入(n-2)/2目的为了四舍五入

sum=sum/i;

return(sum);

}

七、限幅平均滤波法

1、相当于“限幅滤波法”+“递推平均滤波法”。每次采样先进行限幅处理,再进行队列平均滤波处理。

2、例程

#define A 10

#define N 12

uchar Data[N];

uchar Limit()

{

ucahr i,Value,sum;

Data[N]=GetAD();

if(((Data[N]-Data[N-1])>A)||((Data[N-1]-Data[N])>A)))

Data[N]=Data[N-1];

else Data[N]=NewValue;

for(i=0;i<N;i++)

{

Data[i]=Data[i+1];

sum+=Data[i];

}

Value=sum/N;

return(Value);

}

八、一阶滞后滤波法

1、本次结果滤波结果=a*本次采样值+(1-a)*上次结果。

a代表滤波系数,a=0--1。

2、例程

#define a 128

uchar Value;

ucahr OneFactorialFiler()

{

uchar NewValue;

uchar ReturnValue;

NewValue=GetAD();

ReturnValue=(255-a)*NewValue+a*Value;

ReturnValue/=255;

return(ReturnValue);

}

九、加权递推平均滤波法

1、加权递推平均滤波法是对递推平均滤波法的改进,即不同时刻的数据加以不同的权。通常是越接近现时刻的数据,权取得越大。给予新采样值的权系数越大,则灵敏度越高,但信号的平滑度越低。

2、例程

#define N 10

#define CoeSum 55

const Coefficient[N]={1,2,3,4,5,6,7,8,9,10};

uchar Data[N];

uchar AAGAFilter()

{

uchar i,Value,sum;

sum=0;

Data[N]=GetAD();

for(i=0;i<N;i++)

{

Data[i]=Data[i+1];

sum+=Data[i]*Coefficient[i];

}

Value=sum/CoeSum;

return(Value);

}

十、消抖滤波法

1、将每次采样值与当前有效值比较,如果采样值=当前有效值,则计数器清零,否则计数器加1。然后,判断计数器是否>=上限N(溢出)。如果溢出,将本次值替换当前有效值,并清计数器。

2、例程

#define N 20

uchar count;

uchar Value;

uchar Avoid()

{

uchar NewValue;

if(NewValue==Value) count=0;

else

{

count++;

if(count>N)

{

count=0;

Value=NewValue;

}

}

return(Value);

}

匠人手记 十种常用的滤波算法相关推荐

  1. 常用软件滤波算法---摘自:FeoTech

    感谢原作者: FeoTech  原文:http://feotech.com/?p=120 1.限幅滤波法(又称程序判断滤波法) A.名称:限幅滤波法(又称程序判断滤波法) B.方法: 根据经验判断,确 ...

  2. matlab滤波有几种形式,几种经典常用的滤波算法

    1.限幅滤波法(又称程序判断滤波法) A.方法: 根据经验判断,确定两次采样允许的最大偏差值(设为A) 每次检测到新值时判断: 如果本次值与上次值之差<=A,则本次值有效 如果本次值与上次值之差 ...

  3. 技术分享 | 嵌入式常用滤波算法的matlab实现

    随着基于模型设计的广泛应用,模型在环仿真也逐渐多了起来,我们今天介绍几种嵌入式常用滤波算法的matlab实现. 一.采用数字滤波算法克服随机干扰的误差具有以下优点: 数字滤波无需其他的硬件成本,只用一 ...

  4. 自动驾驶 - 滤波算法

    自动驾驶 - 滤波算法 目前比较常用的滤波算法有: 平均值滤波算法 中位值滤波算法 一阶滤波算法 卡尔曼滤波算法 1. 平均值滤波算法 1.1. 算法介绍 平均值滤波算法是比较常用,也比较简单的滤波算 ...

  5. 学习单片机AD采样必知的十大滤波算法

    前言 我们都知道,单片机的主要作用是控制外围的器件,并实现一定的通信和数据处理.但在某些特定场合,不可避免地要用到数学运算,尽管单片机并不擅长实现算法和进行复杂的运算. 所以,今天将给大家介绍十种常见 ...

  6. 简单常用滤波算法C语言实现

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xiao2yizhizai/article/details/51026151 1.限幅滤波算法(程序判 ...

  7. 简单常用滤波算法c语言实现,简单常用滤波算法C语言实现

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xiao2yizhizai/article/details/51026151 1.限幅滤波算法(程序判 ...

  8. 匠人手记:单片机工作者的实践与思考

    匠人手记:一个单片机工作者的实践与思考匠人手记[完整高清版] 内容简介 本书是作者在从事单片机开发与应用的过程中,将实际经验教训和心得感悟加以总结.整理而成的工作手记.每篇手记论述一个专题,独立成篇, ...

  9. 单片机滤波算法之一阶滤波

    本文用于记录阅读完<匠人手记:一个单片机工作者的实践与思考>一阶滤波算法的记录和心得. 一阶滤波算法公式:Yn(本次滤波值)=aXn(新采样值)+(1-a)(上一次滤波值). a表示滤波系 ...

最新文章

  1. 图文具体解释 IntelliJ IDEA 15 创建 Maven 构建的 Java Web 项目(使用 Jetty 容器)
  2. 13_线性回归分析、线性模型、损失函数、最小二乘法之梯度下降、回归性能评估、sklearn回归评估API、线性回归正规方程,梯度下降API、梯度下降 和 正规方程对比
  3. 在虚拟机上装win2003 server心得体会
  4. C#中IEnumerable.OfType()方法的简单使用
  5. outlook qr码在哪里_优势对比:阜阳洋葱店邀请码
  6. 调用接口时form-data形式如何传递数据
  7. 捕鱼分鱼、出售鱼、平分七筐鱼
  8. python金融股票市场数据分析神器TA-Lib学习使用
  9. ps排版html,排版教程,超详细适合初学者的排版教程
  10. 计算机数学基础:斜率与截距、导数、权重的关系
  11. Cousera - Machine Learning - 课程笔记 - Week 2
  12. unity的立方贴图
  13. 大三开学,百度面试感受
  14. (翻译)缩略图(Thumbnail)
  15. 图片放大模糊怎么办,Python无损清晰放大,360P变4K
  16. STM32F107的SPI3不能使用的问题
  17. Ubuntu 16.04 鼠标可以移动不能点击问题
  18. 时隔14年《头文字D》演员重聚,周杰伦余文乐刘畊宏昆凌同框,唯独少了陈冠希
  19. React基础(2)—— React函数式组件使用ref
  20. 静态手势识别控制游戏方向

热门文章

  1. python mean dropna_dropna()标签问题
  2. 【小沐学C++】C++17实现文件读写
  3. Websocket--微信小程序聊天交友【附前后端实现过程及源码】
  4. 模糊c均值聚类算法的c++实现
  5. linux ipcs清空,Linux ipcs命令与ipcrm命令的用法详解
  6. python 内置函数dic()
  7. python---简单的图形编程
  8. 中国光伏产业发展现状:光伏发展势头强劲,2021年我国光伏累计装机达3.06亿千瓦(附光伏装机容量、发电量、主要产品产量)[图]
  9. shell 中 exit0 exit1 的区别
  10. Fiddler 的使用