CIC滤波器

CIC滤波器是用不同抽样频率进行数字信号处理的一种FIR滤波器。主要用于数字信号的抽取和内插。

CIC滤波器由一对或多对积分-梳状滤波器组成,在抽取CIC中,输入信号依次经过积分、降采样,以及与积分环节数目相同的梳状滤波器。在内插CIC中,输入信号依次经过梳状滤波器,升采样,以及与梳状数目相同的积分环节。

什么是多采样率数字滤波器?

一般的滤波器都只有一种采样频率,有些情况下,系统内部需要不同采样频率的数字信号,这样就需要使用CIC滤波器对信号进行上采样或者下采样,进而获得相应采样率下的信号。

基于初始采样频率f1,第二采样频率要么是高于f1,要么是低于f1。前者实现的原理是内插,后者是抽取。

抽取

含义:一个有用的正弦波模拟信号经采样频率为f1的抽样信号抽样后得到了数字信号,很明显这个数字信号序列是在f1频率下得到的,现在,假如我隔几个点抽取一个信号,比如就是5吧,我隔5个点抽取一个信号,是不是就是相当于我采用了1/5倍f1的采样频率对模拟信号进行采样了?所以,抽取的过程就是降低抽样率的过程,但是我们知道,这是在时域的抽样,时域的抽样等于信号在频域波形的周期延拓,周期就是采样频率,所以,为了避免在频域发生频谱混叠,抽样定理也是我们要考虑的因素(通常下级需要滤波器滤出周期性频率)。

抽取造成的问题之一就是频谱的混叠。因为时域的抽样等于信号在频域波形的周期延拓,如果下采样倍数太小,就会造成频谱在频域混叠。根据采样定理,

当采样频率fs是信号(最高)频率f0的2倍时,正好不发生频谱混叠。

下采样时也要遵循相同的定理,即下采样后的采样频率fs/M,至少是信号频率f0的2倍。

下图是对信号进行f1抽样得到的频谱

故在下采样前需要对信号进行抗混叠滤波,其效果就是滤出频谱中 1/2 * (F1/M)之后的频率。


CIC

级联积分梳妆滤波器(Cascade Intergrator Comb),将积分器和梳妆滤波器级联而得。

Need To Know:

  1. 低通滤波特性
  2. 滤波系数为1,无需对系数进行存储,节省存储单元,无需乘法器
  3. 结构规则,设置抽取/插值因子时候不改变滤波器整体结构。
  4. 输入信号通过CIC滤波器后会引起位增长问题,工程上要适当截位。

从上图可以看出:

  • 在内插系统中,CIC滤波器的级联方式是:积分器+抽样因子+梳状滤波器
  • 积分器结构:输出延迟y(n-1)后与输入x(n)相加
  • 梳状滤波器器结构:输入延迟x(n-1)后与输入x(n)相减

积分器

积分器是一个具有单极点的、同一反馈系数的IIR滤波器,积分器在时域上的表达式是:

积分器的结构如下图所示:

梳状滤波器

梳状滤波器在高采样率fs、抽取因子为R的情况下,是一个奇异的FIR滤波器,在时域上的表达式:

其中,R,M为整数,决定了梳妆滤波器的延迟长度。

基本梳状滤波器的结构是:

FPGA实现CIC滤波器

下图所示一个N级抽取系统的结构图(抽样倍数为D):

参考代码

