本文参考:从放弃到精通!卡尔曼滤波从理论到实践~_哔哩哔哩_bilibili
目录
卡尔曼滤波的引入:
滤波就是将测量得到的波形中的的噪声过滤掉,使得到的数据更趋于真实情况,也更加平滑,方便使用。如下图所示(红色曲线是测量直接得到的波形,紫色曲线是滤波后得到的平滑曲线)
卡尔曼滤波适用的系统:
卡尔曼滤波适用线性高斯系统
1.线性系统:满足叠加性和齐次性
叠加性:
齐次性:
2.高斯系统
高斯:噪声满足正态分布
宏观意义:
滤波即加权
理想状态:信号
1+噪声
0
卡尔曼滤波:估计值
估计值权重+观测值
观测值权重
:当前状态的值;
:上一个时刻该状态的值;
:输入,即给到
的一个输入;
:过程噪声
A:状态转移矩阵,代表当前状态上一时刻的值乘上A这种关系,作用在该系统
B:控制矩阵,输入乘上B这种关系,作用在该系统
举例:一辆小车以速度v在路上行驶,迎面而来的风速v1
那么状态方程与该情形对应关系如下
:当前状态的值;
C:
乘上某种关系得到要观测的值
:观测噪声,和观测器的误差有关
举例:火炉对水加温,蓝色点是水温的状态值,红色的点是温度计,温度计是一个传感器得到观测值
那么状态方程和观测方程与该情形对应关系如下
方框图表示如下所示
高斯分布直观图解:
二维中,所有值投影到x轴或y轴,都是正态分布
高斯分布参数分析:
是过程噪声,符合正太分布,均值为0,方差为
是观测噪声,符合正太分布,均值为0,方差为
统称
和
为高斯白噪声
举例1:GPS检测到小车的位置,检测到小车开了1000米,但是GPS有精度误差,因此要加上
米的噪声,该噪声就是观测误差,
=
。因为
是服从正态分布的,假设其方差为1,则此时
=1
举例2:有一个滑板,滑板前进的速度是5m/s,由于风的作用,因此滑板的速度有一个噪声
,此时滑板的速度为v+
,那么
=
,
是符合正太分布的,假设
,则
=1
一维方差:
(1)噪声的方差:前面的
和
(2)状态的方差:后面会提到状态估计值
的方差,
举例:小车实际跑了10米,但是由于噪声的影响,小车跑的距离是一个范围,服从正太分布,此时小车跑的距离就是10+
(噪声),该距离符合正态分布,因此小车跑的距离本身也会有一个方差。
二维协方差:cov(x,y)
一维的状态估计值
为一个值;
二维的
就是一个矢量,有两个不同的状态,如下图所示。这两个不同的状态同时对应着不同的噪声。
对于二维的
,其协方差就为
多维协方差矩阵C:
实验中,需要自己调来提高系统性能的参数:
卡尔曼滤波器中:Q(过程噪声的方差) R(观测噪声的方差)
PID控制器中:P I D
横轴为车的位置,竖轴为概率密度。
:状态量旁边没有横杠就是最优估计值(修正值、后验估计值)
:状态量旁边有横杠就是预测值(先验估计值)
:观测值,也就是传感器直接测量得到的值
图解:
(1)
是上一时刻的最优估计值,也就是上一时刻卡尔曼滤波最终输出的值
(2)
和
是基于上一时刻最优估计值
估计出来的当前时刻的预测值
是当前时刻的观测值
(3)
是当前时刻的最优估计值,通过当前时刻预测值
和当前时刻观测值
推出,上图可以看出
方差比较小,是因为经过卡尔曼滤波后,最终推出的
效果较好
实现过程:使用上一时刻的最优结果预测这一时刻的预测值,同时使用这一时刻观测值(传感器测得的数据)修正这一时刻预测值,得到这一时刻的最优结果
注:当状态值是一维的时候,H和I可以看作是1
预测:
1.上一时刻的最优估计值,推出这一时刻的预测值:
2.上一时刻最优估计值方差/协方差和超参数Q推出这一时刻预测值方差/协方差
深入理解,Q其实对应的是过程噪声的方差
更新:
1.这一时刻预测值方差/协方差和超参数R推出卡尔曼增益
为卡尔曼增益
因为
是和Q有关的,所以将
的公式带入可以推出卡尔曼增益
是和Q和R都有关的
深入理解,R其实对应的是观测噪声的方差
2.这一时刻预测值、这一时刻观测值、卡尔曼增益推出这一时刻最优估计值
为这一时刻观测值
3.这一时刻预测值方差/协方差、卡尔曼增益推出这一时刻最优估计值方差/协方差
举例:
小车有两个状态值,p代表位置,v代表速度。小车处于匀加速直线运动
预测模型:
1.上一时刻的最优估计值,推出这一时刻的预测值:
2.上一时刻最优估计值方差/协方差和超参数Q推出这一时刻预测值方差/协方差
推导:
因为
所以
其实第一步中这一时刻预测值后面应该还有一个过程噪声Wt要加上(前面省略了),如下图所示,这里面Q是前面省略的过程噪声Wt的方差
测量模型:
GPS测量只能测量小车的位置,不能测量小车的速度,所以
Zp是小车此时的真实位置
Zv是小车此时的真实速度
Pt是测量得到的小车此时的位置
Pt是GPS测量位置的误差
更新模型:
1.这一时刻预测值方差/协方差和超参数R推出卡尔曼增益
前面测量模型中,因为无法测速度,测量相当于是一维的,一维时H看作为1
2.这一时刻预测值、这一时刻观测值、卡尔曼增益推出这一时刻最优估计值
3.这一时刻预测值方差/协方差、卡尔曼增益推出这一时刻最优估计值方差/协方差
预测更新循环往复,就能得到每一时刻的最优估计值
当F=1且一维的情况H=1,那么
再结合这一时刻最优估计值的公式,如下:
可以得出:
当我们更信任观测值时,那么应该让卡尔曼增益K增大;从K的公式中可以看出,R越小K越大,Q越大K越大
当我们更信任模型估计值时,那么应该让卡尔曼增益K减小;从K的公式中可以看出,R越大K越小,Q越小K越小
结论:
当我们更信任模型估计值时(模型估计基本没有误差),那么应该让K小一点,我们应该将R取大一点,Q取小一点
当我们更信任观测值时(模型估计误差较大),那么应该让K大一点,我们应该将R取小一点,Q取大一点
和
的取值其实是比较随意的,因为经过后面几轮迭代后,就会很快趋于稳定值

