一般来说,我们希望我们的生活是线性的,就像这条线,这可能表示成功、收入或者幸福。但实际上,生活并不是线性的,它充满了起伏,有时甚至更复杂。

如果您是工程师,您经常会需要处理非线性系统,为了帮助您,我们将讨论非线性状态估算器。在之前的文章中,我们使用简化的线性汽车模型来讨论卡尔曼滤波器的状态估算。

但是,如果系统建模时考虑到非线性,比如道路摩擦,则状态转换函数变为非线性。在这里,噪声被线性地加入了系统,但也有可能噪声并非线性加进来。在一般系统中,无论状态转换函数还是观测函数,甚至两者都可能是非线性的。

对于所有这些情况,我们需要使用非线性状态估算器来替代卡尔曼滤波器。因为,卡尔曼滤波器仅针对线性系统。下面这个例子显示了使用卡尔曼滤波器对非线性系统进行状态估算出现的问题。卡尔曼滤波器假设高斯分布。如果状态转移函数是线性的, 在经历线性变换之后,分布保持其高斯特性。

虽然这里没有显示,但观测函数g(x)也是如此。但是,如果f(x)是非线性的,那么得到的状态分布可能不是高斯分布。

因此,卡尔曼滤波器算法可能会不收敛。在这种情况下,您可以使用扩展卡尔曼滤波器(EKF), 它把非线性函数在当前估算状态的平均值附近进行线性化。在每个时间步,执行线性化, 然后将得到的雅可比矩阵用于预测和更新卡尔曼滤波器算法的状态。

当系统是非线性,并且可以通过线性化很好地近似时,那么扩展卡尔曼滤波器是状态估算的一个很好的选择。然而,它有以下缺点: (1)由于复杂的导数,可能难以解析计算雅可比矩阵;(2)以数值方式计算它们则可能需要很高的计算成本;(3)扩展卡尔曼滤波器不适用于具有不连续模型的系统,因为系统不可微分时雅各比矩阵不存在;(4)高度非线性系统的线性化效果不好。

其中最后一种情况下线性化无效,因为非线性函数并不能通过线性函数很好的近似表达出来,描述不了系统动力学。

为了解决扩展卡尔曼滤波器的问题,您还可以使用另一种估算技术, 称为无迹卡尔曼滤波器(UKF)。你知道吗,过滤器的创建者注意到同事办公桌上的除臭剂才想出了这个名字(因为也有人称其无味卡尔曼滤波器)。现在回到滤波器,它并不像扩展卡尔曼滤波器那样近似非线性函数,无迹卡尔曼滤波器近似概率分布。我们的意思是:这是一个概率分布,无迹的卡尔曼滤波器选择一组最小的采样点,让它们的均值和协方差与该分布相同。

这些被称为西格玛点,并且围绕均值对称分布。然后,每个西格玛点通过非线性系统模型计算,并计算非线性变换后的输出点的均值和协方差,计算经验高斯分布,用来计算新的状态值。

注意,在线性卡尔曼滤波器算法中,在预测步骤中使用状态转移函数计算误差协方差P,然后使用测量量进行更新。然而,在无迹的卡尔曼滤波器中,我们不会以相同的方式计算它,因为我们以经验方式得到它。
基于相似原理的另一种非线性状态估计器是粒子滤波器(PF),它使用的样本点称为粒子。与无迹卡尔曼滤波器的显着差异在于,粒子滤波器近似任意分布,所以它不仅限于高斯假设。为了表示未明确知道的任意分布,粒子滤波器所需的粒子数远远大于无迹卡尔曼滤波器所需的粒子数。

作为比较,下表是我们到目前为止讨论过滤器的特性。卡尔曼滤波器仅适用于线性系统。对于非线性系统的状态估算,您可以使用 EKF ,UKF 或PF。注意,使用EKF 来精确估计状态,它需要非线性系统模型能很好的进行线性化,否则,滤波器得到的估算结果很差。粒子滤波器是唯一适用于任意分布的滤波器。我们看到,表格越往下计算成本越高。粒子滤波器所需要的运算量最大,因为它需要大量的粒子来近似任意分布。

