当前位置: 首页 > news >正文

自适应滤波算法的FPGA实现思路

1、原理简介

  参考相关论文,自适应滤波器主要由FIR滤波器本体、参数自适应计算两部分组成。参数自适应计算部分是用来迭代计算滤波器系数的,它的输入是期望估计误差f、原始数据采样保存的向量U,输出是可变的FIR滤波器系数。FIR滤波器就是传统的有限冲击响应滤波器,可以是低通、高通等类型。之所以说这里自适应算法输出的滤波器系数可变,是因为它会根据变化的期望误差和输入向量,不停的进行迭代,最终会收敛。由于有了自适应算法,滤波器对动态误差的响应会更快,理论上噪声抑制效果也更好。

image

图1 自适应滤波器架构

  论文上的自适应算法有很多种,其中LMS最小均方差自适应滤波算法计算量比较小,所以我选择它用在自己的项目里。

  LMS自适应算法公式:

  image

  公式里的image就是需要不断迭代的滤波器系数,M维向量;c和r都是常数;UT表示U的转置也是M维的向量;其他符号在图里面都已经解释了。这是一种可变更新步长的算法,因为UTU是变化的。

  如果用固定步长,那么公式就是:

  image

  这里面的h就是步长,相当于是一个固定的系数。

  可变步长算法的好处是收敛快,滤波器延时更小。

2、实现流程

  明白了原理,下面再设计滤波器的verilog实现方案。

  分析前面第1个公式,有加法、乘法、除法,还有M维的向量。做过FPGA算法的应该有体会,向量和矩阵计算在verilog里面不太好处理,需要把它转化成单个元素进行计算,不然会占用太多资源,说白了就是把并行计算架构转成流水线形式的计算架构。这里面还需要关注的是参数向量B(n)和输入向量U(n),如何表示这两个动态变化的向量,还有就是如何计算image

  我选择用FIFO表示前面提到的几个M维向量,需要计算时就读FIFO中的数据,计算完成之后更新FIFO。至于image ,手动推导后可以看出它其实就是向量各元素的平方和,因此也可以用FIFO通过不断缓存image以及动态累加的方式实现。

  基于FIFO的自适应算法架构如下图所示。

  

image

 

  图片画的不太简洁,用文字描述一下在FPGA中实现的过程。

  第一步:系统复位后先对FIFOA1FIFOB1初始化,也就是先缓存得到一组向量B和向量U。

  第二步:初始化结束后,等待输入数据(滤波前)u和滤波后数据u1更新,然后FIFOCtrlB模块读FIFOA1的数据并参与计算流水线,动态累加模块读FIFOC以及新输入数据完成累加值更新并参与计算流水线,FIFOCTRLU模块读FIFOB1数据参与计算流水线。

  第三步:计算流水线完成乘法、加法全部计算过程,得到一个新的参数B(n+1),FIFOCtrlB把这个新参数写入FIFOA2,以供下一轮计算使用,同时FIFOCTRLU模块把上一步参与计算流水线的数据写入FIFOB2,也是为了下一轮次计算使用。直到FIFOA1中的参数读完了也就是计算完了,与此同时FIFOB1也被读空了,相应的FIFOA2、FIFOB2也都写完成了,这一轮计算结束。

  下一轮计算时,FIFOA1和FIFOA2互换读写次序,FIFOB1、FIFOB2互换读写次序。循环往复。

  由于和都是常数,因此代入常数后就省掉了除法器,用乘法代替。

  自适应算法是滤波器最核心最难的部分,把这部分的输出直接接入FIR滤波器,就可以实现了自适应FIR滤波。至于FIR滤波器,用IP核就可以,不需要自行设计。当然也可以自己用逻辑和加法器、乘法器搭建FIR滤波器,这样可控性更好,不然还要去理解FIR的IP核的接口和参数的含义,也挺费事的。

  目前已经按照这个流程写好了verilog逻辑,后面会仿真测试,与MATLAB计算的结果比较一下,验证设计是否正确。

http://www.jsqmd.com/news/135612/

相关文章:

  • Pandoc转换Word文档:使用Lua过滤器统一调整Pandoc文档中的图片和表格格式
  • 别再自己苦熬写论文了!8款免费AI神器30分钟搞定,文理医工全覆盖
  • vue基于python的民宿房间预订推荐系统的设计与实现_7r8s9b63(pycharm django flask)
  • hive3之数据倾斜解决方案
  • Java毕设选题推荐:基于springboot的美发商城系统基于springboot美发门店管理系统设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • VFF-Net:一种取代反向传播的AI训练新算法
  • Java计算机毕设之基于Java的停车场管理系统(完整前后端代码+说明文档+LW,调试定制等)
  • Java毕设项目推荐-基于springboot+vue技术的二手车交易管理系统的设计与实现基于SpringBoot的二手车交易平台设计与实现【附源码+文档,调试定制服务】
  • springboot-vue企业会议交换机设备维修批量运维管理系统 vue没论文py09
  • vue基于python的物业维修服务预约平台_g310h596(pycharm django flask)
  • 数据库介绍
  • Dubbo分组(Group)使用指南:建立服务接口的多版本管理与环境隔离
  • Java计算机毕设之基于springBool+Vue美食分享平台的设计与实现基于SpringBoot + Vue的美食网站系统(完整前后端代码+说明文档+LW,调试定制等)
  • 深入解析:Elastic 线下 Meetup 将于 2026 年 1 月 10 号下午在北京举行
  • 2025最新!研究生必备8个AI论文平台:开题报告与文献综述全测评
  • vue基于python的理发店会员管理系统设计与实现_98y5iv88(pycharm django flask)
  • Java毕设项目推荐-基于 Java+Spring Boot 的停车场管理系统基于Java的停车场管理系统【附源码+文档,调试定制服务】
  • 【毕业设计】基于Java的停车场管理系统(源码+文档+远程调试,全bao定制等)
  • 滑动窗口最大值:你以为是数组题,其实是在考“思维是否在线”
  • Java毕设项目:基于springboot的户外救援系统(源码+文档,讲解、调试运行,定制等)
  • 12/24第四章
  • vue基于python的人才招聘系统_y9jyn56q(pycharm django flask)
  • 12.24 - 螺旋矩阵 指针和引用的区别
  • 【课程设计/毕业设计】基于java的智能停车场管理系统基于Java的停车场管理系统【附源码、数据库、万字文档】
  • springboot-vue基于Python可视化的学习做题答题统计系统的设计与实现vue
  • Java毕设项目推荐-基于springBool+Vue美食分享平台的设计与实现基于网络平台的美食分享【附源码+文档,调试定制服务】
  • vue基于python的企业人事绩效考核综合管理系统_z006916a(pycharm django flask)
  • 事后诸葛亮会议报告 - Nyanya-
  • 白嫖党福音:Coze 双旗舰模型限时免费!接入 AIPing 打造你的专属 C++ 后端分析专家
  • springboot-vue基于Python的高校学生成绩分析vue 论文