一 .滤波器介绍

滤波器是一种用来减少,消除干扰的电器部件,有对特定频率的频点或该频点以外的频率信号进行有效滤除,从而实现消除干扰、获取特定频率信号的功能。数字滤波器相比模拟滤波器,有着更高的精度、信噪比、无可比拟的可靠性。

FIR,IIR是数字滤波器中最常见的两种滤波器。FIR滤波器是有限冲击响应,最主要特点是没有反馈回路,故不存在不稳定的问题,很容易做到严格的线性相位特性,另外设计方式是线性的,硬件容易实现,对于抽取和插入,结构简单,很容易得到高速流水线的设计,有定义明确的量化噪声,并且有较低的系数和算法四舍五入误差预算,但是其高滤波器长度的实现需要大量的工作量及资源;IIR滤波器是无限冲击响应,最主要的特点是可以用较低的阶数,获得高的选择性,所用的存储单元少,计算量小,效率高。但是这样的效率是以非线性相位为代价的,选择性越好,相位非线性越严重。本文以FIR为例介绍数字滤波器的设计及验证。

二.FIR滤波器设计

采用matlab的Filter Design 来完成对FIR滤波器的设计,打开matlab,在命令行输入filterDesigner,进入到设计页面,如下

对滤波器的设计主要涉及三个点:通带,阻带,过渡带。

主要的参数有以下5个:

Fpass:通带上限截至频率,Apass:带内平坦度;

Fstop:阻带下限截至频率,Astop:带外抑制幅度;

Fs:数据率

输入数据的速率为9.14MHz,通带上限截止频率为2M,由于考虑到镜像干扰,阻带截至频率设为2.2M,阶数选择128阶,滤波器阶数可以根据需要设置,也可以设置带内平坦度和带外抑制幅度,来选择所需最小阶数,达到自己需要的精度即可。设置完成之后,如下:

滤波器设计完成之后需要对滤波器的系数进行定点量化,选择按钮3,定义16位的数据位宽,其中15位为小数。如下:

点击Filter Design菜单栏的Targets选项下拉菜单的Generate C Header和XILINX Coefficient(.COE) File,分别导出的是C的头文件和.coe文件(滤波器系数文件),C的头文件如下

Coe文件为:

这里选择产生Generate C Header,产生滤波器系数,此处没有选择coe文件,是因为当vivado IP核使用coe方式导入时,vivado不能区分小数位。

三.vivado FIR IP核介绍

1.设置滤波器的属性:打开vivado IP核,直接填入滤波器的系数,此处系数需要量化为小数,左边为滤波器的增益,和matlab一致,如下:

滤波器的类型包括单速率(Single Rate,即数据输出与输入速率相同),抽取(Decimation)和插值(Interpolation)应用于多速率信号处理系统,此外还支持希尔伯特变换(Hilbert)模式。抽取型一般多用于数字前端下变频抽取样值降低AD采样速率,插值型用于常用于提高采样速率。由于需要对AD数据进行抽取滤波,这里选择抽取类型,抽取的倍数为2倍。

2.设置FIR滤波器的通道,由于只使用一个通道,因此交织通道序列(Channel Sequence)选择Basic,通道数(Number of Channels)为1;Hardware Oversampling Specification中设置过采样模式,选择Input Sample Period,即输入采样周期,也可以通过输入采样频率和时钟频率来设置,设置如下:

3.滤波器量化设置

填入滤波器系数之后,选择量化的位数,输入的数据位宽为16,小数位数为15,如果全精度输出,输出位宽为33,对后续的处理很不方便,输出也需要进行相应的截尾,因此设置为:

4.FIR滤波器在FPGA上实现资源选取的情况,一般采用系统默认即可。

5.对外输入和对外输入接口情况,这里只添加复位信号,可以根据自己的实际需求,添加信号。

6.Summary是对FIR滤波器设计的总结,所使用的类型功能,滤波器阶数等,最后点击生成FIR IP核。

四.FIR 滤波器实现

1.C模型使用

Vivado提供了FIR IP核的C仿真模型,但是不能直接再matlab上运行,需要搭建仿真环境,根据自己使用的matlab选择不同的版本,具体搭建参考https://www.cnblogs.com/qiantuo1234/p/7284384.html。搭建完成之后在matlab命令窗口输入mex-setup,出现以下提示表示安装成功

然后找到IP核C模型,在vivado工程FIR IP核的目录下的cmodel的文件夹,FIR_demo.srcs\sources_1\ip\fir_compiler_0\cmodel,其中有两个文件,lin64是linux版本的,nt64是windows版本的,选择nt64解压。

matlab打开解压的文件夹,输入run make_fir_compiler_v7_2_mex,出现以下表示运行成功。

最后要调用的文件是run_fir_compiler_v7_2_mex.m,这个文件可以作为参考使用,部分内容为:

作如下修改:

其中FIR参数设置要和vivado中的IP核配置完全相同,否则会出现比对数据不一致的情况,具体参数配置见下表

各类型对应的数值选择

2.Modelsim 仿真

仿真时需要注意,采用的抽取类型,数据速率和时钟速率不一样,每隔8个时钟周期采一个数据,然后输入到FIR IP核,输出是每隔16个时钟周期输出一个数据,输出延迟可在FIR IP核Summary界面得知,模块时序如下:

3.数据对比

滤波器的截至频率为2MHz,用matlab产生一个1MHz和3MHz的混合信号,分别输入C仿真模型和modelsim进行仿真,得到的结果进行对比如下:

可以清楚的看到输出的结果是一致的,通过比较matlab和modelsim输出的数据,发现也是一致的,相减之后为零,验证了滤波器的正确性。

❤-MYMINIEYE2015-编辑 | GUOGUO|用温暖和感动为你讲述MYMINIEYE开发板故事|投稿邮箱 | mill@myminieye.com

fir fpga 不同截止频率_【通信篇】带你认识FIR滤波器相关推荐

  1. fir fpga 不同截止频率_一种新的FIR滤波器系数量化方法

    相对于模拟滤波器,数字滤波器具有高精度.高可靠性.可编程改变滤波特性.便于集成等一系列优点,并且理论上可实现近似理想频率特性的滤波性能.经典的数字滤波器主要包括有限脉冲响应(Finite Impuls ...

  2. fir fpga 不同截止频率_学习FPGA将来的出路在哪里?

    1. 在国内 FPGA 最大的应用市场还是通信类,几大厂商的重要收入来源还是华为.中兴.阿朗等,基本上可以直接呼叫原厂 AE 上门支持那种.算法类(如各种 FIR).接口类(如 CPRI.Interl ...

  3. fir fpga 不同截止频率_用MATLAB设计FIR滤波器的方法

    用MATLAB设计FIR滤波器的方法 摘  要 介绍了利用MATLAB信号处理工具箱进行FIR滤波器设计的三种方法:程序设计法.FDATool设计法和SPTool设计法,给出了详细的设计步骤,并将设计 ...

  4. altera fpga 型号说明_基于FPGA的USB2.0接口通信

    欢迎FPGA工程师加入官方微信技术群 点击蓝字关注我们FPGA之家-中国最好最大的FPGA纯工程师社群 概述 本文主要介绍一种基于FPGA的FT232H接口通信开发方案.传统的USB通信开发对工程人员 ...

  5. jsp给前端注入值失败_基于 qiankun 的微前端最佳实践(图文并茂) 应用间通信篇...

    引言 大家好~ 本文是基于 qiankun 的微前端最佳实践系列文章之 应用间通信篇,本文将分享在 qiankun 中如何进行应用间通信. 在开始介绍 qiankun 的应用通信之前,我们需要先了解微 ...

  6. fir1截止频率计算_数字信号处理 实验五:FIR数字滤波器设计与软件实现

    10.5 实验五:FIR数字滤波器设计与软件实现 10.5.1 实验指导 1.实验目的 (1)掌握用窗函数法设计FIR数字滤波器的原理和方法. (2)掌握用等波纹最佳逼近法设计FIR数字滤波器的原理和 ...

  7. 学习笔记:SpringCloud 微服务技术栈_实用篇①_基础知识

    若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 前言 学习视频链接 SpringCloud + RabbitMQ + Docker + Redis + 搜 ...

  8. 车载以太网之DoIP协议_第一篇

    车载以太网之DoIP协议_第一篇 1.DoIP含义 1.1 DoIP使用场景 1.2 DoIP在Autosar中的位置 2.以太网协议 2.1 物理层与数据链路层 2.2 网络层与传输层 2.3 Do ...

  9. 学习笔记:SpringCloud 微服务技术栈_高级篇⑤_可靠消息服务

    若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 前言 学习视频链接 SpringCloud + RabbitMQ + Docker + Redis + 搜 ...

最新文章

  1. [蓝桥杯2016初赛]卡片换位-bfs
  2. 2020年mysql中级课程一天一小时
  3. 登录服务器用户账户限制,当用户有登录到的限制时,远程桌面登录报错的解决...
  4. Decrease (Judge ver.)
  5. 用条件运算符编写程序判断一个人的体重是否为标准体重
  6. Javascript高级程序设计读书笔记(第三章)
  7. Flex笔记_格式化数据
  8. web网站整体变灰色仅仅需要两行代码
  9. 科比球衣退役仪式 | 科比演讲
  10. 如何实现一个漂亮的微信小程序朋友圈、表白墙、校内圈(小程序篇,附源码)
  11. java键盘监听延迟_解决JAVA键盘监听的延迟现象以及八个方向的运动
  12. RNA-seq流程报告
  13. Android M 动态权限获取
  14. 开发错题集(陆续更新...)
  15. 竞价排名还会受到“魏则西“的挑战吗?
  16. ABBYY FineReader双十一活动跟进
  17. 学生学籍管理系统jsp源代码 MySql_jsp学籍管理系统——mysql+java web
  18. python什么是字符串_什么是Python的字符串
  19. vbs 对excel的操作 删除、修改单元格,设置字体、背景色 .
  20. lg-1 x 怎么算_怎么从基金经理的持仓预估我们的收益(一)

热门文章

  1. linux基础-延时命令:sleep
  2. 三、垃圾收集之判断对象是否存活
  3. linux-Tcp IP协议栈源码阅读笔记
  4. 文本比较算法Ⅶ——线性空间求最长公共子序列的Nakatsu算法
  5. 史上最昂贵的 Javascript 代码(转)
  6. 继续- 管理百人研发团队的烦恼(下)
  7. linux dmesg 格式化时间
  8. linux docker run 设置环境变量
  9. mysql max_allowed_packet 参数 限制接受的数据包大小
  10. centos7 locale 区域语言设置