0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FIR数字滤波器的设计及验证方案

454398 来源:MYMINIEYE 作者:MYMINIEYE 2020-11-08 16:31 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一 .滤波器介绍

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

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输出的数据,发现也是一致的,相减之后为零,验证了滤波器的正确性。

编辑:hfy
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1655

    文章

    22287

    浏览量

    630317
  • 滤波器
    +关注

    关注

    162

    文章

    8355

    浏览量

    184768
  • fir滤波器
    +关注

    关注

    1

    文章

    97

    浏览量

    19627
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    深入解析AMC1210:适用于电机控制的多功能数字滤波器

      在电机控制应用领域,精确的电流测量和位置解码至关重要。TI推出的AMC1210数字滤波器,为这一领域提供了强大而灵活的解决方案。本文将深入剖析AMC1210的特性、工作原理、接口模式以及在
    的头像 发表于 11-29 14:03 1632次阅读
    深入解析AMC1210:适用于电机控制的多功能<b class='flag-5'>数字滤波器</b>

    ADS127L21 技术文档总结

    1365kSPS。该器件提供了交流性能和直流精度的完美组合,功耗低。 可编程无限和有限脉冲响应(IIR 和 FIR数字滤波器允许自定义滤波器配置文件,例如 A 加权补偿和频率陷波滤波
    的头像 发表于 10-29 09:27 317次阅读
    ADS127L21 技术文档总结

    ADS127L21B 产品技术文档总结

    该ADS127L21B是一款高精度、24位、Δ-Σ(Δσ)、模数转换(ADC),具有可编程数字滤波器。该数字滤波器使用宽带滤波器的数据速率高达 512kSPS,使用低延迟
    的头像 发表于 10-24 09:56 418次阅读
    ADS127L21B 产品技术文档总结

    德州仪器ADS127L21高精度24位ΔΣ模数转换技术解析

    1365kSPS。该器件将交流性能和直流精度完美结合,功耗低。可编程无限和有限脉冲响应(IIR和FIR数字滤波器支持自定义滤波器配置文件,例如A加权补偿和频率凹槽滤波器。宽带或低延迟
    的头像 发表于 08-20 15:40 728次阅读
    德州仪器ADS127L21高精度24位ΔΣ模数转换<b class='flag-5'>器</b>技术解析

    STM32单片机片上数字滤波器操作文档 快速入门数字滤波器在单片机上的实现

    这个文档,是为了帮助大家快速入门数字滤波器在单片机上的实现。
    的头像 发表于 06-23 16:53 1340次阅读
    STM32单片机片上<b class='flag-5'>数字滤波器</b>操作文档 快速入门<b class='flag-5'>数字滤波器</b>在单片机上的实现

    常用的数字滤波器算法及其特性

    常用的软件滤波器有限幅滤波法、中位值滤波法、算数平均滤波法、递推平均滤波法、中位值平均滤波法、限
    的头像 发表于 06-18 09:04 791次阅读

    基于FPGA的FIR数字滤波器设计

    在现代通信信号处理领域中,随着各种精密计算和快速计算的发展对信号处理的实时性、快速性的要求越来越高。以往的模拟滤波器无法克服电压漂移、温度漂移和噪声等问题,从而带来了许多误差和不稳定因素。而数字滤波器具有稳定性高、精度高、设计灵活、实现方便等突出优点。
    的头像 发表于 03-06 12:31 1766次阅读
    基于FPGA的<b class='flag-5'>FIR</b><b class='flag-5'>数字滤波器</b>设计

    模拟电路在数字滤波器中的作用是什么?

    模拟电路在数字滤波器之前
    发表于 02-12 08:32

    ADS1114内部有一个数字滤波器,其带宽大概只有2Hz,用CD4051在每个通道之间切换,这样合理吗?

    一个系统中有12 路PT100测量温度,打算用一片ADS1114做数据采集,前级用CD4051在12个通道之间进行切换。一秒钟切换15次。 现在有个问题,ADS1114内部有一个数字滤波器,其带宽大概只有2Hz,我用CD4051在每个通道之间切换,这样合理吗?这个滤波器
    发表于 02-10 08:28

    开年干货来袭:PLB实现滤波器

    概述HPMicroMCU的TRIGMUX具有滤波功能,为部分输入信号提供了数字滤波器,支持滤刺模式、延时模式、滤峰模式和滤谷模式。但这滤波器仅针对外部从引脚的输入信号,不能对内部的信号进行滤波
    的头像 发表于 02-08 13:38 949次阅读
    开年干货来袭:PLB实现<b class='flag-5'>滤波器</b>

    ADS1282使用HPF后,最终得到的噪声性能反而变差,为什么?

    最近使用ADS1282器件出现一个个人认为很奇怪的问题,还望专业人员指教! 1282内部集成有后端数字滤波器,成三级级联结构:SINC+FIR+IIR,其中IIR为高通滤波器(HPF),用以滤除
    发表于 02-07 07:04

    ADS1293内部的数字滤波器是怎么样的作用?

    请问ADS1293内部的数字滤波器是怎么样的作用? 从DS中我看到该AFE有数字滤波器,请问它是心电算法中常见的低通滤波器吗?效果如何?可以配置吗
    发表于 01-20 07:37

    求助,关于ads1298数字滤波器的疑问求解

    Medical Development Kit (MDK) with the ADS1298 ECG-FE》 在该文档中提到了三个滤波器: 1:Anti-aliasing filter(低通抗混叠
    发表于 12-27 06:33

    滤波器的一些常识

    滤波器简介:滤波器是一种用于信号处理的设备或系统,用于改变信号的频率特性,以实现信号的滤波、增强、去噪或降噪等功能。滤波器根据其工作方式可以分为数字
    的头像 发表于 12-18 17:05 1508次阅读
    <b class='flag-5'>滤波器</b>的一些常识

    ADS1299片上有带通滤波器吗?

    通的话,低采样率下夹杂了高频噪声采样之后不是会发生频谱混叠吗?这样即使进行数字滤波也无效吧? 另外我看到ADS1299有个插值滤波器,有什么用呢?
    发表于 12-13 08:07