数字滤波C程序

发布者:SereneVoyage最新更新时间:2016-10-28 来源: eefocus关键字:数字滤波  C程序 手机看文章 扫描二维码
随时随地手机看文章
/////////////////////////////////限副滤波///////////////////
/*滤波程序返回有效的实际值*/

#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;count sum+=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;count sum+=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);
}

关键字:数字滤波  C程序 引用地址:数字滤波C程序

上一篇:LCD12864 驱动 ,采用串行方式
下一篇:触摸屏ADS7846/7843驱动程序

推荐阅读最新更新时间:2024-03-16 15:18

12864LCD带中文字库(PIC程序)
#include p16f877a.inc ; __CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC ;芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡 #define RS PORTA,5 ;命令/数据选择 #DEFINE RW PORTA,4 ;读/写选择 #DEFINE E PORTA,3 ;使能信号 #DEFINE PSB PORTA,2 ;并口/串口选择(H/L) #DEFINE
[单片机]
单片机简单数字滤波算法
1)限幅滤波算法 该运算的过程中将两次相邻的采样相减,求出其增量,然后将增量的绝对值,与两次采样允许的最大差值A进行比较。A的大小由被测对象的具体情况而定,如果小于或等于允许的最大差值,则本次采样有效;否则取上次采样值作为本次数据的样本。 算法的程序代码如下: #defineA //允许的最大差值 chardata; //上一次的数据 char filter() { chardatanew; //新数据变量 datanew=get_data(); //获得新数据变量 if((datanew-data) A||(data-datanew A)) return data; else returndatanew; } 说明:限幅滤波
[单片机]
单片机数字滤波程序
假定从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、中位值滤波法
[单片机]
超声波HM55B测距(STC10F08单片机C程序
名称:超声波测距 作者:Acebit 信息:STC10F08单片机,晶振11.0592MHZ;超声波模块HM55B,测距范围1米; LCD1602,串行发送数据,显示单位mm; #include def.h //定义管脚 #include reg51.h #include intrins.h #ifndef OSC110592 #define OSC110592 #endif unsigned int qian,bai,shi,ge; unsigned int k; long result; void init(); void PUL
[单片机]
51单片机超声波测距C程序
超声波检测原理 超声波测距的程序流程图 程序如下: //超声波模块程序 //超声波模块程序 //Trig = P2^0 //Echo = P3^2 #include reg52.h #define uchar unsigned char #define uint unsigned int // void delay(uint z) { uint x,y; for(x=z;x 0;x--) for(y=110;y 0;y--); } // void delay_20us() { uchar a ; for(a=0;a 100;a++); } //
[单片机]
AVR单片机外部中断C程序框架
Avr mega16a 单片机在studio4 开发环境中外部中断C程序框架如下: #include avr/io.h //头文件. #include avr/interrupt.h //中断头文件; typedef unsigned char uint8; //习惯宏定义数据类型语法.应用时只需写入数据类型: // uint8 s=0; typedef unsigned int uint16; //习惯宏定义数据类型语法.应用时只需写入数据类型: // uint16 i=0; Int main() //主函数; { MCUCR=0Xnn: //中断模式触发寄存器,用来设置外部
[单片机]
数字滤波器的MATLAB设计与DSP上的实现
摘要:以窗函数法设计线性相位FIR数字滤波器为例,介绍用MATLAB工具软件设计数字滤波器的方法和在定点DSP上的实现。实现时,先在CCS5000仿真开发,然后将程序加载到TMS320VC5409评估板上实时运行,结果实现了目标要求。文中还讨论了定标、误差、循环寻址等在DSP上实现的关键问题。 关键词:数字滤波器 MATLAB DSP 引言 随着信息时代和数字世界的到来,数字信号处理已成为今一门极其重要的学科和技术领域。数字信号处理在通信、语音、图像、自动控制、雷达、军事、航空航天、医疗和家用电器等众多领域得到了广泛的应用。在数字信号处理应用中,数字滤波器十分重要并已获得广泛应用。 1 数字滤波器的设计 1.1 数字滤
[嵌入式]
基于FPGA的数字滤波器的设计与实现
在信息信号处理过程中,如对信号的过滤、检测、预测等,都要使用到滤波器,数字滤波器是数字信号处理中使用最广泛的一种方法,常用的数字滤波器有无限长单位脉冲响应(IIR)滤波器和有限长单位脉冲响应(FIR)滤波器两种 。对于应用设计者,由于开发速度和效率的要求很高,短期内不可能全面了解数字滤波器相关的优化技术,需要花费很大的精力才能使设计出的滤波器在速度、资源利用、性能上趋于较优。而采用调试好的IP核需要向Altera公司购买。本文采用了一种基于DSP Builder的FPGA设计方法,以一个低通的16阶FIR滤波器的实现为例,通过生成的滤波器顶层模块文件与A/D模块文件设计,在联星科技的NC-EDA-2000C实验箱上验证了利用该方法
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved