您当前的位置:首页 > 电脑百科 > 程序开发 > 算法

嵌入式常用滤波算法的matlab实现

时间:2021-09-27 11:51:43  来源:  作者:阿木实验室

随着基于模型设计的广泛应用,模型在环仿真也逐渐多了起来,我们今天介绍几种嵌入式常用滤波算法的matlab实现。

一、采用数字滤波算法克服随机干扰的误差具有以下优点:

  1. 数字滤波无需其他的硬件成本,只用一个计算过程,可靠性高,不存在阻抗匹配问题。尤其是数字滤波可以对频率很低的信号进行滤波,这是模拟滤波器做不到的。

  2. 数字滤波使用软件算法实现,多输入通道可共用一个滤波程序,降低系统开支。

  3. 只要适当改变滤波器的滤波程序或运算,就能方便地改变其滤波特性,这对于滤除低频干扰和随机信号会有较大的效果。

  4. 在单片机系统中常用的滤波算法有限幅滤波法、中值滤波法、算术平均滤波法、加权平均滤波法、滑动平均滤波等。

%% 代码测试框架clearsignal=wgn(1,1000,10);signal=10+signal;signalFited=zeros(1,1000);for i=1:1000signalFited(i)=MyFilter(@LowPasFilter,signal(i)); % 改一下句柄名字就可以了。endplot(signal);hold on;plot(signalFited);function output = MyFilter(fun,input)%MyFilter 滤波测试函数% MyFilter.m output=fun(input);end

二、限幅滤波该运算的过程中将两次相邻的采样相减,求出其增量,然后将增量的绝对值,与两次采样允许的最大差值maxErr进行比较。maxErr的大小由被测对象的具体情况而定,如果小于或等于允许的最大差值,则本次采样有效;否则取上次采样值作为本次数据的样本。

限幅滤波法主要用于处理变化较为缓慢的数据,如温度、物体的位置等。使用时,关键要选取合适的门限制maxErr。通常这可由经验数据获得,必要时可通过实验得到。

function out = LimRanFilter(input)%LimRan 限幅度滤波函数% LimRanFilter.mmaxErr=5;%允许最大误差 persistent last;if isempty(last) last=input;end%上一次的值if((input-last)>maxErr||(last-input)>maxErr) out=last;else out=input;endend

技术分享 | 嵌入式常用滤波算法的matlab实现

三、中值滤波

该运算的过程是对某一参数连续采样N次(N一般为奇数),然后把N次采样的值按从小到大排列,再取中间值作为本次采样值,整个过程实际上是一个序列排序的过程。

中值滤波比较适用于去掉由偶然因素引起的波动和采样器不稳定而引起的脉动干扰。若被测量值变化比较慢,采用中值滤波法效果会比较好,但如果数据变化比较快,则不宜采用此方法。

function output= MeanFilter(input)%MeanFilter 中值滤波% MeanFilter.mpersistent buff;if isempty(buff) buff=[2 0 0 0 0 0];end%选择序列if(buff(1)<7) buff(buff(1))=input; buff(buff(1))=buff(buff(1))+1;else for i=2:5 if(buff(i)>buff(i+1)) temp=buff(i); buff(i)=buff(i+1); buff(i+1)=temp; end end buff(2:6)=0; buff(1)=2;end%初始化滤波缓冲区output=buff(4);end

技术分享 | 嵌入式常用滤波算法的matlab实现

四、滑动平均滤波

平均滤波算法有一个特点,即每获取一个有效采样值必须连续进行若干次采样,当采速度慢时,系统的实时得不到保证。这里介绍的滑动平均滤波算法只采样一次,将一次采样值和过去的若干次采样值一起求平均,得到的有效采样值即可投入使用。如果取N个采样值求平均,存储区中必须开辟N个数据的暂存区。每新采集一个数据便存入暂存区中,同时去掉一个最老数据,保存这N个数据始终是最新更新的数据。采用环型队列结构可以方便地实现这种数据存放方式。

function output= MovAveFilter(input)%MovAveFilter 滑动平均滤波% ´MovAveFilter.mpersistent buff;if isempty(buff) buff=[ 0 0 0 0 0 ];end%滑动窗口persistent numOfBuff;if isempty(numOfBuff) numOfBuff=0;end%´当前窗口元素persistent k;if isempty(k) k=1;end%计数器buff(k)=input;k=mod((k+1),5)+1;numOfBuff=numOfBuff+1;if(numOfBuff>5) numOfBuff=5;endoutput=sum(buff)/numOfBuff;end

技术分享 | 嵌入式常用滤波算法的matlab实现

五、低通滤波

将普通硬件RC低通滤波器的微分方程用差分方程来表求,变可以采用软件算法来模拟硬件滤波的功能,经推导,低通滤波算法如下:

Yn=a* Xn+(1-a) *Yn-1式中 Xn——本次采样值Yn-1——上次的滤波输出值;a——滤波系数,其值通常远小于1;Yn——本次滤波的输出值。

function output= LowPasFilter(input)%LowPasFilter低通滤波% ´LowPasFilter.mpersistent yn0;if isempty(yn0) yn0=0;end%上次输出值a=0.5;%滤波系数output=inputa+yn0(1-a);yn0=output;end

技术分享 | 嵌入式常用滤波算法的matlab实现

这几种是使用较多的滤波算法,比较方便进行仿真与编写,还有扩展卡尔曼等的实现可以根据实际情况来运用,在一般领域这几种滤波算法已经能够达到很好的效果了。

  • End -

技术发展的日新月异,阿木实验室将紧跟技术的脚步,不断把机器人行业最新的技术和硬件推荐给大家。看到经过我们培训的学员在技术上突飞猛进,是我们培训最大的价值。如果你在机器人行业,就请关注我们的公众号,我们将持续发布机器人行业最有价值的信息和技术。

阿木实验室致力于前沿IT科技的教育和智能装备,让机器人研发更高效!



Tags:滤波算法   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
随着基于模型设计的广泛应用,模型在环仿真也逐渐多了起来,我们今天介绍几种嵌入式常用滤波算法的matlab实现。一、采用数字滤波算法克服随机干扰的误差具有以下优点: 数字滤波...【详细内容】
2021-09-27  Tags: 滤波算法  点击:(72)  评论:(0)  加入收藏
本文将以车辆三自由度模型为基础,利用扩展卡尔曼滤波,通过车辆的侧向加速度来估计横摆角速度、质心侧偏角、纵向速度等三个参数,通过一个实际的仿真案例来进行具体介绍扩展卡尔...【详细内容】
2020-08-31  Tags: 滤波算法  点击:(79)  评论:(0)  加入收藏
▌简易百科推荐
前言Kafka 中有很多延时操作,比如对于耗时的网络请求(比如 Produce 是等待 ISR 副本复制成功)会被封装成 DelayOperation 进行延迟处理操作,防止阻塞 Kafka请求处理线程。Kafka...【详细内容】
2021-12-27  Java技术那些事    Tags:时间轮   点击:(1)  评论:(0)  加入收藏
博雯 发自 凹非寺量子位 报道 | 公众号 QbitAI在炼丹过程中,为了减少训练所需资源,MLer有时会将大型复杂的大模型“蒸馏”为较小的模型,同时还要保证与压缩前相当的结果。这就...【详细内容】
2021-12-24  量子位    Tags:蒸馏法   点击:(9)  评论:(0)  加入收藏
分稀疏重建和稠密重建两类:稀疏重建:使用RGB相机SLAMOrb-slam,Orb-slam2,orb-slam3:工程地址在: http://webdiis.unizar.es/~raulmur/orbslam/ DSO(Direct Sparse Odometry)因为...【详细内容】
2021-12-23  老师明明可以靠颜值    Tags:算法   点击:(7)  评论:(0)  加入收藏
1. 基本概念希尔排序又叫递减增量排序算法,它是在直接插入排序算法的基础上进行改进而来的,综合来说它的效率肯定是要高于直接插入排序算法的;希尔排序是一种不稳定的排序算法...【详细内容】
2021-12-22  青石野草    Tags:希尔排序   点击:(6)  评论:(0)  加入收藏
ROP是一种技巧,我们对execve函数进行拼凑来进行system /bin/sh。栈迁移的特征是溢出0x10个字符,在本次getshell中,还碰到了如何利用printf函数来进行canary的泄露。ROP+栈迁移...【详细内容】
2021-12-15  星云博创    Tags:栈迁移   点击:(19)  评论:(0)  加入收藏
一、什么是冒泡排序1.1、文字描述冒泡排序是一种简单的排序算法。它重复地走访要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地...【详细内容】
2021-12-15    晓掌柜丶韶华  Tags:排序算法   点击:(16)  评论:(0)  加入收藏
在了解golang的map之前,我们需要了解哈希这个概念。哈希表,又称散列表(Hash table),是根据键(key)而直接访问在内存储存位置的数据结构。也就是说,它通过计算出一个键值的函数,将...【详细内容】
2021-12-07  一棵梧桐木    Tags:哈希表   点击:(13)  评论:(0)  加入收藏
前面文章在谈论分布式唯一ID生成的时候,有提到雪花算法,这一次,我们详细点讲解,只讲它。SnowFlake算法据国家大气研究中心的查尔斯&middot;奈特称,一般的雪花大约由10^19个水分子...【详细内容】
2021-11-17  小心程序猿QAQ    Tags:雪花算法   点击:(24)  评论:(0)  加入收藏
导读:在大数据时代,对复杂数据结构中的各数据项进行有效的排序和查找的能力非常重要,因为很多现代算法都需要用到它。在为数据恰当选择排序和查找策略时,需要根据数据的规模和类型进行判断。尽管不同策略最终得到的结果完...【详细内容】
2021-11-04  华章科技    Tags:排序算法   点击:(37)  评论:(0)  加入收藏
这是我在网上找的资源的一个总结,会先给出一个我看了觉得还行的关于算法的讲解,再配上实现的代码: Original author: Bill_Hoo Original Address: http://blog.sina.com.cn/s/bl...【详细内容】
2021-11-04  有AI野心的电工和码农    Tags: KMP算法   点击:(36)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条