总所周知,FPGA极其不擅长复杂算法的运算,但是如果项目中又涉及一些高级算法的实现,在没有可封装IP核调用的形式下,我们应该如何进行程序开发呢?今夕已经是2020年,我们一味依赖于用verilog写代码无异于用汇编写程序,这种方式无异于古时钻木取火的原始时代。如今用Matlab联调FPGA,基于simulink的Hdl Coder模块搭建算法模型,再自动生成代码才是高阶有效的终极玩法。尤其在一些信号处理领域,掌握Matlab联调FPGA的技术更是必备技能。

下面以卡尔曼滤波为例,具体讲述如何基于Hdl Coder实现卡尔曼滤波算法实现。首先简单介绍下卡尔曼滤波算法:

卡尔曼滤波(Kalman filtering)是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。由于观测数据中包含系统噪声和干扰的影响,所以最优估计也可看作是滤波过程。简单来说,它就是利用过去的状态值和现在的测量值来更正现在的状态值,利用卡尔曼增益不停在估计和测量中寻找最优化的平衡值。

Kalman filtering的经典五方程,在进行卡尔曼滤波的程序设计前必须要充分理解这五个方程的定义、推导以及相关变量的设定。

(1) 对于现在状态的预测方程:

X(k|k-1)=A X(k-1|k-1)+B U(k) ……….. (1)

P(k|k-1)=A P(k-1|k-1) A’+Q ……… (2)

(2)对于现在状态的更新方程:(拿过去的真实值得到现在的预测值,再集合现在的测量值Z(k),进行现在状态值的更新)

X(k|k)= X(k|k-1)+Kg(k) (Z(k)-H X(k|k-1)) ……… (3)

Kg(k)= P(k|k-1) H’ / (H P(k|k-1) H’ + R) ……… (4)

P(k|k)=(I-Kg(k) H)P(k|k-1) ……… (5)

其中Z(k)=H X(k)+V(k)为观测方程。

对于上述方程要明确以下几个变量的赋值:

1) 状态转移矩阵:A

2) 系统控制变量:U(k)

3) 观测矩阵:H

4)系统状态初值:X(0|0)

5)系统协方差:P(0|0)

6)R:测量噪声

7)Q:过程噪声

8)Z:观测值

这7个变量要根据不同的产品以及应用场景进行具体赋值,其中对于单系统输入,变量赋值为:

1)A=1(状态转移矩阵),U(k)=0(系统控制变量), H=1(观测矩阵),B=1(对于一维变量,全为1)

2)Z观测值就是系统外部灌进来的实时变量。

3)系统协方差:P(0|0),可以采样一段时间后进行运算保证在kalman滤波器工作前进行赋值即可。

4)对于卡尔曼应用,最难确定的就是Q、R这两个噪声,只能根据实际模型,不停调整以逼近最优解。

基于上述的卡尔曼滤波搭建simulink仿真模型

下面对上述simulink模型进行进一步封装

具体设置kalman模块的Hdl Coder参数模式

最后点击“Generate HDL”与“Generate Test Bench”,生成verilog源程序与测试代码

要对执行文件进行仿真,只需要在modelsim命令框自动执行以下后缀文件即可“kalman_compile.do”,"kalman_tb_compile.do","kalman_tb_sim.do"即可。

下面进行卡拉曼滤波效果展示:

验证目的:调整Q的参数值,验证下Modelsim的仿真波形是否有对应的正确变化
1)Q=0.003,R=0.0001,,预计结果滤波后的噪声跟原始噪声相差不大。

结果展示:

验证结果:原始噪声与滤波后噪声幅值基本一致,符合期望值。

2)Q=0.0000003,R=0.0001,预计滤波后的噪声跟原始噪声幅度值相差较大,滤波效果较好。

结果展示:

验证结果:卡尔曼滤波后噪声幅值较小,符合输出期望值。
 
因此,基于Hdl Coder实现卡尔曼滤波算法结束。
 
Ps:最近一周心情太差,压力满满,茶饭不思,唯有将无限的精力投身于自己喜欢的FPGA身上了,希望早日摆脱雾霾,早日活力满满!

基于Hdl Coder实现卡尔曼滤波算法的更多相关文章

  1. Google Cardboard的九轴融合算法——基于李群的扩展卡尔曼滤波

    Google Cardboard的九轴融合算法 --基于李群的扩展卡尔曼滤波 极品巧克力 前言 九轴融合算法是指通过融合IMU中的加速度计(三轴).陀螺仪(三轴).磁场计(三轴),来获取物体姿态的方法 ...

  2. 基于FPGA的腐蚀膨胀算法实现

    本篇文章我要写的是基于的腐蚀膨胀算法实现,腐蚀膨胀是形态学图像处理的基础,,腐蚀在二值图像的基础上做"收缩"或"细化"操作,膨胀在二值图像的基础上做" ...

  3. 基于MATLAB的腐蚀膨胀算法实现

    本篇文章要分享的是基于MATLAB的腐蚀膨胀算法实现,腐蚀膨胀是形态学图像处理的基础,腐蚀在二值图像的基础上做“收缩”或“细化”操作,膨胀在二值图像的基础上做“加长”或“变粗”的操作. 什么是二值图像 ...

  4. matlab中hdl coder 的使用

    今天摸索了一下hdl coder的使用方法,各个步骤主要是照猫画虎,有些地方还是不理解,先总结一下: 1.要想调用quartus或者Xilinx综合布局布线需要先设置,设置的方法有两种,命令窗口输入 ...

  5. 基于视觉信息的网页分块算法(VIPS) - yysdsyl的专栏 - 博客频道 - CSDN.NET

    基于视觉信息的网页分块算法(VIPS) - yysdsyl的专栏 - 博客频道 - CSDN.NET 于视觉信息的网页分块算法(VIPS) 2012-07-29 15:22 1233人阅读 评论(1) ...

  6. VIPS:基于视觉的页面分割算法[微软下一代搜索引擎核心分页算法]

    VIPS:基于视觉的页面分割算法[微软下一代搜索引擎核心分页算法] - tingya的专栏 - 博客频道 - CSDN.NET VIPS:基于视觉的页面分割算法[微软下一代搜索引擎核心分页算法] 分类 ...

  7. 基于FPGA的肤色识别算法实现

    大家好,给大家介绍一下,这是基于FPGA的肤色识别算法实现. 我们今天这篇文章有两个内容一是实现基于FPGA的彩色图片转灰度实现,然后在这个基础上实现基于FPGA的肤色检测算法实现. 将彩色图像转化为 ...

  8. 基于MATLAB的人脸识别算法的研究

    基于MATLAB的人脸识别算法的研究 作者:lee神 现如今机器视觉越来越盛行,从智能交通系统的车辆识别,车牌识别到交通标牌的识别:从智能手机的人脸识别的性别识别:如今无人驾驶汽车更是应用了大量的机器 ...

  9. 基于RNN的音频降噪算法 (附完整C代码)

    前几天无意间看到一个项目rnnoise. 项目地址: https://github.com/xiph/rnnoise 基于RNN的音频降噪算法. 采用的是 GRU/LSTM 模型. 阅读下训练代码,可 ...

随机推荐

  1. Apache多处理模块

    介绍 Apache HTTP 服务器被设计为一个功能强大,并且灵活的 web 服务器, 可以在很多平台与环境中工作.不同平台和不同的环境往往需要不同 的特性,或可能以不同的方式实现相同的特性最有效率. ...

  2. 如何优雅的维护 K8S Worker 节点

    前言 正常维护工作节点的流程 当我们要进行 K8S 节点维护时往往需要执行 kubectl drain, 等待节点上的 Pod 被驱逐后再进行维护动作. 命令行如下: kubectl drain NO ...

  3. (转)如何学好C语言

    原文:http://coolshell.cn/articles/4102.html    作者:陈皓 有人在酷壳的留言版上询问下面的问题 keep_walker : 今天晚上我看到这篇文章. http ...

  4. git常用命令/git 部分高级命令备忘录

    常用命令 克隆 - git clone  git@gitee.com:niunafei1/git_learning.git git 创建分支 - git checkout -b dev git 切换分 ...

  5. HDU 5451 Best Solver

    没有意识到循环节最大是M^2,用域Z_M下二阶可逆矩阵群的最大循环节(M^2-1)*(M^2-M)来做,考虑大数乘法,矩阵乘法,做到吐血.将代码贴在下方留作纪念. #include<bits/s ...

  6. MATLAB学习1 之画图函数

    ezplot适用条件 "ezplot"命令可以用于显函数.隐函数和参数方程作图. 不同函数的使用格式 显函数y=f(x),ezplot函数的调用格式为ezplot(f, [xmin ...

  7. dhcpd.conf(5) - Linux man page

    http://linux.die.net/man/5/dhcpd.conf Name dhcpd.conf - dhcpd configuration file Description   The d ...

  8. PPT模板素材

    http://588ku.com/sucai/0-dnum-0-54-0-1/

  9. Soldiers Sortie

    这部2006年上映的作品豆瓣评分9.3,时至今日仍然有人乐此不疲地讨论剧情和启发,我想称之为经典应该不算过分. 这部剧我至少完整看过3遍,随着阅历增加,对某些角色的体会也变得更深刻. 许三多 许三多是 ...

  10. VMware15.5.0安装MacOS10.15.0系统 安装步骤(上)

    VMware15.5.0安装MacOS10.15.0系统安装步骤(上)超详细! 说明: 本文是目前最新的安装和调配教程且MacOS10.15和10.16版本搭建方法相同,我也会在一些细节地方加上小技巧 ...