打印
[51单片机]

低通数字滤波算法

[复制链接]
1425|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhangwentao2|  楼主 | 2016-8-16 10:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
低通数字滤波的算法是
#define a 50 //定义加权系数
char value;//上一次采样值
char  filter()
{
     char new_value;//本次采样值变量
     new_value=get_ad();
     return (100-a)*value+a*new_value://返回的本次滤波结果
}
各位高手!请教一下,低通滤波的算法我虽然知道如上所示,可却不知道如何在程序中应用? 上一次采样值value在程序中该如何处理?  value是通过上次采集数据得到的值,也是get_ad();  ????
太多不懂的疑问 ,请各位指点迷津,或者能否提供些程序中应用的实例供参考理解?  谢谢!

相关帖子

沙发
mcu5i51| | 2016-8-16 10:49 | 只看该作者
模拟RC滤波;本次值执行后为上次值

使用特权

评论回复
板凳
joyme| | 2016-8-16 11:56 | 只看该作者
用char型很容易就溢出了,这样应该得不到正确的值吧

使用特权

评论回复
地板
zhangwentao2|  楼主 | 2016-8-16 12:55 | 只看该作者
mcu5i51 发表于 2016-8-16 10:49
模拟RC滤波;本次值执行后为上次值

嗯 是的  这个我知道 ,可具体的程序中如何去实现呢?关键是卡在这里了,因为我是初学的菜鸟,有太多的不懂,

使用特权

评论回复
5
zhangwentao2|  楼主 | 2016-8-16 12:56 | 只看该作者
joyme 发表于 2016-8-16 11:56
用char型很容易就溢出了,这样应该得不到正确的值吧

哦 这个类型可以视具体更改的 ,主要是不知道如何在程序中实现具体的算法,

使用特权

评论回复
6
mcu5i51| | 2016-8-16 14:41 | 只看该作者
zhangwentao2 发表于 2016-8-16 12:55
嗯 是的  这个我知道 ,可具体的程序中如何去实现呢?关键是卡在这里了,因为我是初学的菜鸟,有太多的不 ...

怎么会卡住呢?
用小数表示一下过程;新数权重0.1(10%)
原数取90% + 新数的10%;
这样就变化很少的数据了

使用特权

评论回复
7
heishe1989| | 2016-8-16 15:00 | 只看该作者
路过,学习一下。

使用特权

评论回复
8
crazyren| | 2016-8-16 16:10 | 只看该作者
楼主可以看下FIR滤波器原理

使用特权

评论回复
9
coody| | 2016-8-16 17:50 | 只看该作者
楼主定义的char型,一下子就溢出了。
至少使用int型,最好使用long或float。

使用特权

评论回复
10
airwill| | 2016-8-16 18:59 | 只看该作者
这个程序已经很清楚了, 应该不需多解释, 你的问题
只是因为你没有更新变量 value

使用特权

评论回复
11
daishifeng2008| | 2016-8-16 20:08 | 只看该作者
这加权系数是不是大了点?

使用特权

评论回复
12
冰零分子| | 2016-8-17 09:53 | 只看该作者
先不考虑溢出的问题,很显然value是这么处理的:

value=filter();

使用特权

评论回复
13
冰零分子| | 2016-8-17 10:04 | 只看该作者
不过话说你return值不除个100么

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

29

帖子

1

粉丝