C语言几种软件滤波方式
来源:互联网 发布:算法第四版 影印版PDF 编辑:程序博客网 时间:2024/05/05 03:02
1.算数平均值滤波
void interruptAD(void){ WREG_temp=WREG; //现场保护 STATUS_temp=STAUTS; ADIF=0; //清除中断标志 AD_total+=ADRESH; if(++count>=4) //AD转换次数超过4次? { count=0; //是,输出滤波结果 AD_result=AD_total/4;//存放在AD_result中 AD_total=0; } WREG=WREG_temp; STATUS=STAUTS_temp; //还原现场}AD转换的主程序:void main(void){ ADCON0=0x01; //初始化ADCON0寄存器 TRISA=0xFF; //A口设置成模拟输入 ADCON1=0xFF; //初始化ADCON1寄存器 ADIE=1; //开AD中断 ADIF=0; GIE=1; //开总部中断 PEIE=1; //开外部中断 count=0; //清零计数器,在主函数外部声明的全局变量 GO=1; //开AD while(1);}
2.滑动平均值滤波
void interruptAD(void){ WREG_temp=WREG; //现场保护 STATUS_temp=STAUTS; ADIF=0; //清除中断标志 if(AD_enable=1) //AD转换次数超过4次? { if(count>=8) count=0; AD_total+=ADgot[count++];//是,输出滤波结果 AD_result=AD_total/8; //存放在AD_result中 if(count>=8) count=0; AD_total-=ADgot[count]; //去掉最早AD结果 } else { if(count>=7) AD_enable=1;//最初的8次AD结果 ADgot[count]=ADRESH; //保存AD转换结果 AD_total+=ADgot[count++]; //累加AD转换结果 AD_result=AD_total/8;//计算8次采样AD转换平均结果 AD_total-=ADgot[0]; //去掉最早AD转换结果 } WREG=WREG_temp; STATUS=STAUTS_temp; //还原现场}
3.防脉冲干扰平均值滤波
void interruptAD(void){ WREG_temp=WREG; //现场保护 STATUS_temp=STAUTS; ADIF=0; //清除中断标志 AD_temp=ADRESH; //保存1次AD采样结果 ADgot[count++]=AD_temp;//保存采样结果到数组中 if(AD_temp>AD_max)//当前采样大于最大值? { AD_max=AD_temp; //是,在AD_max中保存当前值 } else if(AD_temp<AD_min) //否,比较当前采样小于最小值? { AD_min=AD_temp; //是,在AD_min中保存当前值 } if(count>=8) //采样次数是否达到8次? { count=0; //是,采样次数清零, unsigned char i; for(i=0;i<8;i++) AD_total+=ADgot[i]; //累加8次采样数据 AD_total=AD_total-AD_min-AD_max;//减掉最大值和最小值,得到6次AD结果 AD_result=AD_total/6; //计算6次采样平均值 AD_total=0; } WREG=WREG_temp; STATUS=STAUTS_temp; //还原现场}
4.中值滤波
void interruptAD(void){ WREG_temp=WREG; //现场保护 STATUS_temp=STAUTS; ADIF=0; //清除中断标志 ADgot[count++]=ADRESH; //保存AD转换结果到数组中 if(count>=5) //采样结果超过5次? { //是,则执行以下操作 unsigned char i,j,temp; for(i=0;i<4;i++) for(j=i;j<5;j++) if(ADgot[i]>ADgot[j]//将第i个数依次和第i+1到最后的数进行比较 { temp=ADgot[j]; //在第i个数的位置 ADgot[j]=ADgot[i];//保存从i到最后个数中最小的一个 ADgot[i]=temp; //temp用于中间交换的临时变量 } AD_result=ADgot[2]; //把最中间的采样结果作为最后AD转换结果//即5个数当中的第3个,从0到4的下标号为2 count=0; //计数器清零 } WREG=WREG_temp; STATUS=STAUTS_temp; //还原现场}
5.一阶滞后滤波
void interruptAD(void){ WREG_temp=WREG; //现场保护 STATUS_temp=STAUTS; ADIF=0; //清除中断标志 AD_result=ADRESH; //AD结果存放到AD_result中; WREG=WREG_temp; STATUS=STAUTS_temp; //还原现场}
- C语言几种软件滤波方式
- C语言软件滤波
- c语言软件滤波
- 几种软件滤波方法
- C语言的几种排序方式
- 几种软件滤波算法的比较
- C语言获取系统时间的几种方式
- C语言获取系统时间的几种方式
- C语言获取系统时间的几种方式
- C语言获取系统时间的几种方式
- C语言获取系统时间的几种方式 !
- C语言获取系统时间的几种方式 !
- C语言获取系统时间的几种方式
- C语言获取系统时间的几种方式 !
- C语言获取系统时间的几种方式
- C语言获取系统时间的几种方式
- C语言获取系统时间的几种方式 !
- C语言获取系统时间的几种方式
- Android中实现Activity全屏显示
- Translate:USACO/inflate
- hdu_2016_数据的交换输出
- 配置jdbc驱动
- 程序员修炼之道--读后感之一
- C语言几种软件滤波方式
- 分享31套精美的Web和手机开发UI素材包
- android中使用ActivityGroup来切换activity和layout
- 让MyEclipse里的Tomcat自动reloadable
- 正则中的“贪婪匹配”和“懒惰匹配”
- for循环考查
- Oracle常用函数
- AndroidManifest.xml 详解
- Java Servlet介绍