算法学习笔记之一阶低通滤波算法

算法学习笔记之一阶低通滤波算法1.一阶滤波算法的原理一阶滤波,又叫一阶惯性滤波,或一阶低通滤波。是使用软件编程实现普通硬件RC低通滤波器的功能。一阶低通滤波的算法公式为:Y(n)=αX(n)(1-α)Y(n-1)式中:α=滤波系数;X(n)=本次采样值;Y(n-1)=上次滤波输出值;Y(n)=本次滤波输出值。一阶低通滤波法采用本次采样值与

大家好,又见面了,我是你们的朋友全栈君。

 

 1. 一阶滤波算法的原理 

一阶滤波,又叫一阶惯性滤波,或一阶低通滤波。是使用软件编程实现普通硬件RC低通滤波器的功能。 

一阶低通滤波的算法公式为:

                         Y(n)=αX(n) + (1-α)Y(n-1) 

 

  式中:α=滤波系数;X(n)=本次采样值;Y(n-1)=上次滤波输出值;Y(n)=本次滤波输出值。 

 

一阶低通滤波法采用本次采样值与上次滤波输出值进行加权,得到有效滤波值,使得输出对输入有反馈作用。

 

 2. 一阶滤波算法的程序(适用于单个采样) 

#define a   0.01                // 滤波系数a(0-1)

char value;                    //滤波后的值
char new_value;                 //  新的采样值

char filter() 
{ 
char new_value; 
new_value = get_ad(); 
return 0.01*value + (1-0.01)*new_value;
 }
</pre><pre>

 

 

 

 

 

3. 一阶滤波算法的不足 

1. 关于灵敏度和平稳度的矛盾 

     

      滤波系数越小,滤波结果越平稳,但是灵敏度越低;

      滤波系数越大,灵敏度越高,但是滤波结果越不稳定。

     一阶滤波无法完美地兼顾灵敏度和平稳度。有时,我们只能寻找一个平衡,在可接受的灵敏度范围内取得尽可能好的平稳度。而在一些场合,我们希望拥有这样一种接近理想状态的滤波算法。即:

     当数据快速变化时,滤波结果能及时跟进(灵敏度优先);

     当数据趋于稳定,在一个固定的点上下振荡时,滤波结果能趋于平稳(平稳度优先)。

 

2. 关于小数舍弃带来的误差 

   一阶滤波算法有一个鲜为人知的问题:小数舍弃带来的误差。 比如: 本次采样值=25,上次滤波结果=24,滤波系数=10, 根据滤波算法:

      本次滤波结果=(25*10+24*(256-10))/256=24.0390625 
   但是,我们在单片机运算中,很少采用浮点数。因此运算后的小数部分要么舍弃,要么进行四舍五入运算。这样一来,本例中的结果24.0390625就变成了24。假如每次采样值都=25,那么滤波结果永远=24。也就是说滤波结果和实际数据一直存在无法消除的误差。
 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132080.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • oracle怎么使用触发器,oracle触发器使用[通俗易懂]

    oracle怎么使用触发器,oracle触发器使用[通俗易懂]2)触发器分类:1.DML触发器:创建在表上,由DML事件引发2.insteadof触发器:创建在视图上并且只能在行级上触发,用于替代insert,delete等操作(由于oracle中不能直接对有两个以上的表建立的视图进行DML操作,所以给出替代触发器,它是专门为进行视图操作的一种处理方法)3.DDL触发器:触发事件时数据库对象的创建和修改4.数据库事件触发器:定义在数据库或者模式上,由…

    2022年7月11日
    13
  • Java.Utils:网络工具包[通俗易懂]

    Java.Utils:网络工具包[通俗易懂]packagecom.boob.common.utils;importorg.springframework.util.MultiValueMap;importorg.springframework.web.util.UriComponentsBuilder;importjavax.net.ssl.HttpsURLConnection;importjavax.servlet….

    2022年7月16日
    10
  • django mysqlclient_mac好用的ssh

    django mysqlclient_mac好用的sshmac系统安装mysqlclient时,会报错OSError:mysql_confignotfound解决办法在项目路径下输入以下内容PATH="$PATH":/usr

    2022年7月29日
    4
  • HashMap的数据结构浅析[通俗易懂]

    HashMap的数据结构浅析[通俗易懂]HashMap是非线程安全的。而HashMap的线程不安全主要体现在resize时的死循环HashMap工作原理HashMap数据结构常用的底层数据结构主要有数组和链表。数组存储区间连续,占用内存较多,寻址容易,插入和删除困难。链表存储区间离散,占用内存较少,寻址困难,插入和删除容易。HashMap要实现的是哈希表的效果,尽量实现O(1)级别的增删改查。它的具体实现则是同时使用…

    2022年5月18日
    32
  • leetcode-15三数之和(双指针)「建议收藏」

    leetcode-15三数之和(双指针)「建议收藏」原题链接给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[] 提示:0 <= nums.length <= 300

    2022年8月9日
    2
  • android开发笔记之 Android代码混淆打包

    android开发笔记之 Android代码混淆打包大家应该都听过代码混淆吧,如果大家有去反编译过别人的APK的话,应该会看到好多包名和类名是a,b.c….之类的的吧,这里就提到了一个概念:混淆。那就让我们了解下这个东西吧作用:为了防止自己的劳动成果被别人窃取,混淆代码能有效防止被反编译缺省情况下,proguard会混淆所有代码,但是下面几种情况是不能改变java元素的名称,否则就会这样就会导致程序出错。一,我们用到反射的地方。

    2022年5月30日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号