当前位置:首页 > 单片机 > 单片机
[导读]/////////////////////////////////限副滤波/////////////////// /*滤波程序返回有效的实际值*/#define A 10 //A值可根据实际情况调整 char value; //value为有效值 char filter() { char new_value; //new val

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

#define A 10 //A值可根据实际情况调整
char value; //value为有效值
char filter()
{
char new_value; //new value为当前采样值
new value=get_ad();
if ((new_value-value>A)‖(value-new_value> A)
return value;
return new_value;
}

/////////////////////////中位值滤波/////////////////////////

#define N 11 //N值可根据实际情况调整
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[i]>value_buf[i+1])
{
temp=value_buf[i];
value_buf[i]=value_buf[i+1];
value_buf[i+1]=temp;
}
}
}
return value_buf[(N-1)/2]; //取中间值
}

/////////////////////////算术平均滤波//////////////////////

#define N 12
char filter()
{
int sum=0;
for(count=0;count{
sum+=get_ad();
delay();
}
return (char)(sum/N);
}


///////////////////去极值平均滤波 //////////////////////

#define N 11 //N值可根据实际情况调整
int sum=0;

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[i]>value_buf[i+1])
{
temp=value_buf[i];
value_buf[i]=value_buf[i+1];
value_buf[i+1]=temp;
}
}
}

for(count=1;count<(N-1);count++) //去掉第一个和末一个数
{
sum+=value_buf[count];
delay();
}
return (char)(sum/(N-2));
}

///////////////////移动平均滤波(递推平均滤波)///////////

#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;countsum+=value_buf[count];
return (char)(sum/N)

}

//////////////////////加权平均滤波///////////////////////
#define N 12
char code jq[N]={1,2,3,4,5,6,7,8,9,10,11,12};//加权系数表
char code sum_jq=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{value_buf[count]=get_ad(); //获取采样值
delay();
}
for (count=0;countsum+=value_buf[count]*jq[count];
return (char)(sum/sum_jq);
}

/////////////////////////低通滤波////////////////////////

#define a 0.25
char value; //value为已有值
char filter()
{
char new_value; //new value为当前采样值
new_value=get_ad();
return (a*new_value+(1-a)*value);
}

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

DSP即数字信号处理,它是英文Digital Signal Processing的简写,DSP是一门面向电子信息学科的专业基础课,具体来讲,DSP是以数字形式对信号进行分析、变换、滤波、检测、调制、解调以及快速算法的一门...

关键字: 算法 调制解调 数字滤波

过采样和数字滤波有助于降低对ADC前置的抗混叠滤波器的要求。重构DAC可以通过类似的方式运用过采样和插值原理。

关键字: DAC 数字滤波 通信领域

摘 要:利用现有的经典数字滤波器,可通过在Matlab中的几种方法实现滤波。文章研究了滤波相关函数的用法,指出每个函数处理信号的特点,并给出了几种方法进行仿真比较,其时域和频域的结果显示,使用filtfilt函数可对信号...

关键字: 数字滤波 Matlab filter filtfilt

汇编是从org 0000h开始启动,那么keil c51是如何启动main()函数的?keil c51有一个启动程序startup.a51,它总是和c程序一起编译和链接。下面看看它和main()函数是如何编译的;//主函...

关键字: C51 c程序 keil 启动过程

1、选择合适的算法和数据结构应该熟悉算法语言,知道各种算法的优缺点,具体资料请参见相应的参考资料,有很多计算机书籍上都有介绍。将比较慢的顺序查找法用较快的二分查找或乱序查找法代替,插入排序或冒泡排序法用

关键字: c程序 优化 单片机中

PIC18F87K90程序,注意串口2要关闭端口模拟功能后才能使用(ANCON2我在这里吃过亏),以下是调试好的程序。//单片机引脚定义******************************************...

关键字: c程序 pic 双串口

在一些通信规约中,经常会用到数据校验,其中CRC(Cyclical Redundancy Check)最为常见。它是利用除法及余数的原理来作错误侦测的,实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装...

关键字: crc校验 c程序 labview编写

/*=============================================================================访问PIC16F877A片内EEPROM,运行程序:Begin...

关键字: c程序 pic16f877a 片内eeprom

单片机主要作用是控制外围的器件,并实现一定的通信和数据处理。但在某些特定场合,不可避免地要用到数学运算,尽管单片机并不擅长实现算法和进行复杂的运算。下面主要是介绍如何用单片机实现数字滤波。 在单片机进

关键字: 单片机 数字滤波

** STEPPER.C* sweeping stepper&#39;s rotor cw and cww 400 steps* Copyright (c) 1999 by W.Sirichote*/#inclu...

关键字: c程序 步进电机
关闭
关闭