该篇是FPGA数字信号处理的第15篇,选题为多速率信号处理系统中用到的多速率FIR滤波器。本文将简单介绍多速率信号处理系统的基本概念,以及使用Quartus和Vivado的IP核设计多速率FIR滤波器的方法。


多速率信号处理

这个概念是相对于单速率(Single Rate)信号处理而言的。单速率是指整个信号处理流程中只有一种数据速率;多速率是指系统中存在多个数据速率。使用多速率信号处理可以节省存储空间、减少通信数据量、减少运算量、减轻设计难度。

比如在DDC(数字下变频)系统中,前级需要很高的采样率fs确保ADC采集到信号的信噪比;而在去载波并提取出低频的基带信号后,信号有效带宽已经很小,此时可以满足要求的采样率也远远低于fs,如果不进行数据速率转换的处理,会造成许多资源的浪费和设计上的困难(详情参考“FPGA综合系统设计(七):基于DDC的两路信号相位差检测: https://blog.csdn.net/FPGADesigner/article/details/80785174”)。

一个简单的多速率信号处理系统框图如下所示:

多速率信号处理主要包括数据速率的转换LPF的设计两个过程。数据速率的转换包括抽取(Decimation,降低采样率)和内插(interpolation,提高采样率)。抽取/内插时应保证信号的有效频带内没有频谱混叠,因此需要完成LPF的设计,常用的有多速率FIR滤波器、CIC滤波器、HB滤波器

多速率FIR滤波器其实已经在上面链接中的设计用到过,本文再结合概念单独总结一下。后面的文章将介绍CIC滤波器和HB滤波器的设计。


抽取与内插

当需要降低采样率时,输入信号数据每隔D-1个取一个,取出的数据依次排序,这个过程称作D倍抽取,采样率变为原来的1/D。但是我们需要确保抽取之后的采样率仍然可以满足Nyquist采样定理,否则会造成频谱的混叠。当然由于ADC的转换也会在整个频段内引入白噪声,因此在抽取前还是需要加入抗混叠滤波器。如下图所示:

当需要提高采样率时,在两个相邻的数据之间插入I-1个零值,再进行低通滤波,这个过程称作I倍内插,采样率变为原来的I倍。只要LPF的通带为信号的有效带宽,即使插值时只插入零值点(没有插入采样值的点),也可以达到I倍内插的效果。经过插值后的信号由DAC输出会引入更小的高频噪声。如下图所示:

上面抽取和内插实现的都是整数倍数据速率的转换。而实际设计中遇到的更多不会是整数倍关系。可以使用先内插、再抽取的方式完成采样率为有理数比值的数据速率转换,且可以共用一个LPF,截止频率选取二者的最小带宽即可。如下图所示:


MATLAB设计

MATLAB中的语法可以很简单的实现抽取和插值操作。抽取过程如下:

t = 0 : 1 / Fs : 0.5;
c = 2 * pi * f * t;
si=sin(c);    %产生正弦波
D=8;       %抽取倍数
d2 = si(1 : D : length(t));  %抽取

插值过程如下:

t = 0 : 1/Fs : 0.5;
c = 2 * pi * f * t;
si = sin(c);     %产生正弦波
I=8;         %内插倍数
Isi = zeros(1, length(si)*I); %先构造全0序列
Isi(1 : I : length(Isi)) = si;  %将源信号插入

滤波器的设计不再赘述。


FPGA设计

Quartus和Vivado的FIR IP核都可以设置为多速率FIR模式,完成数据速率的转换工作。比如在上文链接内的设计中,ADC需要以100MHz的速率采集20MHz的信号,通过DDC解调后基带信号频率仅有500kHz。将FIR设置为10倍抽取模式,采样率降为10MHz,足以完成接下来的处理。

Quartus中以FIR Compiler IP核为例:

右上角的Rate Specification即为设置内插或抽取,Factor表示抽取和内插 的倍数。设置好后,在右下角的Throughput中可以看到输入数据速率和输出数据速率。此处设置为了10倍抽取,则每10个时钟才会输出一个有效数据,相当于采样率降低了10倍。

Vivado中以FIR Compiler IP核的7.2版本为例:

在Filter Options标签下,“Filter Type”可以设置为抽取或内插模式,并设置对应的倍数Decimation Rate Value和Interpolation Rate Value。在Channel Specification标签下设置好输入采样速率和时钟频率后,可以看到输入数据速率和输出数据速率(这里设置了10倍抽取)。

此外Vivado的FIR IP核还提供了非整数倍抽取/内插的功能,将“Rate Change Type”修改为“Fixed Fractional”,即可分别设置插值倍数和抽取倍数,组合为一个值为有理数的倍数,如下图所示:

可以看出多速率FIR滤波器必须工作在很高的频率上(即数据转换速率前后的两个采样率中更大的那个速率),才能完成数据速率转换的工作。而FIR通常会使用大量的乘法器,因此具有占用资源多的缺点。与之相比,CIC滤波器和HB滤波器在结构和性能上更优良,将在后面的文章中介绍。

FPGA数字信号处理(十五)多速率FIR滤波器相关推荐

  1. FPGA数字信号处理(二)并行FIR滤波器Verilog设计

    该篇是FPGA数字信号处理的第二篇,选题为DSP系统中极其常用的FIR滤波器.本文将简单介绍FIR滤波器的原理,详细介绍使用Verilog HDL设计并行FIR滤波器的流程和方法.接下来几篇会介绍串行 ...

  2. FPGA数字信号处理(四)Quartus FIR IP核实现

    该篇是FPGA数字信号处理的第四篇,选题为DSP系统中极其常用的FIR滤波器.本文将在前两篇的基础上,继续介绍在Quartus开发环境下使用Altera(或者叫Intel)提供的FIR IP核进行FI ...

  3. FPGA数字信号处理(三)串行FIR滤波器Verilog设计

    该篇是FPGA数字信号处理的第三篇,选题为DSP系统中极其常用的FIR滤波器.本文将在上一篇"FPGA数字信号处理(二)并行FIR滤波器Verilog设计" https://blo ...

  4. FPGA数字信号处理(十一)ASK解调技术

    上一篇介绍了数字通信系统中ASK调制技术的FPGA实现.调制信号经过DAC.可选的带通滤波器.功率放大器.天线发送出去后,在接收端收到ASK信号后需要对其解调,提取出包含的信息(基带信号).无论在哪种 ...

  5. FPGADesigner《FPGA数字信号处理系列》目录与传送门

    FPGA数字信号处理(1)数字混频(NCO与DDS的使用): https://blog.csdn.net/fpgadesigner/article/details/80512067 FPGA数字信号处 ...

  6. FPGA数字信号处理(六)直接型IIR滤波器Verilog设计

    该篇是FPGA数字信号处理的第六篇,2-5篇介绍了DSP系统中极其常用的FIR滤波器.本文将简单介绍另一种数字滤波器--IIR滤波器的原理,详细介绍使用Verilog HDL设计直接型IIR滤波器的方 ...

  7. FPGA数字信号处理(十六)单级CIC滤波器Verilog设计

    该篇是FPGA数字信号处理的第16篇,选题为多速率信号处理系统中常用的CIC滤波器.本文将详细介绍使用Verilog HDL设计单级CIC滤波器的方法.接下来几篇会介绍多级CIC滤波器的Verilog ...

  8. FPGA数字信号处理(十八)Quartus CIC IP核实现

    该篇是FPGA数字信号处理的第18篇,题接上篇,本文详细介绍使用Quartus自带的CIC IP核进行设计的方法.下一篇会介绍使用Vivado的IP核设计CIC的方法. IP核概述 由于版本的关系,Q ...

  9. 数字信号处理第五次试验:FIR数字滤波器设计与软件实现

    数字信号处理第五次试验:FIR数字滤波器设计与软件实现 前言 一.实验目的 二.实验原理与方法 三.实验环境 四.实验内容及步骤 五.实验结果截图(含分析) 六.思考题 前言 为了帮助同学们完成痛苦的 ...

最新文章

  1. python的沙盒环境virtualenv(二)--简单使用
  2. 10个非常有趣的Linux命令
  3. eos和以太坊有什么关系_以太坊 2.0是什么?
  4. 更改windows2003最大连接数的方法
  5. html5包含inc文件,HTML中include file标签的用法
  6. 【微信网页直接下载app】微信跳转-微信浏览器中直接唤起本地浏览器和App
  7. 三、关于网页布局你该知道这些!(布局总结:标准流、浮动、定位)
  8. 已解决:TeamViewer使用的设备数量上限
  9. Linux环境下如何编译C++程序
  10. txt文件转为excel文件
  11. ping 可以ping通,但是dns无法解析,导致ie无法上网问题的解决办法!---winsock2问题[转贴]...
  12. 超硬核十万字!全网最全 数据结构 代码,随便秒杀老师/面试官,我说的
  13. 大学抢课python脚本_用彪悍的Python写了一个自动选课的脚本 | 学步园
  14. Chrome浏览器书签同步插件floccus与坚果云的协同使用方法
  15. python 3d绘图kmeans_使用Python matplotlib绘制3D多边形!
  16. 【软件测试面试】性能测试常问面试题?不备这些真不敢去面了...
  17. 中链云&神算云 全球发布暨表彰盛典在深顺利召开
  18. 【Git版本控制】Git基础入门和分支管理
  19. 远程连接windows 2012 是报出“出现身份验证错误,要求的函数不受支持”解决方法”
  20. CRC32的几种计算方法

热门文章

  1. jeecg-boot:Form表单
  2. JavaWeb项目火车订票管理系统
  3. android进阶知识总结,Android进阶学习有哪些知识点
  4. gb28181录制回放--invite信令流程
  5. 时序数据库DolphinDB 在台湾永丰金证券的应用
  6. 专访!牛磨王之父谈耐磨界先锋——牛磨王抗磨网 | “绿多多”绿色资产
  7. java 腾讯地图api,Class:覆盖物/Marker - 腾讯地图API
  8. OB(OceanBase)数据库相关知识
  9. android悬浮窗 tab,Android WindowManager悬浮窗
  10. conda 命令异常(一)