本节,我们讨论了不同非线性状态估算器背后的基本概念。现在,如果您需要处理任何非线性问题,例如汽车案例中的道路摩擦,你已经知道如何估算非线性系统中感兴趣的状态值。
如果你想了解更多有关扩展卡尔曼滤波器(EKF)的知识,请观看以下视频:
【卡尔曼滤波器】6_扩展卡尔曼滤波器_Extended Kalman Filter_哔哩哔哩_bilibili
在Simulink中使用卡尔曼滤波器和扩展卡尔曼滤波器的例子请观看以下视频:
在 Simulink 中使用卡尔曼滤波器_哔哩哔哩_bilibili
在 Simulink 中使用扩展卡尔曼滤波器_哔哩哔哩_bilibili
文章内容的视频地址如下:
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
我经常将预配置的lambda插入可枚举的方法中,例如“map”、“select”等。但是“注入(inject)”的行为似乎有所不同。例如与mult4=lambda{|item|item*4}然后(5..10).map&mult4给我[20,24,28,32,36,40]但是,如果我制作一个2参数lambda用于像这样的注入(inject),multL=lambda{|product,n|product*n}我想说(5..10).inject(2)&multL因为“inject”有一个可选的单个初始值参数,但这给了我......irb(main):027:0>(5..10).inject
是否有self验证的问题列表。看着那个,我可以确定我知道。我应该复习一下。在学习的过程中,我列了一个这样的list,但它只包含我在某处听说过的项目。我需要一段时间才能找到新的东西。 最佳答案 以下是针对ruby和Rails的一些测试列表。证书名称:RubyonRails谁提供:oDeskIncorporation认证费用:免费网站:https://www.odesk.com/tests/985?pos=0证书名称:RubyonRails提供者:Techgig.com(TimesBusinessSolutionsLimited(T
我想覆盖store_accessor的getter。可以查到here.代码在这里:#Fileactiverecord/lib/active_record/store.rb,line74defstore_accessor(store_attribute,*keys)keys=keys.flatten_store_accessors_module.module_evaldokeys.eachdo|key|define_method("#{key}=")do|value|write_store_attribute(store_attribute,key,value)enddefine_met
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我一直在Rails上做两个项目,它们运行良好,但在这个过程中重新发明了轮子,自来水(和热水)和止痛药,正如我随后了解到的那样,这些已经存在于框架中。那么基本上,正确了解框架中所有智能部分的最佳方法是什么,这将节省时间而不是自己构建已经实现的功能?从第1页开始阅读文档?是否有公开所有内容的特定示例应用程序?一个特定的开源项目?所有的rails交通?还是完全
假设我有一个函数defodd_or_evennifn%2==0return:evenelsereturn:oddendend我有一个简单的可枚举数组simple=[1,2,3,4,5]然后我用我的函数在map中运行它,使用一个do-endblock:simple.mapdo|n|odd_or_even(n)end#=>[:odd,:even,:odd,:even,:odd]如果不首先定义函数,我怎么能做到这一点?例如,#doesnotworksimple.mapdo|n|ifn%2==0return:evenelsereturn:oddendend#Desiredresult:#=>[
在以下示例中,我无法理解Ruby运算符的优先级:x=1&&y=2由于&&的优先级高于=,我的理解是类似于+和*运算符:1+2*3+4解析为1+(2*3)+4它应该等于:x=(1&&y)=2但是,所有Ruby源代码(包括内部语法解析器Ripper)都将其解析为x=(1&&(y=2))为什么?编辑[08.01.2016]让我们关注一个子表达式:1&&y=2根据优先规则,我们应该尝试将其解析为:(1&&y)=2这没有意义,因为=需要特定的LHS(变量、常量、[]数组项等)。但是既然(1&&y)是一个正确的表达式,那么解析器应该如何处理呢?我试过咨询Ruby的parse.y,但它太像意大利面条
我在维基百科上找到了这个代码块,作为Ruby中quine(打印自身的程序)的示例。puts但是,我不明白它是如何工作的。特别是,我没有得到的是,当我删除最后一行时,出现此错误:syntaxerror,unexpected$end,expectingtSTRING_CONTENTortSTRING_DBEGortSTRING_DVARortSTRING_END这些行中发生了什么? 最佳答案 语法以here-document开始,通过Perl从UNIXshell借用-它基本上是一个多行字符串文字,从之后的行开始当一行以something
最近火热的“数字藏品”,你真正了解吗?其实有很多人会把数字藏品跟NFT混为一谈,但其实这两者还是有差别的。数字藏品并不等同于NFT数字藏品是什么?直观来看,它可能就是一张数字化照片或视频,甚至就只是一串数字。但它却是一件对应特定作品、艺术品生成的包含着大量数字信息且拥有唯一加密信息的可以买卖交易的收藏品。NFT则是指一种基于以太坊区块链的“非同质化代币”。它在百度百科里的释义是“用于表示数字资产(包括jpg和视频剪辑形式)的唯一加密货币令牌,可以买卖”。比如已被很多人认识的比特币就是NFT的一种。NFT在元宇宙中发挥的作用是巨大的,目前正是它在支撑着元宇宙中的经济体系。数字藏品其实也是NFT的