注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

FY

Johnson 's Blog

 
 
 

日志

 
 

一阶数字低通滤波器  

2016-05-04 19:08:41|  分类: 飞控 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
float _filter_apply(LOWPASS_FIL *lowpass ,float sample, float cutoff_freq, float dt) 
{
float rc;
float alpha;
    if (cutoff_freq <= 0.0f || dt <= 0.0f) 
{
        (*lowpass)._output = sample;
        return (*lowpass)._output;
    }

    rc = 1.0f/(M_2PI_F*cutoff_freq);
    alpha = constrain_float(dt/(dt+rc), 0.0f, 1.0f);
    (*lowpass)._output += (sample - (*lowpass)._output) * alpha;
    return (*lowpass)._output;
}
====================================
将普通硬件RC低通滤波器的微分方程用差分方程来表求,变可以采用软件算法来模拟硬件滤波的功能,经推导,低通滤波算法如下: Yn=a* Xn+(1-a)*Yn-1 式中 Xn——本次采样值 Yn-1——上次的滤波输出值; 
,a——滤波系数,其值通常远小于1; Yn——本次滤波的输出值。 
由上式可以看出,本次滤波的输出值主要取决于上次滤波的输出值 (注意不是上次的采样值,这和加权平均滤波是有本质区别的),本次采样值对滤波输出的贡献是比较小的,但多少有些修正作用,这种算法便模拟了具体有教大惯性的低通滤波器功能。滤波算法的截止频率可用以下式计算: fL= a/2Pit pi为圆周率3.14… 式中 a——滤波系数; ,t——采样间隔时间; 
例如:当t=0.5s(即每秒2次),a=1/32时; fL=(1/32)/(2*3.14*0.5)=0.01Hz 
当目标参数为变化很慢的物理量时,这是很有效的。另外一方面,它不能滤除高于1/2采样频率的干搅信号,本例中采样频率为2Hz,故对1Hz以上的干搅信号应采用其他方式滤除, 
低通滤波算法程序于加权平均滤波相似,但加权系数只有两个:a和1-a。为计算方便,a取一整数,1-a用256-a,来代替,计算结果舍去最低字节即可,因为只有两项,a和1-a,均以立即数的形式编入程序中,不另外设表格。虽然采样值为单元字节(8位A/D)。为保证运算精度,滤波输出值用双字节表示,其中一个字节整数,一字节小数,否则有可能因为每次舍去尾数而使输出不会变化。 设Yn-1存放在30H(整数)和31H(小数)两单元中,Yn存放在32H(整数)和33H(小数)中。
  评论这张
 
阅读(11)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017