历史上的今天
今天是:2025年03月06日(星期四)
2018年03月06日 | 九种简单的数字滤波算法(C语言源程序)
2018-03-06 来源:eefocus
假定从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
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];
}
3、算术平均滤波法
/*
*/
#define N 12
char filter()
{
int sum = 0;
for ( count=0;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
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
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
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
value_buf[count] = get_ad();
delay();
}
for (count=0,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;
}
上一篇:滤波软件的程序实例
史海拾趣
|
本帖最后由 jameswangsynnex 于 2015-3-3 19:54 编辑 由于各型号手机所附带的充电器插口不同,以造成各手机充电器之间不能通用。当用户手机充电器损坏或丢失后,无法修复或购不到同型号充电器,使手机无法使用。万能充电器厂家看到这样的商机,就 ...… 查看全部问答> |
|
pc上通过gsoap连接webservices 可以传2M多的大图片也可以传十几k的小图片 但是在仿真器和真机上只能传小图片 一样的代码 为什么会有问题呢? soap sp; soap_init(&sp); _ns1__GetMapBy ...… 查看全部问答> |
|
我的发送程序 #include \"vxWorks.h\" #include \"fioLib.h\" #include \"stdio.h\" #include \"unistd.h\" #include \"string.h\" #include \"usrLib.h\" #include \"errnoLib.h\" #include \"hostLib.h\" #include \"sockLib.h\" #incl ...… 查看全部问答> |
|
我在 弄一块DIO96板卡的驱动程序,但是不知道他的中断状态寄存器在哪里?他的板卡使用手册里面只有设置中断允许的寄存器(只写),没有状态寄存器。这种情况下怎么弄呢?卡上有四片8255 一片8253,再就是PCI接口芯片,是他们自己生产的。我想用8253 ...… 查看全部问答> |
|
关于BeginPaint,EndPaint的问题(__security_check_cookie error) 我用VC2005下写基于pocket PC 2003的程序,在响应WM_PAINT的消息的时候,添加了Begin Paint和EndPaint的时候就编译通不过,错误应该是少了某个库,msdn里这两个函数是在Winmgr.lib里面,可是添加了这个库又说打不开,而且搜索电脑里也没有这个库, ...… 查看全部问答> |
|
请教:UCOS-II在TI的VC33移植时需要保存和恢复的全部寄存器都是那些、正确顺序是? 我正在研究UCOS-II在TI的VC33移植,但从33资料中确定不了以上问题,请有经验的高手指教,小弟不胜感激啊!! 我对TI公司的DSP(包括2812、c33、2407)的开发都有一定的经验了,欢迎和大家交流,我的的qq号是:61225451。… 查看全部问答> |
|
大家好,碰到一个问题想和大家讨论下,我用的LPC2478芯片内存是64k, 现在想从中分配出一段内存来做缓冲区。要的是绝对地址,和寄存器地址一样的那种。请问如何分配。求指导… 查看全部问答> |