目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
我正在尝试重新创建NewYorkTimesFashionWeek中使用的笛卡尔失真效果页。但是,他们使用D3版本3和D3js的鱼眼插件,但不适用于D3版本4。由于我们做的整个元素都在D3V4中,我无法降级到D3Version3。有没有其他方法可以使用CSS和jquery实现这种效果?我已经尝试过这是我到目前为止的位置:previewwindow.onload=run;functionrun(){if($('.overlayDiv').css('display')!='none'){varcontainer=d3.select('.overlayDiv');container.empty
我需要使用笛卡尔坐标系中的X和Y知道极坐标系中的旋转Angular。在没有大量IF语句的情况下,如何在JS中实现?我知道我可以使用来做到这一点,但我认为这对性能不利,因为它处于动画循环中。 最佳答案 Javascript带有一个内置函数,可以执行图中所示的操作:Math.atan2()Math.atan2()将y,x作为参数并返回以弧度为单位的Angular。例如:x=3y=4Math.atan2(y,x)//Noticethatyisfirst!//returns0.92729521...radians,whichis53.130
我想知道我的球体的纹理是否以某种方式没有正确应用,我是否可以以某种方式抵消它?我试图通过提供纬度/经度并转换为笛卡尔xyz坐标来在澳大利亚悉尼放置一个盒子。但是,盒子没有放在正确的位置。我的猜测是因为原始图像是墨卡托map,所以当它应用于球体时,纬度/经度中心点不正确。下面的代码是一个最小的可重现示例。我正在加载地球图像并将其应用于球体(半径=400)。然后我提供澳大利亚悉尼的纬度/经度(33.8688,-151.2093)并转换为弧度。将纬度/经度转换为笛卡尔xyz(取自:https://stackoverflow.com/a/1185413/3723165)翻译一个盒子并将其推到该
文章目录前言一、方法原理1.Harris角点检测2.Sobel滤波3.角点响应函数R二、代码实现1.**main函数**2.**corner_detect函数**三、结果对比1.不同检测方法(对比一下使用角点检测器R与H矩阵最小特征值)2.不同超参数k(使用角点检测器R,改变k值)3.非最大值抑制(对3x3的邻域范围内非最大值抑制)四、参考资料前言实现对图像的角点检测,编写Python程序能够对输入图像进行角点检测,并返回角点检测的结果,并且在可视化显示输出结果。而具体的文件和代码,在如下链接里:计算机视觉实践之角点检测Python实现使用的是pycharm,提前导入numpy和opencv库
背景对于任意一个场景,获取到的信号都是经过噪声污染过的,一些简单的加性噪声可以通过统计的特性进行滤除,而对于一些乘性的噪声,只能通过滤波进行滤除。在信号处理中,信号滤波会广泛使用。在做研究分析信号的特征时,直接读取到数据,然后分析特征;但是,要想解决实际场景中的问题,就需要一些工程化的思想,因为数据是实时产生的数据流,而滤波也需要实时计算。举个栗子:有一个5秒钟的音频信号,采样频率44100hz,需要滤波提取1500-3000hz频带的信号,假设实际中每次发出1秒钟的音频信号,以数据流的形式发送出来,共发送了5秒钟(实际是无限长的时间)。滤波器设计:基于MATLAB的FIR滤波器的设计音频信号
前情提要短时傅里叶变换公式S(m,k)=∑n=1N−1x(n+mH)w(n)e−i2πkNnS(m,k)=\sum_{n=1}^{N-1}x(n+mH)w(n)e^{-i2\pi\frac{k}{N}n}S(m,k)=n=1∑N−1x(n+mH)w(n)e−i2πNkn其中,m是当前滤波器的序号,表征了当前的时间段,k是当前频率的序号,表征了当前正在对哪一频率的e−i2πkNne^{-i2\pi\frac{k}{N}n}e−i2πNkn信号,寻找最佳的振幅和初相,w(n)是窗函数。更多关于短时傅里叶变换的知识,请参考深入理解傅里叶变换(四)。本文要讲解的梅尔时频谱图,需要有时频谱图的知识
本讲在Vivado调用FIR滤波器的IP核,使用上一讲中的matlab滤波器参数设计FIR滤波器,1. 新建工程(1) Create Project->RTLProject,一直Next直到选择器件,选择自己使用的器件;(2) 新建原理图文件,CreateBlockDesign;(3) 将上一讲中从 MATLAB 中导出的 FIR_BPF_99_1_5M.coe 文件放在新建工程后的工程目录下; 2. 添加IP核(1)加入FIR的IP核,在新建的原理图文件design_1中点击 1 处的加号,会弹出对话框
目录一、简介二、在Simulink中生成Verilog语言1、在Simulink中建立Kalman滤波器仿真2、将Kalman滤波器部分打包3、生成Verilog程序3.1、参数配置3.2、HDLCode代码生成三、Vivado中实现Kalman滤波仿真1、在Vivado中创建工程并将Kalman.v与Kalman_tb.v文件添加到工程中2、在Matlab中生成波形文件,代码如下3、重写tb仿真文件4、Vivado中仿真编译四、小结一、简介 此内容基于博文:基于MatlabHdlCoder实现FPGA程序开发(卡尔曼滤波算法实现)实现,Simulink仿真构建参考于上链接中。 本博文解决
一阶低通滤波的C语言实现0引言1一阶低通滤波器模型2matlab实现2.1matlab代码2.2总结3c语言实现4matlab查看波形频率(快速傅里叶变换,FFT)0引言一阶低通滤波器(LowPassFilter,LPF),核心参数为截止频率fc,该算法可以保留截止频率以内的信号,而衰减截止频率之外的信号。主要用于去除高频噪声。1一阶低通滤波器模型一阶低通滤波公式如下:也可以写作:其中:参数说明:y(n)为本次滤波输出值,y(n-1)为上次滤波输出值,x(n)为本次采样值。Ts为采样周期,fc为截止频率。α范围为[0,1]2matlab实现我们假设,现在有一个信号,它包含了频率为1Hz(幅值为