`timescale 1ns/1nsmodule CIC #(parameter  width = 12 ) (input  wire                 clk,input  wire                 rst,input  wire        [ 15:0 ] decimation_ratio,  //抽取因子input     wire signed [ 7:0 ]  d_in,output    reg signed   [ 7:0 ]  d_out,output  reg                   d_clk             //输出下采样后的时钟
) ;reg signed[ width-1:0 ] d_tmp,d_d_tmp ;// Comb stage registers-梳妆滤波器reg signed[ width-1:0 ] d6,d_d6 ;reg signed[ width-1:0 ] d7,d_d7 ;reg signed[ width-1:0 ] d8,d_d8 ;reg signed[ width-1:0 ] d9,d_d9 ;reg signed[ width-1:0 ] d10 ;reg[ 15:0 ] count ; //抽取计数器reg v_comb ;  // Valid signal for comb section running at output ratereg d_clk_tmp ;// Integrator stage registers-积分器//CIC级联数目为5reg signed[ width-1:0 ] d1 ;reg signed[ width-1:0 ] d2 ;reg signed[ width-1:0 ] d3 ;reg signed[ width-1:0 ] d4 ;reg signed[ width-1:0 ] d5 ;always @(posedge clk) beginif (rst) begind1    <= 0 ;d2    <= 0 ;d3    <= 0 ;d4    <= 0 ;d5    <= 0 ;count <= 0 ;endelse begin// Integrator section-y(n) = x(n) + y(n-1)d1 <= d_in + d1 ;d2 <= d1 + d2 ;d3 <= d2 + d3 ;d4 <= d3 + d4 ;d5 <= d4 + d5 ;// Decimation-抽取if (count == decimation_ratio - 1) begincount     <= 16'b0 ;d_tmp     <= d5 ;d_clk_tmp <= 1'b1 ;v_comb    <= 1'b1 ;endelse if (count == decimation_ratio >> 1) begind_clk_tmp <= 1'b0 ;count     <= count + 16'd1 ;v_comb    <= 1'b0 ;endelse begincount  <= count + 16'd1 ;v_comb <= 1'b0 ;endendendalways @(posedge clk) begin  // Comb section running at output rated_clk <= d_clk_tmp ;if (rst) begind6    <= 0 ;d7    <= 0 ;d8    <= 0 ;d9    <= 0 ;d10   <= 0 ;d_d6  <= 0 ;d_d7  <= 0 ;d_d8  <= 0 ;d_d9  <= 0 ;d_out <= 8'b0 ;endelse beginif (v_comb) begin   //v_comb set 1 when count == decimation_ratio// Comb section-y(n) = x(n) - x(n-1)d_d_tmp <= d_tmp ;d6      <= d_tmp - d_d_tmp ;d_d6    <= d6 ;d7      <= d6 - d_d6 ;d_d7    <= d7 ;d8      <= d7 - d_d7 ;d_d8    <= d8 ;d9      <= d8 - d_d8 ;d_d9    <= d9 ;d10     <= d9 - d_d9 ;d_out   <= d10 >>> (width - 8) ;endendend
endmodule

CIC滤波器和FPGA实现相关推荐

  1. CIC滤波器的Matlab仿真与FPGA实现

    CIC滤波器 1.单级CIC滤波器: CIC滤波器的冲激响应为: h(n)=1,[0,M-1] h(n)=0,其他 可见CIC滤波器在时域上是一个矩形窗,是一个累加器(积分器). 用MATLAB仿真不 ...

  2. 【CIC滤波器】基于MATLAB/FPGA的数字CIC滤波器的设计

    FPGA代码: module down(i_clk,//输入时钟i_rst,//输入复位信号i_M, //抽取值i_data,//输入信号o_data,//输出信号r_clk);input i_clk ...

  3. m基于FPGA的积分梳状CIC滤波器verilog设计

    目录 1.算法描述 2.仿真效果预览 3.verilog核心程序 4.完整FPGA 1.算法描述 积分梳状滤波器,是指该滤波器的冲激响应具有如下形式: 其物理框图如图所示: 可见,CIC滤波器是由两部 ...

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

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

  5. m基于FPGA和MATLAB的数字CIC滤波器设计和实现

    目录 1.算法概述 2.仿真效果预览 3.MATLAB/FPGA部分代码预览 4.完整MATLAB/FPGA程序 1.算法概述 CIC滤波器由一对或多对积分-梳状滤波器组成,在抽取CIC中,输入信号依 ...

  6. 基于FPGA的CIC滤波器设计(2)——以数字上下变频为例讲解

    多级CIC滤波器理论与设计 项目简述 多级CIC滤波器 多级CIC滤波器的抽取操作 多级CIC滤波器的内插操作 多级CIC滤波器的抽取的MATLAB实现 多级CIC滤波器的抽取的MATLAB结果 多级 ...

  7. 基于FPGA的多级CIC滤波器实现四倍抽取三

    基于FPGA的多级CIC滤波器实现四倍抽取三 原文链接:基于FPGA的多级CIC滤波器实现四倍抽取三 在<基于FPGA的多级CIC滤波器实现四倍抽取一>和<基于FPGA的多级CIC滤 ...

  8. 基于FPGA的多级CIC滤波器实现四倍抽取二

    基于FPGA的多级CIC滤波器实现四倍抽取二 在实现多级CIC滤波器前我们先来了解滑动平均滤波器.微分器.积分器以及梳状滤波器原理.CIC滤波器在通信信号处理中有着重要的应用. 上一篇在<基于F ...

  9. 基于FPGA的多级CIC滤波器实现四倍抽取一

    在实现多级CIC滤波器前我们先来了解滑动平均滤波器.微分器.积分器以及梳状滤波器原理.CIC滤波器在通信信号处理中有着重要的应用. 1滑动平均滤波器 图1 8权值滑动平均滤波器结构 滑动平均滤波器(M ...

最新文章

  1. 自走棋电脑版_2019年的爆款自走棋玩法,百花齐放过后,却身陷“变现烦恼”...
  2. Angular Universal 学习笔记 - 客户端渲染和服务器端渲染的区别
  3. python正十三边形_一起学python-opencv十三(直方图反向投影和模板匹配)
  4. Spring整合JDBC开发
  5. 《论文笔记》Collaborative Visual Inertial SLAM for Multiple Smart Phones
  6. Linux——如何打开或者安装g++
  7. 通用职责分配软件原则之5-控制器原则
  8. 收藏 | 12个神经网络可视化工具!
  9. vue实现一个简单的购物车功能
  10. 仿新浪邮件输入自动提示jQuery插件
  11. java 离散算法_用JAVA语言实现离散数学算法
  12. new一个对象的过程
  13. kettle 参数传递_kettle 存储过程 参数传递参数
  14. 爬虫:如何爬取国家行政区划代码
  15. VS2010/MFC编程入门之三十三(常用控件:标签控件Tab Control 下)
  16. 建立立方体求面积和体积并用两种判断方法判断两个立方体是否相等(键盘输入数据)
  17. ESXI 中的虚拟机导出到本地
  18. Altium Designer之多图纸设计
  19. Mac系统运行“exe”文件最简单的解决办法
  20. 二十、融会贯通之全流程操作

热门文章

  1. excel高级筛选怎么用_Excel筛选与高级筛选的15个应用技巧解读!
  2. 论文笔记—假名—Pseudonym Changing at Social Spots: An Effective Strategy for Location Privacy in VANETs
  3. 数据分析思维与方法总结
  4. DAB变换器的变频控制
  5. SharePoint 2013 CSOM 对象模型属性包
  6. 2022年 自编译最新稳定版 128M WNDR4300V1 Openwrt Lean 固件
  7. 微信7.0.16 for iOS测试版新增隐藏会话功能
  8. HackerRank Nested Lists
  9. vue项目读取显示pdf文件
  10. turbo编码原理以及matlab实现