免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8218 | 回复: 8
打印 上一主题 下一主题

认识 Yn=a* Xn+(1-a)*Yn-1 请进 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-17 13:41 |只看该作者 |倒序浏览
低通滤波算法如下:

   Yn=a* Xn+(1-a)*Yn-1

式中  Xn——本次采样值

      Yn-1——上次的滤波输出值;

      a——滤波系数,其值通常远小于1;

      Yn——本次滤波的输出值。


我想问下前辈这个a滤波系数如何确定呢?它是一个常数还是什么???



上学的时候光幸福了,今天打电话才知道我们原来也开过“信号与系统”,可是我认识的同学没有会的,哎......交友不慎阿~!!!

论坛徽章:
0
2 [报告]
发表于 2008-04-17 14:01 |只看该作者
Yn=a* Xn+(1-a)*Yn-1是为了模拟了具有较大惯性的低通滤波器的功能,
因此a是一个远小于1的常数,否则Yn则受Xn影响较大,根据实际情况和经验设顶a的值(Xn对此惯性系统的影响力).

论坛徽章:
0
3 [报告]
发表于 2008-04-17 16:14 |只看该作者
google一下“指数平滑”

论坛徽章:
0
4 [报告]
发表于 2008-04-17 17:01 |只看该作者
原帖由 JohnBull 于 2008-4-17 16:14 发表
google一下“指数平滑”


一个经典数学模型会在各个领域都会有应用.

论坛徽章:
0
5 [报告]
发表于 2008-04-17 18:10 |只看该作者
十分感谢两位,这个是我写的关于此滤波算法的试验程序 。


#include <stdio.h>

#define NUM_sig 110

const float come[NUM_sig]={1,2,124,3,-80,5,6,7,8,9,-60,11,12,13,254,15,16,17,78,100,20,21,22,23,
24,25,26,27,28,-100,30,31,32,33,134,35,36,37,38,123,40,41,42,43,44,45,46,47,48,49,50,51,52,
53,54,55,56,57,123,59,60,61,62,63,64,65,66,67,68,69,70,123,72,73,74,75,76,77,10,79,80,81,
82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,12,104,105,106,107,108,109
};


float DT_LB(float Yn_1,float a,float get_AD)
{
&nbsp;&nbsp;&nbsp;&nbsp;float Yn ;
&nbsp;&nbsp;&nbsp;&nbsp;Yn=a*get_AD+(1-a)*Yn_1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return Yn ;
}
void main(int argc, char* argv[])
{
&nbsp;&nbsp;&nbsp;&nbsp;float Y=1 ;
&nbsp;&nbsp;&nbsp;&nbsp;float LB_xs=0.01 ;
&nbsp;&nbsp;&nbsp;&nbsp;int i;
&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i<NUM_sig;i++)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Y=DT_LB(Y,LB_xs,come[i]) ;   //滤波处理

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%0.0f,",Y);
&nbsp;&nbsp;&nbsp;&nbsp;}
}




假设定义的数流为

const float come[NUM_sig]={1,2,124,3,-80,5,6,7,8,9,-60,11,12,13,254,15,16,17,78,100,20,21,22,23,
24,25,26,27,28,-100,30,31,32,33,134,35,36,37,38,123,40,41,42,43,44,45,46,47,48,49,50,51,52,
53,54,55,56,57,123,59,60,61,62,63,64,65,66,67,68,69,70,123,72,73,74,75,76,77,10,79,80,81,
82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,12,104,105,106,107,108,109
}

系数是0.01 处理后的结果为

1,1,2,2,1,1,2,2,2,2,1,1,1,1,4,4,4,4,5,6,6,6,6,7,7,7,7,7,8,6,7,7,7,7,9,9,9,10,10,
11,11,12,12,12,12,13,13,13,14,14,15,15,15,16,16,16,17,17,18,19,19,20,20,20,21,21
,22,22,23,23,24,25,25,25,26,26,27,27,27,28,28,29,29,30,30,31,32,32,33,33,34,34,3
5,36,36,37,37,38,38,39,40,40,41,41,41,42,43,43,44,44


可以看到红色的值都滤掉了,可是这样的算法滞后特别严重,110个数据到最后只有44,我现在定义的滤波系数是0.01,这是否就得根据实际情况找个合适的值了???

系数是0.1的结果:

1,1,13,12,3,3,4,4,4,5,-2,-0,1,2,27,26,25,24,30,37,35,34,32,31,31,30,30,29,29,16,
18,19,20,22,33,33,33,34,34,43,43,43,43,43,43,43,43,44,44,45,45,46,46,47,48,48,49
,50,57,57,58,58,58,59,59,60,61,61,62,63,63,69,70,70,70,71,71,72,66,67,68,70,71,7
2,73,74,76,77,78,79,80,81,82,83,84,85,87,88,89,90,91,92,93,85,87,88,90,92,93,95,

论坛徽章:
0
6 [报告]
发表于 2008-04-17 18:18 |只看该作者
原帖由 jojolin 于 2008-4-17 18:10 发表
十分感谢两位,这个是我写的关于此滤波算法的试验程序 。


#include

#define NUM_sig 110

const float come[NUM_sig]={1,2,124,3,-80,5,6,7,8,9,-60,11,12,13,254,15,16,17,78,100,20,21,22,23,
24 ...


不错,多取几个a值试试.

论坛徽章:
0
7 [报告]
发表于 2008-04-17 18:25 |只看该作者

回复 #5 jojolin 的帖子

如果你的机器够快,写个循环取a自动检查.

论坛徽章:
0
8 [报告]
发表于 2008-04-17 18:26 |只看该作者

回复 #6 system888net 的帖子

多谢 ,
也看到了 您在另一个帖子中的阐述,呵呵,提醒我得改为定点运算,我用的2410不支持浮点的。

论坛徽章:
0
9 [报告]
发表于 2008-04-17 18:32 |只看该作者
原帖由 jojolin 于 2008-4-17 18:26 发表
多谢 ,
也看到了 您在另一个帖子中的阐述,呵呵,提醒我得改为定点运算,我用的2410不支持浮点的。




[ 本帖最后由 system888net 于 2008-4-21 17:28 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP