精华内容
下载资源
问答
  • 第15章 数字滤波器结构 15.1 滤波器结构 15.2 直Ⅰ、Ⅱ型结构 15.3 直Ⅰ、Ⅱ型IIR滤波器的MATLAB相关函数 15.4 直Ⅰ、Ⅱ型结构的MATLAB实现 15.5 级联型结构 15.6 一阶、二阶子滤波器 15.7 一阶、二阶子滤波器的...
  • 第15章数字滤波器结构  15.1滤波器结构  15.2直Ⅰ、Ⅱ型结构  15.3直Ⅰ、Ⅱ型IIR滤波器的MATLAB相关函数  15.4直Ⅰ、Ⅱ型结构的MATLAB实现  15.5级联型结构  15.6一阶、二阶子滤波器  15.7一阶、二阶子滤波器...
  • 一、数字滤波器原理: 数字抽取滤波器是ΣΔADC(ΣΔAnolog-to-Digital Converter)的重要组成部为分,旨在从高速、低分辨率的调制信号中重构出高分辨率、奈奎斯特频率的信号。为节约硬件资源,同时满足通带纹波和...

    一、数字滤波器原理:

    数字抽取滤波器是ΣΔADC(ΣΔAnolog-to-Digital Converter)的重要组成部为分,旨在从高速、低分辨率的调制信号中重构出高分辨率、奈奎斯特频率的信号。为节约硬件资源,同时满足通带纹波和阻带衰减等要求,数字抽取滤波器一般采用 CIC 滤波器、CIC 补偿滤波器、半带滤波器三级级联方式构成。

    要实现16倍和32倍的下采样,通常采用CIC或半带滤波器来实现。CIC滤波器能够实现较大的下采样率,但其频率响应在通带中的衰减较大,不能满足应用需求。半带滤波器具有较好的通带平坦特性,但考虑到面积和功耗,通常只能实现2倍下采样。为了解决降采样率高和通带内信号平坦等问题,本文将CIC和半带滤波器进行级联,既能达到较高的下采样率,又能满足通带的信号平坦度。为了充分利用CIC滤波器的降采样率高、结构简单等特性,可将CIC滤波器放在第一级。
    例如:
    在这里插入图片描述

    系数选取,参考论坛:https://www.ilovematlab.cn/thread-35677-1-1.html
    在这里插入图片描述

    Quartus官方CIC IP核使用手册+补偿FIR说明

    1、CIC Intel FPGA IP:用户指南
    https://www.intel.com/content/www/us/en/programmable/documentation/hco1421847945390.html#hco1421847931838
    2、使用CIC和FIR滤波器设计数字下转换系统
    https://www.intel.cn/content/www/cn/zh/programmable/support/support-resources/design-examples/intellectual-property/dsp/exm-digital-down-conv-cic-fir.html
    3、了解CIC补偿滤波器:(Pass Band Edge + Fs )
    https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/an/an455.pdf
    CIC补偿滤波器实用例子:

    注意:1 号链接中的 “CIC IP在项目目录中生成MATLAB脚本<variation_name> _fir_comp_coeff.m。您可以在MATLAB中运行此脚本以生成FIR系数,以提供适当的通带均衡。生成的系数保存在文本文件中,供FIR IP使用。”即

    MATLAB脚本需要以下参数来补偿FIR滤波器:

    L:FIR滤波器长度,与抽头数或系数数相同
    F S :抽取/内插之前的FIR滤波器采样率,单位为Hz
    F C:FIR滤波器截止频率,单位Hz
    B:如果系数以定点数写入,则系数位宽
    图11.  CIC和补偿滤波器响应

    相关信息
    AN455:了解CIC补偿滤波器(即3号链接
    学习补充:
    MATLAB脚本<variation_name> _fir_comp_coeff.m 的脚本在官方给出的压缩包在 2 号链接里面
    用Altera CIC MegaCore和FIR补偿滤波器设计数字下变频系统v7.1设计示例设计文件包括:
    o TDMDDC.mdl - DSP Builder设计文件o ciccomp.m - MATLAB脚本用于设计反sinc CIC补偿滤波器o cic.vhd封装文件以生成Altera CIC编译器IP coreo fir.vhd封装文件以生成Altera FIR编译器IP coreo o alt_avalonst_pfc_0.v 实例化包格式转换器块的封装文件o fdcoeffR4N8M1L110.txt - 预生成补偿FIR滤波器系数

    展开全文
  •  用FPGA实现抽取滤波器比较复杂,主要是因为在FPGA中缺乏实现乘法运算的有效结构,现在,FPGA中集成了硬件乘法器,使FPGA在数字信号处理方面有了长足的进步。本文介绍了一种采用Xilinx公司的XC2V1000实现FIR抽取...
  • 目前,抽取滤波器的实现方法有3种:单片通用数字滤波器集成电路、DSP和可编程逻辑器件。使用单片通用数字滤波器很方便,但字长和阶数的规格较少,不能完全满足实际需要。使用DSP虽然简单,但程序要顺序执行,执行...
  • FPGA的FIR抽取滤波器设计

    千次阅读 2014-10-20 21:27:44
    摘 要:本文介绍了FIR抽取滤波器的工作原理,重点阐述了用XC2V1000实现FIR抽取滤波器的方法,并给出了仿真波形和设计特点。 关键词:FIR抽取滤波器;流水线操作;FPGA  用FPGA实现抽取滤波器比较复杂,主要是因为在...

    摘 要:本文介绍了FIR抽取滤波器的工作原理,重点阐述了用XC2V1000实现FIR抽取滤波器的方法,并给出了仿真波形和设计特点。
    关键词:FIR抽取滤波器;流水线操作;FPGA

      用FPGA实现抽取滤波器比较复杂,主要是因为在FPGA中缺乏实现乘法运算的有效结构,现在,FPGA中集成了硬件乘法器,使FPGA在数字信号处理方面有了长足的进步。本文介绍了一种采用Xilinx公司的XC2V1000实现FIR抽取滤波器的设计方法。

    具体实现
    结构设计
    基于抽取滤波器的工作原理,本文采用XC2V1000实现了一个抽取率为2、具有线性相位的3阶FIR抽取滤波器,利用原理图和VHDL共同完成源文件设计。图1是抽取滤波器的顶层原理图。其中,clock是工作时钟,reset是复位信号,enable是输入数据有效信号,data_in(17:0)是输入数据,data_out(17:0)是输出数据,valid是输出数据有效信号。adder18是加法器模块,mult18是乘法器模块,acc36是累加器模块,signal_36to18是数据截位器模块,fir_controller是控制器模块。控制器定时向加法器、乘法器和累加器发送数据或控制信号,实现流水线操作。


    图1  抽取滤波器顶层原理图

    控制器

    控制器是抽取滤波器的核心模块,有两个功能:一是接收输入数据,二是向其它模块发送数据和控制信号。它根据加法器、乘法器和累加器的时序特性,有规律地向加法器发送抽头数据,向乘法器发送系数,向累加器发送控制信号,让加法器、乘法器和累加器在每个时钟周期都完成指定的任务,从而实现流水线操作。控制器用VHDL语言描述,用寄存器存放抽头和系数。  加法器  

    加法器的输入和输出都是18 bit,用VHDL语言描述实现。它有两个工作时钟的延迟,在输入数据准备好的情况下,第一个时钟得出相加结果,第二个时钟把相加结果锁存输出。

    乘法器

    乘法器为18 bit输入,36bit输出,用库元件MULT18X18S和36 bit锁存器实现。MULT18X18S是XC2V1000自带的18×18bit硬件乘法器,单个时钟就可完成乘法运算。36 bit锁存器工作于时钟的上升沿,用VHDL语言描述。乘法器(mult18)也有两个工作时钟的延时,在输入数据准备好的情况下,第一个时钟得出相乘结果,第二个时钟把相乘结果锁存输出。加法器和乘法器采用锁存输出的结构,虽然增加了一个工作时钟的延迟,但有利于抽取滤波器稳定的工作,提高可靠性。  

    累加器  

    36 bit累加器用于累加乘法器的输出,得出滤波结果。它有一个控制端口clr,当clr为高电平时,输出前一轮累加结果,并初始化,开始新一轮累加;当clr为低电平时,进行累加运算。累加器用VHDL语言描述。  

    数据截位器  

    数据截位器用VHDL语言描述,用于把累加器的36bit输出进行取舍处理,一般截掉数据低位部分,保留数据高位。为了对抽取滤波器进行功能仿真,这里截掉数据高18bit,保留数据低18bit。

    工作过程及功能仿真

    下面以抽取滤波器完成一次抽取滤波的全过程为例,说明抽取滤波器的工作过程。

    假设时钟1、时钟2、时钟3和时钟4控制器已接收了数据x(n-3)、x(n-2)、x(n-1)和x(n),那么:

    时钟5:控制器向加法器发送数据x(n)和x(n-3);

    时钟6:加法器进行x(n)+x(n-3)运算;控制器向加法器发送数据x(n-1)和x(n-2);

    时钟7:加法器进行x(n-1)+x(n-2)运算,输出x(n)+x(n-3)运算结果。控制器向乘法器发送系数h(0);

    时钟8:加法器输出x(n-1)+x(n-2)运算结果,乘法器进行h(0)[ x(n)+x(n-3)]运算,控制器向乘法器发送系数h(1);

    时钟9:乘法器进行h(1)[ x(n-1)+x(n-2)]运算,输出h(0)[ x(n)+x(n-3)]运算结果。控制器向累加器发送控制信号(clr为高电平);

    时钟10:乘法器输出h(1)[ x(n-1)+x(n-2)]运算结果。累加器初始化,开始累加操作。控制器向累加器发送控制信号(clr为低电平);

    时钟11:累加器进行累加运算:h(0)[ x(n)+x(n-3)]+ h(1)[x(n-1)+x(n-2)]。控制器向累加器发送控制信号(clr为高电平),控制器输出滤波数据有效信号(valid为高电平);

    时钟12:累加器输出h(0)[ x(n)+x(n-3)]+ h(1)[x(n-1)+x(n-2)] 累加结果,并初始化,开始新一轮累加操作。控制器输出滤波数据无效信号(valid为低电平)。  

    以上就是抽取滤波器完成一次抽取滤波的全过程。可见,从数据x(n)输入到滤波结果y(n) 输出需要8个工作时钟。如果控制器不停地向乘法器和加法器发送抽头、系数和控制信号,就会形成流水线操作,那么每过两个时钟,抽取滤波器就会输出一个滤波结果。

    两点注意事项

    (1)两个n位二进制数相加,其和至少需要n+1位二进制数才能正确表示。本设计中的加法器输入/输出都是18bit,为了防止加法器溢出,应确保18bit输入数据x(n)的最高两位相同(都是符号位)。

    (2)为了实现抽取滤波器的多级串联结构,应统一输入数据有效信号enable和输出数据有效信号valid的时序要求。本设计规定控制器在累加器输出滤波结果后的下一个时钟送出滤波结果有效信号,时宽为一个工作时钟周期。  

    设计特点  

    采用此设计结构实现抽取滤波器有以下三个特点:  

    (1)节省片内资源,提高资源使用效率。由于利用IP核生成的滤波器往往不能针对实际情况合理的利用片内资源,造成资源浪费。本设计采用了流水线结构,所有功能模块 都满负荷工作,没有空闲等待时钟,从而节省了片内资源,提高了资源利用率。  

    (2)可以实现抽取滤波器多级结构。针对抽取滤波器的输出特性,可以采取相同的设计方法,再设计一级抽取滤波器,对前一级输出的数据再次抽取滤波,从而实现多级抽 取滤波器结构。  

    (3)设计灵活,扩展性强。用寄存器存放抽头和系数适用于滤波器阶数较少的情况,如果需要用上百阶的抽取滤波,最好用XC2V1000片内RAM存放抽头和系数,这时只要 稍微改动控制器的逻辑设计即可实现。在此基础上,还可实现可编程抽取滤波器。

    结语

    本文以实现抽取率为2、具有线性相位的3阶FIR抽取滤波器为例,介绍了一种用Xilinx公司的XC2V1000实现FIR抽取滤波器的设计方法。用该方法设计出的抽取滤波器灵活性强,资源利用率高,能广泛应用于数字接收领域。

    展开全文
  • 用FPGA实现抽取滤波器比较复杂,主要是因为在FPGA中缺乏实现乘法运算的有效结构,现在,FPGA中集成了硬件乘法器,使FPGA在数字信号处理方面有了长足的进步。本文介绍了一种采用Xilinx公司的XC2V1000实现FIR抽取...

    用FPGA实现抽取滤波器比较复杂,主要是因为在FPGA中缺乏实现乘法运算的有效结构,现在,FPGA中集成了硬件乘法器,使FPGA在数字信号处理方面有了长足的进步。本文介绍了一种采用Xilinx公司的XC2V1000实现FIR抽取滤波器的设计方法。

     

          具体实现结构设计基于抽取滤波器的工作原理,本文采用XC2V1000实现了一个抽取率为2、具有线性相位的3阶FIR抽取滤波器,利用原理图和VHDL共同完成源文件设计。图1是抽取滤波器的顶层原理图。其中,clock是工作时钟,reset是复位信号,enable是输入数据有效信号,data_in(17:0)是输入数据,data_out(17:0)是输出数据,valid是输出数据有效信号。adder18是加法器模块,mult18是乘法器模块,acc36是累加器模块,signal_36to18是数据截位器模块,fir_controller是控制器模块。控制器定时向加法器、乘法器和累加器发送数据或控制信号,实现流水线操作。

     

    抽取滤波器顶层原理图

     

     

     

    图1  抽取滤波器顶层原理图

     

          控制器

     

          控制器是抽取滤波器的核心模块,有两个功能:一是接收输入数据,二是向其它模块发送数据和控制信号。它根据加法器、乘法器和累加器的时序特性,有规律地向加法器发送抽头数据,向乘法器发送系数,向累加器发送控制信号,让加法器、乘法器和累加器在每个时钟周期都完成指定的任务,从而实现流水线操作。控制器用VHDL语言描述,用寄存器存放抽头和系数。

     

     

          加法器

     

          加法器的输入和输出都是18 bit,用VHDL语言描述实现。它有两个工作时钟的延迟,在输入数据准备好的情况下,第一个时钟得出相加结果,第二个时钟把相加结果锁存输出。

     

          乘法器

     

          乘法器为18 bit输入,36 bit输出,用库元件MULT18X18S和36 bit锁存器实现。MULT18X18S是XC2V1000自带的18×18 bit硬件乘法器,单个时钟就可完成乘法运算。36 bit锁存器工作于时钟的上升沿,用VHDL语言描述。乘法器(mult18)也有两个工作时钟的延时,在输入数据准备好的情况下,第一个时钟得出相乘结果,第二个时钟把相乘结果锁存输出。加法器和乘法器采用锁存输出的结构,虽然增加了一个工作时钟的延迟,但有利于抽取滤波器稳定的工作,提高可靠性。

     

          累加器

     

          36 bit累加器用于累加乘法器的输出,得出滤波结果。它有一个控制端口clr,当clr为高电平时,输出前一轮累加结果,并初始化,开始新一轮累加;当clr为低电平时,进行累加运算。累加器用VHDL语言描述。

     

          数据截位器

     

          数据截位器用VHDL语言描述,用于把累加器的36bit输出进行取舍处理,一般截掉数据低位部分,保留数据高位。为了对抽取滤波器进行功能仿真,这里截掉数据高18bit,保留数据低18bit。

     

          工作过程及功能仿真

     

          下面以抽取滤波器完成一次抽取滤波的全过程为例,说明抽取滤波器的工作过程。假设时钟1、时钟2、时钟3和时钟4控制器已接收了数据x(n-3)、x(n-2)、x(n-1)和x(n),那么,

     

          时钟5:控制器向加法器发送数据x(n)和x(n-3);
          时钟6:加法器进行x(n)+x(n-3)运算;控制器向加法器发送数据x(n-1)和x(n-2);
          时钟7:加法器进行x(n-1)+x(n-2)运算,输出x(n)+x(n-3)运算结果。控制器向乘法器发送系数h(0);

     时钟8:加法器输出x(n-1)+x(n-2)运算结果,乘法器进行h(0)[ x(n)+x(n-3)]运算,控制器向乘法器发送系数h(1);
          时钟9:乘法器进行h(1)[ x(n-1)+x(n-2)]运算,输出h(0)[ x(n)+x(n-3)]运算结果。控制器向累加器发送控制信号(clr为高电平);
          时钟10:乘法器输出h(1)[ x(n-1)+x(n-2)]运算结果。累加器初始化,开始累加操作。控制器向累加器发送控制信号(clr为低电平);
          时钟11:累加器进行累加运算:h(0)[ x(n)+x(n-3)]+ h(1)[ x(n-1)+x(n-2)]。控制器向累加器发送控制信号(clr为高电平),控制器输出滤波数据有效信号(valid为高电平);
          时钟12:累加器输出h(0)[ x(n)+x(n-3)]+ h(1)[ x(n-1)+x(n-2)] 累加结果

    ,并初始化,开始新一轮累加操作。控制器输出滤波数据无效信号(valid为低电平)。

     

     

     

          以上就是抽取滤波器完成一次抽取滤波的全过程。可见,从数据x(n)输入到滤波结果y(n) 输出需要8个工作时钟。如果控制器不停地向乘法器和加法器发送抽头、系数和控制信号,就会形成流水线操作,那么每过两个时钟,抽取滤波器就会输出一个滤波结果。

     

          两点注意事项

     

          (1)两个n位二进制数相加,其和至少需要n+1位二进制数才能正确表示。本设计中的加法器输入/输出都是18bit,为了防止加法器溢出,应确保18bit输入数据x(n)的最高两位相同(都是符号位)。

     

          (2)为了实现抽取滤波器的多级串联结构,应统一输入数据有效信号enable和输出数据有效信号valid的时序要求。本设计规定控制器在累加器输出滤波结果后的下一个时钟送出滤波结果有效信号,时宽为一个工作时钟周期。

     

          设计特点

     

          采用此设计结构实现抽取滤波器有以下三个特点:

     

          (1)节省片内资源,提高资源使用效率。由于利用IP核生成的滤波器往往不能针对实际情况合理的利用片内资源,造成资源浪费。本设计采用了流水线结构,所有功能模块都满负荷工作,没有空闲等待时钟,从而节省了片内资源,提高了资源利用率。

     

          (2)可以实现抽取滤波器多级结构。针对抽取滤波器的输出特性,可以采取相同的设计方法,再设计一级抽取滤波器,对前一级输出的数据再次抽取滤波,从而实现多级抽取滤波器结构。

     

          (3)设计灵活,扩展性强。用寄存器存放抽头和系数适用于滤波器阶数较少的情况,如果需要用上百阶的抽取滤波,最好用XC2V1000片内RAM存放抽头和系数,这时只要稍微改动控制器的逻辑设计即可实现。在此基础上,还可实现可编程抽取滤波器。

     

          结语

     

          本文以实现抽取率为2、具有线性相位的3阶FIR抽取滤波器为例,介绍了一种用Xilinx公司的XC2V1000实现FIR抽取滤波器的设计方法。用该方法设计出的抽取滤波器灵活性强,资源利用率高,能广泛应用于数字接收领域。

    转载于:https://www.cnblogs.com/lifan3a/articles/4293323.html

    展开全文
  • 讨论了软件无线电接收机中数字下变频处理技术中的CIC抽取滤波器结构原理,分析了cIc滤波器级联ISOP滤波器进行抽取滤波的设计技术。验证了IsOP滤波器对CIc滤波器带内衰减补偿的有效性;采用了cIc抽取滤波器的系统,...
  • CIC滤波器是一种高效的滤波器,广泛应用于软件...介绍了CIC抽取滤波器基本原理及其滤波器的Hogenauer结构。用Verilog HDL语言编写程序,实现该滤波器,通过MATLAB和Modelsim联合仿真,综合验证了设计的正确性和可行性。
  • 文中基于多速率数字信号处理原理,设计了用于数字下变频技术的CIC抽取滤波器。通过分析CIC滤波器原理及性能参数,利用MATLAB设计了符合系统要求的CIC滤波器,并通过FPGA实现了CIC滤波器的设计。
  • 本文采用级联抽取滤波的原理和方法实现了中频PCM/DPSK遥测信号解调中的数字抽取滤波器的设计,可用于高采样率情况下数字信号的抽取滤波,使采样时刻由基带提前到了中频,减少了前端的硬件电路,降低了系统的复杂度,提高...
  • 文章分析了梳状滤波器的频率特性及其作为抽取滤波器原理, 特别指出了此 种滤波器具有对艺一△ 调制器成型的量化噪声的频错形状保持不变的特性。给出了梳状滤波器的 设计方法, 作为一个例子对地震仅中广泛米用的艺...
  • 一、引言  中频PCM/DPSK遥测信号全软化解调器就是采用软件的方法对直接中频采样的数字信号进行解调。... 由于窄带数字中频处理中输入信号的抽样率很高而且要求抽取滤波器的通带带宽和传输带很窄,这将使滤波器的节
  • 其中利用DSP来实现数字滤波器就是很重要的一种应用,本文深入研究基于美国德州仪器公司(TI)TMS320C5410 DSP芯片的滤波器系统软件实现方法,用窗口设计法实现FIR滤波器,给出了MATLAB仿真结果,并在以TI TMS320C5410...
  • 我的毕业论文CIC滤波器已经被证明是在高速抽取和插值系统中非常有效的单元,具有结构简单,易于工程实现的特点。CIC滤波器是数据通讯中的常用模块,一般用于数字下变频(DDC)和数字上变频(DUC)系统,随着数据传输率的...
  • 前言:积分梳状滤波器(CIC,Cascaded Integrator Comb),一般用于数字下变频(DDC)和数字上变频(DUC)系统。CIC 滤波器结构简单,没有乘法器,只有加法器、积分器和寄存器,资源消耗少,运算速率高,可实现高速...

    前言:积分梳状滤波器(CIC,Cascaded Integrator Comb),一般用于数字下变频(DDC)和数字上变频(DUC)系统。CIC 滤波器结构简单,没有乘法器,只有加法器、积分器和寄存器,资源消耗少,运算速率高,可实现高速滤波,常用在输入采样率最高的第一级,在多速率信号处理系统中具有着广泛应用。

    1. DDC 原理

    DDC 主要由本地振荡器(NCO) 、混频器、滤波器等组成,如下图所示。
    在这里插入图片描述
    DDC 将中频信号与振荡器产生的载波信号进行混频,信号中心频率被搬移,再经过抽取滤波,恢复原始信号,实现了下变频功能。

    中频数据采样时,需要很高的采样频率来确保 ADC(模数转换器)采集到信号的信噪比。经过数字下变频后,得到的基带信号采样频率仍然是 ADC 采样频率,所以数据率很高。此时基带信号的有效带宽往往已经远小于采样频率,所以利用抽取、滤波进行数据速率的转换,使采样率降低,避免资源的浪费和设计的困难,就成为 DDC 不可缺少的一部分。

    而采用 CIC 滤波器进行数据处理,是 DDC 抽取滤波部分最常用的方法。

    2.带通采样定理

    在这里插入图片描述

    3. DDC 频谱搬移

    例如一个带宽信号中心频率为 60MHz,带宽为 8MHz, 则频率范围为 56MHz ~ 64MHz,m 的可取值范围为 0 ~ 7。取 m=1, 则采样频率范围为 64MHz ~ 112MHz。

    取采样频率为 80MHz,设 NCO 中心频率为 20 MHz,下面讨论复信号频谱搬移示意图。

    (1)考虑频谱的对称性,输入复信号的频谱示意图如下:
    在这里插入图片描述
    (2)80MHz 采样频率采样后,56~64MHz 的频带被搬移到了 -24~ -16MHz 与 136 ~ 144MHz(高于采样频率被滤除)的频带处,-64~ -56MHz 的频带被搬移到 -144~ -136MHz(高于采样频率被滤除)与 16~24MHz 的频带处。

    采样后频带分布如下:
    在这里插入图片描述
    (3)信号经过 20MHz NCO 的正交电路后, -24~ -16MHz 的频带被搬移到 -4~4MHz 与 -44~ -36MHz 的频带处,16~24MHz 的频带被搬移到 -4~4MHz 与 36~44MHz 的频带处,如下所示。
    在这里插入图片描述
    (4)此时中频输入的信号已经被搬移到零中频基带处。

    -44~ -36MHz 和 36~44MHz 的带宽信号是不需要的,可以滤除;-4~4MHz 的零中频信号数据速率仍然是 80MHz,可以进行抽取降低数据速率。而 CIC 滤波,就是要完成这个过程。

    上述复习了很多数字信号处理的内容,权当抛 DDC 的砖,引 CIC 的玉。

    4.CIC 滤波器原理

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    多级 CIC 滤波器

    单级 CIC 滤波器的阻带衰减较差,为了提高滤波效果,抽取滤波时往往会采用多级 CIC 滤波器级联的结构。

    实现多级直接级联的 CIC 滤波器在设计和资源上并不是最优的方式,需要对其结构进行调整。如下所示,将积分器和梳状滤波器分别移至一组,并将抽取器移到梳状滤波器之前。先抽取再进行滤波,可以减少数据处理的长度,节约硬件资源。
    在这里插入图片描述
    当然,级联数越大,旁瓣抑制越好,但是通带内的平坦度也会变差。所以级联数不宜过多,一般最多 5 级。

    5.CIC 滤波器设计

    设计说明

    CIC 滤波器本质上就是一个简单的低通滤波器,截止频率为采样频率除以抽取倍数后的一半。输入数据信号仍然是 7.5MHz 和 250KHz,采样频率 50MHz。抽取倍数设置为 5,则截止频率为 5MHz,小于 7.5MHz,可以滤除 7.5MHz 的频率成分。设计参数如下:
    输入频率: 7.5MHz 和 250KHz
    采样频率: 50MHz
    阻带: 5MHz
    阶数: 1(M=1)
    级数: 3(N=3)
    在这里插入图片描述

    //3 stages integrator
    module integrator
        #(parameter NIN     = 12,
          parameter NOUT    = 21)
        (
          input               clk ,
          input               rstn ,
          input               en ,
          input [NIN-1:0]     din ,
          output              valid ,
          output [NOUT-1:0]   dout) ;
    
        reg [NOUT-1:0]         int_d0  ;
        reg [NOUT-1:0]         int_d1  ;
        reg [NOUT-1:0]         int_d2  ;
        wire [NOUT-1:0]        sxtx = {{(NOUT-NIN){1'b0}}, din} ;
    
        //data input enable delay
        reg [2:0]              en_r ;
        always @(posedge clk or negedge rstn) begin
            if (!rstn) begin
                en_r   <= 'b0 ;
            end
            else begin
                en_r   <= {en_r[1:0], en};
            end
        end
    
        //integrator
        //stage1
        always @(posedge clk or negedge rstn) begin
            if (!rstn) begin
                int_d0        <= 'b0 ;
            end
            else if (en) begin
                int_d0        <= int_d0 + sxtx ;
            end
        end
    
        //stage2
        always @(posedge clk or negedge rstn) begin
            if (!rstn) begin
                int_d1        <= 'b0 ;
            end
            else if (en_r[0]) begin
                int_d1        <= int_d1 + int_d0 ;
            end
        end
    
       //stage3
        always @(posedge clk or negedge rstn) begin
            if (!rstn) begin
                int_d2        <= 'b0 ;
            end
            else if (en_r[1]) begin
                int_d2        <= int_d2 + int_d1 ;
            end
        end
        assign dout  = int_d2 ;
        assign valid = en_r[2];
    
    endmodule
    

    抽取器设计

    抽取器设计时,对积分器输出的数据进行计数,然后间隔 5 个数据进行抽取即可。

    module  decimation
        #(parameter NDEC = 21)
        (
         input                clk,
         input                rstn,
         input                en,
         input [NDEC-1:0]     din,
         output               valid,
         output [NDEC-1:0]    dout);
    
        reg                  valid_r ;
        reg [2:0]            cnt ;
        reg [NDEC-1:0]       dout_r ;
    
        //counter
        always @(posedge clk or negedge rstn) begin
            if (!rstn) begin
                cnt <= 3'b0;
            end
            else if (en) begin
                if (cnt==4) begin
                    cnt <= 'b0 ;
                end
                else begin
                    cnt <= cnt + 1'b1 ;
                end
            end
        end
    
        //data, valid
        always @(posedge clk or negedge rstn) begin
            if (!rstn) begin
                valid_r        <= 1'b0 ;
                dout_r         <= 'b0 ;
            end
            else if (en) begin
                if (cnt==4) begin
                    valid_r     <= 1'b1 ;
                    dout_r      <= din;
                end
                else begin
                    valid_r     <= 1'b0 ;
                end
            end
        end
        assign dout          = dout_r ;
        assign valid         = valid_r ;
    
    endmodule
    

    梳状器设计

    梳状滤波器就是简单的一阶 FIR 滤波器,每一级的 FIR 滤波器对数据进行一个时钟延时,然后做相减即可。因为系数为 ±1,所以不需要乘法器。

    module comb
        #(parameter NIN  = 21,
          parameter NOUT = 17)
        (
         input               clk,
         input               rstn,
         input               en,
         input [NIN-1:0]     din,
         input               valid,
         output [NOUT-1:0]   dout);
    
        //en delay
        reg [5:0]                 en_r ;
        always @(posedge clk or negedge rstn) begin
            if (!rstn) begin
                en_r <= 'b0 ;
            end
            else if (en) begin
                en_r <= {en_r[5:0], en} ;
            end
        end
     
        reg [NOUT-1:0]            d1, d1_d, d2, d2_d, d3, d3_d ;
        //stage 1, as fir filter, shift and add(sub), 
        //no need for multiplier
        always @(posedge clk or negedge rstn) begin
            if (!rstn)        d1     <= 'b0 ;
            else if (en)      d1     <= din ;
        end
        always @(posedge clk or negedge rstn) begin
            if (!rstn)        d1_d   <= 'b0 ;
            else if (en)      d1_d   <= d1 ;
        end
        wire [NOUT-1:0]      s1_out = d1 - d1_d ;
    
        //stage 2
        always @(posedge clk or negedge rstn) begin
            if (!rstn)        d2     <= 'b0 ;
            else if (en)      d2     <= s1_out ;
        end
        always @(posedge clk or negedge rstn) begin
            if (!rstn)        d2_d   <= 'b0 ;
            else if (en)      d2_d   <= d2 ;
        end
        wire [NOUT-1:0]      s2_out = d2 - d2_d ;
    
        //stage 3
        always @(posedge clk or negedge rstn) begin
            if (!rstn)        d3     <= 'b0 ;
            else if (en)      d3     <= s2_out ;
        end
        always @(posedge clk or negedge rstn) begin
            if (!rstn)        d3_d   <= 'b0 ;
            else if (en)      d3_d   <= d3 ;
        end
        wire [NOUT-1:0]      s3_out = d3 - d3_d ;
    
        //tap the output data for better display
        reg [NOUT-1:0]       dout_r ;
        reg                  valid_r ;
        always @(posedge clk or negedge rstn) begin
            if (!rstn) begin
                dout_r         <= 'b0 ;
                valid_r        <= 'b0 ;
            end
            else if (en) begin
                dout_r         <= s3_out ;
                valid_r        <= 1'b1 ;
            end
            else begin
                valid_r        <= 1'b0 ;
            end
        end
        assign       dout    = dout_r ;
        assign       valid   = valid_r ;
    
    endmodule
    

    顶层例化

    按信号的流向将积分器、抽取器、梳状器分别例化,即可组成最后的 CIC 滤波器模块。

    梳状滤波器的最终输出位宽一般会比输入信号小一些,这里取 17bit。当然输出位宽完全可以与输入数据的位宽一致。

    module cic
        #(parameter NIN  = 12,
          parameter NMAX = 21,
          parameter NOUT = 17)
        (
         input               clk,
         input               rstn,
         input               en,
         input [NIN-1:0]     din,
         input               valid,
         output [NOUT-1:0]   dout);
    
        wire [NMAX-1:0]      itg_out ;
        wire [NMAX-1:0]      dec_out ;
        wire [1:0]           en_r ;
    
        integrator   #(.NIN(NIN), .NOUT(NMAX))
        u_integrator (
           .clk         (clk),
           .rstn        (rstn),
           .en          (en),
           .din         (din),
           .valid       (en_r[0]),
           .dout        (itg_out));
    
        decimation   #(.NDEC(NMAX))
        u_decimator (
           .clk         (clk),
           .rstn        (rstn),
           .en          (en_r[0]),
           .din         (itg_out),
           .dout        (dec_out),
           .valid       (en_r[1]));
    
        comb         #(.NIN(NMAX), .NOUT(NOUT))
        u_comb (
           .clk         (clk),
           .rstn        (rstn),
           .en          (en_r[1]),
           .din         (dec_out),
           .valid       (valid),
           .dout        (dout));
    
    endmodule
    

    testbench

    testbench 编写如下,主要功能就是不间断连续的输入 250KHz 与 7.5MHz 的正弦波混合信号数据。输入的混合信号数据也可由 matlab 生成,具体过程参考《并行 FIR 滤波器设计》一节。

    module test ;
        parameter    NIN  = 12 ;
        parameter    NMAX = 21 ;
        parameter    NOUT = NMAX ;
    
        reg                  clk ;
        reg                  rstn ;
        reg                  en ;
        reg  [NIN-1:0]       din ;
        wire                 valid ;
        wire [NOUT-1:0]      dout ;
    
        //=====================================
        // 50MHz clk generating
        localparam   T50M_HALF    = 10000;
        initial begin
            clk = 1'b0 ;
            forever begin
                # T50M_HALF clk = ~clk ;
            end
        end
    
        //============================
        //  reset and finish
        initial begin
            rstn = 1'b0 ;
            # 30 ;
            rstn = 1'b1 ;
            # (T50M_HALF * 2 * 2000) ;
            $finish ;
        end
    
        //=======================================
        // read cos data into register
        parameter    SIN_DATA_NUM = 200 ;
        reg          [NIN-1:0] stimulus [0: SIN_DATA_NUM-1] ;
        integer      i ;
        initial begin
            $readmemh("../tb/cosx0p25m7p5m12bit.txt", stimulus) ;
            i         = 0 ;
            en        = 0 ;
            din       = 0 ;
            # 200 ;
            forever begin
                @(negedge clk) begin
                    en          = 1 ;
                    din         = stimulus[i] ;
                    if (i == SIN_DATA_NUM-1) begin
                        i = 0 ;
                    end
                    else begin
                        i = i + 1 ;
                    end
                end
            end
        end
    
        cic #(.NIN(NIN), .NMAX(NMAX), .NOUT(NOUT))
        u_cic (
         .clk         (clk),
         .rstn        (rstn),
         .en          (en),
         .din         (din),
         .valid       (valid),
         .dout        (dout));
    
    endmodule // test
    

    6.仿真结果

    由下图仿真结果可知,经过 CIC 滤波器后的信号只有一种低频率信号(250KHz),高频信号(7.5MHz)被滤除了。

    但是波形不是非常完美,这与设计的截止频率、数据不是持续输出等有一定关系。

    此时发现,积分器输出的数据信号也非常的不规则,这与其位宽有关系。
    在这里插入图片描述
    为了更好的观察积分器输出的数据,将其位宽由 21bit 改为 34bit,仿真结果如下。

    此时发现,CIC 滤波器的数据输出并没有实质性的变化,但是积分器输出的数据信号呈现锯齿状,也称之为梳状。这也是梳状滤波器名字的由来。
    在这里插入图片描述

    展开全文
  • 其次详细分析了数字中频所用到的理论基础,包括数控振荡器、数字正交混频、CIC抽取插值滤波器和FIR抽取插值滤波器等。然后重点研究了自适应干扰抵消的原理,分析了自适应干扰抵消的几种算法以及各自的性能,并在此...
  • 论述了及数字下变频器的一般原理和结构,重点介绍了下变频器HSP50214B的原理及其内部结构,着重分析了它的抽取滤波器的特性,最后给出了HSP50214B在数字式解调系统中的应用。
  • 提出一种基于时分复用原理的双频段多通道数字接收机DDC模块的设计方法,并利用FPGA的数控振荡器和FIR滤波器的IP核完成了DDC模块的设计与实现。仿真结果表明,该设计实现了数字混频、抽取和滤波的功能,与其他设计...
  • (0)Rtlsdr可以接收 25MHz ~ 1.75GHz 的信号; (1)天线接收 fc 信号之后,经过本地振荡器 ...(3)经过 IQ 数字解调,重采样和抽取滤波器,信号经过 USB 端口 输出到电脑端; (4)经过电脑端后再进行后续处理。 ...
  • 软件无线电原理及应用

    热门讨论 2009-06-10 21:11:21
    一、引言 二、数字滤波器设计基础 三、适合于D=2M倍抽取或内插的半带滤波器 四、积分梳状(CIC)滤波器 第五节 软件无线电中的信号正交变换理论 一、引言 二、窄带信号的正交分解与模拟域实现 三、数字混频正交...
  • 音频重采样原理及技术实现

    万次阅读 2015-05-14 20:14:12
    音频重采样作为一个独立模块蕴含了数字信号处理理论的多方面内容,综合起来其物理原理滤波器的实现优化可以作为一个独立的项目做较深入的研究,可谓是一门学问。推荐大家研读国外作者的理论研究工作,从数学模型到...
  • 该文从分数倍采样基本原理出发,通过对升采样与多相滤波器级联响应进行推导分析,得出一种改进的分数倍采样率变换方案,使得高时钟数字电路得以避免。改进方案与传统方案的电路综合结果对比证明了理论分析的正确性。...
  • 1 直接数字频率合成器的工作原理 5. 2. 2 DDFS的杂散来源及其分布特性 5. 2. 3 改善DDFS杂散输出频谱的几种方法 5. 2. 4 DDFS的VLSI结构 5. 3 基于Galois域的数字控制振荡器 NCO 5. 3. 1 数字控制振荡器的数学原理 ...
  • 本文是对 Δ-Σ ADC 内部工作原理进行简要概述的最后一部分。您已经了解了调制器在某个特定时间和频率域中如何工作,以及如何在高频中形成转换...另外,您还阅读了解了一些与数字/抽取滤波器内部工作原理相关的信息。
  • 对有功电能计量的数学模型进行了分析,给出了相应的IP核实现模型,并详细讨论了CIC抽取滤波器、IIR高通滤波器、FIR低通滤波器数字频率变换等模块的原理与设计。利用Simulink模型进行了仿真,用VHDL作为设计语言,...
  • 为了实现MEMS流量传感器集成式高精度数字化输出,设计了一款单环2阶Σ∆模数转换器。...设计了CIC+IIR抽取滤波器,FPGA验证结果表明,滤波器实现了64倍降采样,滤波器输出数据有效位数达到16 bits。
  • 4载波基带数据源(见附件UMTS.mat),采样率为3.84Msps,自行设计数字滤波器完成信号的上采样(包括成型滤波)、移频合路和下采样,即先将各个载波插值到61.44Msps(16 * 3.84),再搬移至期望的频点并合路,然后将合...
  • 通信系统仿真模型

    2012-11-03 10:20:48
    8.3.3 椭圆滤波器 8.3.4 贝塞尔滤波器 8.4 由数值积分来仿真滤波器 8.4.1 双二次型 8.4.2 软件设计 8.5 用IIR数字滤波器仿真模拟滤波器 8.5.1 IIR滤波器的性质 8.5.2 模拟滤波器映射为IIR数字滤波器 8.5.3 软件设计 ...

空空如也

空空如也

1 2
收藏数 35
精华内容 14
关键字:

抽取数字滤波器原理