11种软件滤波方法的示例程序

假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad();

1、限副滤波

/*  A值可根据实际情况调整

value为有效值,new_value为当前采样值

滤波程序返回有效的实际值  */

#define A 10

char value;

char filter()

{

char  new_value;

new_value = get_ad();

if ( ( new_value - value > A ) || ( value - new_value > A )

return value;

return new_value;

}

2、中位值滤波法

/*  N值可根据实际情况调整

排序采用冒泡法*/

#define N  11

char filter()

{

char value_buf[N];

char count,i,j,temp;

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

{

value_buf[count] = get_ad();

delay();

}

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

{

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

{

if ( value_buf>value_buf[i+1] )

{

temp = value_buf;

value_buf = value_buf[i+1];

value_buf[i+1] = temp;

}

}

}

return value_buf[(N-1)/2];

}

3、算术平均滤波法

/*

*/

#define N 12

char filter()

{

int  sum = 0;

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

{

sum + = get_ad();

delay();

}

return (char)(sum/N);

}

4、递推平均滤波法(又称滑动平均滤波法)

/*

*/

#define N 12

char value_buf[N];

char i=0;

char filter()

{

char count;

int  sum=0;

value_buf[i++] = get_ad();

if ( i == N )   i = 0;

for ( count=0;count<N,count++)

sum = value_buf[count];

return (char)(sum/N);

}

5、中位值平均滤波法(又称防脉冲干扰平均滤波法)

/*

*/

#define N 12

char filter()

{

char count,i,j;

char value_buf[N];

int  sum=0;

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

{

value_buf[count] = get_ad();

delay();

}

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

{

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

{

if ( value_buf>value_buf[i+1] )

{

temp = value_buf;

value_buf = value_buf[i+1];

value_buf[i+1] = temp;

}

}

}

for(count=1;count<N-1;count++)

sum += value[count];

return (char)(sum/(N-2));

}

6、限幅平均滤波法

/*

*/

略 参考子程序1、3

7、一阶滞后滤波法

/* 为加快程序处理速度假定基数为100,a=0~100 */

#define a 50

char value;

char filter()

{

char  new_value;

new_value = get_ad();

return (100-a)*value + a*new_value;

}

8、加权递推平均滤波法

/* coe数组为加权系数表,存在程序存储区。*/

#define N 12

char code coe[N] = {1,2,3,4,5,6,7,8,9,10,11,12};

char code sum_coe = 1+2+3+4+5+6+7+8+9+10+11+12;

char filter()

{

char count;

char value_buf[N];

int  sum=0;

for (count=0,count<N;count++)

{

value_buf[count] = get_ad();

delay();

}

for (count=0,count<N;count++)

sum += value_buf[count]*coe[count];

return (char)(sum/sum_coe);

}

9、消抖滤波法

#define N 12

char filter()

{

char count=0;

char new_value;

new_value = get_ad();

while (value !=new_value);

{

count++;

if (count>=N)   return new_value;

delay();

new_value = get_ad();

}

return value;

}

10、限幅消抖滤波法

/*

*/

略 参考子程序1、9

11、IIR滤波例子

int  BandpassFilter4(int InputAD4)

{

int  ReturnValue;

int  ii;

RESLO=0;

RESHI=0;

MACS=*PdelIn;

OP2=1068; //FilterCoeff4[4];

MACS=*(PdelIn+1);

OP2=8;    //FilterCoeff4[3];

MACS=*(PdelIn+2);

OP2=-2001;//FilterCoeff4[2];

MACS=*(PdelIn+3);

OP2=8;    //FilterCoeff4[1];

MACS=InputAD4;

OP2=1068; //FilterCoeff4[0];

MACS=*PdelOu;

OP2=-7190;//FilterCoeff4[8];

MACS=*(PdelOu+1);

OP2=-1973; //FilterCoeff4[7];

MACS=*(PdelOu+2);

OP2=-19578;//FilterCoeff4[6];

MACS=*(PdelOu+3);

OP2=-3047; //FilterCoeff4[5];

*p=RESLO;

*(p+1)=RESHI;

mytestmul<<=2;

ReturnValue=*(p+1);

for  (ii=0;ii<3;ii++)

{

DelayInput[ii]=DelayInput[ii+1];

DelayOutput[ii]=DelayOutput[ii+1];

}

DelayInput[3]=InputAD4;

DelayOutput[3]=ReturnValue;

//  if (ReturnValue<0)

//  {

//  ReturnValue=-ReturnValue;

//  }

return ReturnValue;

}

基本C语言滤波算法的更多相关文章

  1. 关于中值滤波算法,以及C语言实现(转)

    源:关于中值滤波算法,以及C语言实现 1.什么是中值滤波? 中值滤波是对一个滑动窗口内的诸像素灰度值排序,用其中值代替窗口中心象素的原来灰度值,它是一种非线性的图像平滑法,它对脉冲干扰级椒盐噪声的抑制 ...

  2. SSE图像算法优化系列二十二:优化龚元浩博士的曲率滤波算法,达到约1000 MPixels/Sec的单次迭代速度

      2015年龚博士的曲率滤波算法刚出来的时候,在图像处理界也曾引起不小的轰动,特别是其所说的算法的简洁性,以及算法的效果.执行效率等方面较其他算法均有一定的优势,我在该算法刚出来时也曾经有关注,不过 ...

  3. 基于Vivado HLS在zedboard中的Sobel滤波算法实现

     基于Vivado HLS在zedboard中的Sobel滤波算法实现 平台:zedboard  + Webcam 工具:g++4.6  + VIVADO HLS  + XILINX EDK + ...

  4. OPENCV基本滤波算法

    图像滤波的主要目的是为了在保留图像细节的情况下尽量的对图像的噪声进行消除,从而是后来的图像处理变得更加的方便. 图像的滤波效果要满足两个条件:1.不能损坏图像的轮廓和边缘这些重要的特征信息.2.图像的 ...

  5. 基于FPGA的均值滤波算法实现

    我们为了实现动态图像的滤波算法,用串口发送图像数据到FPGA开发板,经FPGA进行图像处理算法后,动态显示到VGA显示屏上,前面我们把硬件平台已经搭建完成了,后面我们将利用这个硬件基础平台上来实现基于 ...

  6. 基于FPGA的中值滤波算法实现

    在这一篇开篇之前,我需要解决一个问题,上一篇我们实现了基于FPGA的均值滤波算法的实现,最后的显示效果图上发现有一些黑白色的斑点,我以为是椒盐噪声,然后在做基于FPGA的中值滤波算法的实验时,我发现黑 ...

  7. linux内核中的C语言常规算法(前提:你的编译器要支持typeof和type)

    学过C语言的伙伴都知道,曾经比较两个数,输出最大或最小的一个,或者是比较三个数,输出最大或者最小的那个,又或是两个数交换,又或是绝对值等等,其实这些算法在linux内核中通通都有实现,以下的代码是我从 ...

  8. C语言经典算法 - 多维矩阵转一维矩阵的代码

    下边内容内容是关于C语言经典算法 - 多维矩阵转一维矩阵的内容,应该能对码农也有好处. #include <stdio.h>#include <stdlib.h>int mai ...

  9. 一张有料的图片!!!附文件-图片合成器C语言实现算法

    凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1.打开F盘,先找两个文件,一个是压缩文件(2.rar),另一个是一张图片(1.jpg),将其放到F盘目录下, ...

随机推荐

  1. Struts2漏洞利用实例

    Struts2漏洞利用实例 如果存在struts2漏洞的站,administrator权限,但是无法加管理组,内网,shell访问500. 1.struts2 漏洞原理:struts2是一个框架,他在 ...

  2. jsp 中登录验证 注销 的模版

    用户名密码验证模版     <%@page import="com.jerehedu.bao.User"%> <%@ page language="ja ...

  3. SubSonic指南中文版

    翻译:王鹏程张原 王伟策划:毛凌志2009年1月北京工业大学软件学院PS:有问题反馈至http://lexus.cnblogs.comGetting Started with SubSonicBy S ...

  4. 探索摸寻之XCode 快捷键

    注释/反注释 Command+/ 模拟器没有Home键 在模拟器的应用界面 Command+Shift+h 返回上一级 (1920,24寸显示器,因此不是分辨率问题)

  5. T-SQL Recipes之生成动态列表数据

    Problem 首先什么是动态列表?举个示例,假设你想输出以逗号分隔的IDs,如: 1,45,67,199,298 Solution 生成动态列表数据在我们生活场景中很常见,比如在 Dynamic P ...

  6. [深入浅出WP8.1(Runtime)]Windows Phone 8.1和Silverlight 8.1的区别

    1.2.2 Windows Phone 8.1应用程序模型 Windows Phone 8.1支持多种开发语言来开发应用程序,包括C#.VB.JavaScript和C++,那么本书的代码主要是采用C# ...

  7. 13.final关键字

    1.final修饰的变量只能赋一次值,不赋值时,会提示初始化 2.final修饰的方法不能被重写 3.final修饰的类不能被继承

  8. 微信支付(20140923更新)商户支付密钥key的生成与设置

    微信支付(0923更新)商户支付密钥key的生成与设置 说明:新版微信支付,用户必须授权登录才能支付.需要商家自己设置商户号支付密钥. 设置商户号支付密钥方法如下: 1. 申请通过审核后,打开微信发来 ...

  9. C++STL -- vector实现

    STL的vector简化实现 本质 vector说到底就是一个动态数组,我们需要做的就是管理动态数组的内存,和元素的增加,删除,移动等. template <typename T> cla ...

  10. sweetalert api中文开发文档和手册

    官网和下载地址: http://t4t5.github.io/sweetalert/  2016年10月30日14:10:21 废话,目前php开发越来越API话,所以php方法很多都是json返回数 ...