精华内容
下载资源
问答
  • MATLAB CIC滤波器仿真

    2019-10-03 22:19:38
    MATLAB代码实现的CIC滤波器及仿真函数,对于CIC滤波器的学习了解有一定参考
  • 简单的CIC滤波器matlab程序,可以直接编译,给出了滤波前后的仿真波形
  • Matlab中CIC滤波器的应用

    千次阅读 2021-02-07 19:58:02
    Matlab中CIC滤波器的应用 CIC滤波器基本原理   CIC(积分梳状级联)滤波器是工程上经常用的滤波器,因为CIC滤波器不需要乘法,CIC滤波器往往在级联抽取滤波器的第一级和级联插值滤波器的最后一级。这一节我们以CIC...

    Matlab中CIC滤波器的应用

    CIC滤波器基本原理

      CIC(积分梳状级联)滤波器是工程上经常用的滤波器,因为CIC滤波器不需要乘法,CIC滤波器往往在级联抽取滤波器的第一级和级联插值滤波器的最后一级。这一节我们以CIC抽取滤波器为例来讲CIC滤波器的使用方法,CIC滤波器的数学模式为:

    image-20201002173656346

    可以将其分解为两部分:

    image-20201002173729012

    其中第一级是积分器,就是做累加;第二级是级联梳状滤波器。

    image-20201002173755692

      CIC滤波器有三个参数:

    • R:抽取倍数
    • M:差分延迟,在工程中一般取1或者2
    • N:滤波器级数,一级CIC的阻带有13.46dB的衰减,N级就是有13.46*N dB的衰减。

    若R=8,M=1,N=5,那么CIC滤波器的频响如下所示:

    image-20201002192819206

    Matlab中CIC滤波器的使用

      在Matlab中,有两个函数可以生成CIC滤波器。我们以CIC抽取滤波器为例,一个是fdesign.decimator,第二个是dsp.CICDecimator。下面我们分别来看这两个函数的使用方法。

    生成滤波器模型

      首先来看如何用fdesign.decimator生成一个CIC滤波器和其补偿滤波器,并查看CIC滤波器、补偿滤波器、级联滤波器的频响。下面代码中hcic即为构造的CIC滤波器,抽取倍数为4,差分延时为1;cic_comp为CIC补偿滤波器;其中Ap表示通带衰减,Astp表示阻带衰减。

    Fs = 1; % sample rate
    R = 4;  % decimator factor
    D = 1;  % differential delay
    Fp = 0.05; % pass band
    Fstp = 0.075; % stop band
    Ap = 0.1; % attenuation in pass band
    Astp = 60; % attenuation in stop band
    hcic = design(fdesign.decimator(R,'cic',D, Fp, Astp, Fs),'SystemObject',true);
    cic_comp = design(fdesign.ciccomp(hcic.DifferentialDelay, ...
                hcic.NumSections,Fp,Fstp,Ap,Astp,Fs/R), 'SystemObject',true);
    fvtool(hcic,cic_comp,...
    cascade(hcic,cic_comp),'ShowReference','off','Fs',[Fs Fs/R Fs])
    legend('CIC Decimator','CIC Compensator','Resulting Cascade Filter');
    

    image-20210207151607757

      dsp.CICDecimator的用法也非常类似,我们可以直接指定阶数;CIC补偿滤波器也直接使用dsp.CICCompensationDecimator函数来设计;

    Fs = 1; % sample rate
    R = 4;  % decimator factor
    D = 1;  % differential delay
    N = 5;  % number of stage
    Fp = 0.05; % pass band
    Fstp = 0.075; % stop band
    Ap = 0.1; % attenuation in pass band
    Astp = 60; % attenuation in stop band
    
    CICDecim = dsp.CICDecimator(R, D, N);
    CICCompDecim = dsp.CICCompensationDecimator(CICDecim, ...
        'DecimationFactor',2,'PassbandFrequency',Fp, ...
        'StopbandFrequency',Fstp,'SampleRate',Fs/R);
    fvtool(CICDecim,CICCompDecim,...
    cascade(CICDecim,CICCompDecim),'ShowReference','off','Fs',[Fs Fs/R Fs])
    legend('CIC Decimator','CIC Compensator','Resulting Cascade Filter');
    

    频响如下:

    image-20210207161734382

    滤波操作

      如果要用上面生成的CIC模型来完成滤波操作,可以用dsp.SignalSource函数,该函数用于生成信号源,函数的第一个参数是原信号,第二个参数是每帧的点数。(至于为什么要分成不同的帧本人也不是很清楚,只是按照Mathworks提供的例程来完成)

      下面的例子中,我们要完成的是对输入的1024点的信号进行抽4的CIC滤波,在dsp.SignalSource中我们指定一帧为64个点,因此总共有1024/64=16帧,在抽4之后,每帧的长度就是64/4=16;所以定义的y是一个16x16的矩阵,其中每一行为一帧的滤波结果,将16行拼接起来,就是输出的1024/4=256点的结果。

      dsp.CICDecimatorfdesign.decimator的滤波的方法是一样的:

    F0 = Fs/40;
    N = 1024;
    t = (0:N-1)';  % length: 1024
    x = fi(sin(2*pi*F0/Fs*t),true,16,15);
    SamplesPerFrame = 64;
    src = dsp.SignalSource(x,SamplesPerFrame);
    y = zeros(N/SamplesPerFrame,SamplesPerFrame/R);
    for ii = 1:length(x)/SamplesPerFrame
         y(ii,:) = hcic(src());  
        %y(ii,:) = CICDecim(src());   
    end
    yy = y.';
    figure;plot(yy(:))
    

    滤波后的时域结果如下所示:

    image-20210207155034229
    欢迎关注微信公众号:Quant_Times

    欢迎大家学习我的课程:
    System Generator & HLS数字信号处理教程

    在这里插入图片描述

    展开全文
  • MatlabCIC补偿滤波器设计-understanding CIC compensation Filters.rar 根据一些会员对这方面的知识,比较模糊 特提供一篇文献,希望对他们有所启发 分享一下,共同提高! 文献名:Understanding CIC ...
  • 基于MatlabCIC滤波器设计.pdf
  • 基于MATLAB FDATOOL的CIC滤波器设计

    万次阅读 热门讨论 2018-05-27 22:21:36
    级联积分梳状(CIC)滤波器是...CIC滤波器是数据通信的常用模块,一般应用于数字下变频(DDC)和数字上变频(DUC)系统,随着数据传输率的不断增加,级联梳状滤波器(CIC)的应用变得非常重要,CIC滤波器仅利用加法器、减...

    级联积分梳状(CIC)滤波器是一种被广泛应用于软件无线电中,可以实现抽取或者插值的高效滤波器。它主要用于降低或提高采样率。CIC滤波器的主要特点是,仅利用加法器、减法器和寄存器,占用资源少,实现简单且速度高。

    CIC滤波器是数据通信的常用模块,一般应用于数字下变频(DDC)和数字上变频(DUC)系统中,随着数据传输率的不断增加,级联梳状滤波器(CIC)的应用变得非常重要,CIC滤波器仅利用加法器、减法器和寄存器的特点,所以非常适用工作在高采样率下。数字下变频(DDC)中,CIC滤波器起着重要的作用,它主要用对于采样速率的抽取,同时具有低通滤波器的特性。

    滤波器的Z变换为:

     


    积分器I




     


    1 积分器的结构图

    疏状滤波器C:

     


     

    D是延时因子,是滤波器的一个重要参数,可以用来控制滤波器的频率响应,决定零点的位置。D可以是任意正整数,但是D越大,会导致带内主瓣的衰减过大,所以通常取12



    单级CIC滤波器的的结构图



     

    N级内插滤波器



    N级抽取滤波器

     

    衰减:滤波器为单级时,第一旁瓣与主瓣的比值:

     



    为四级滤波器时,第一旁瓣与主瓣的比值:

     


     

    中间变量的位扩展:

    从而在输入信号位数为Bin的情况下,滤波输出的最大可能位数为:

     


    R为抽取或插值因子,N滤波器级数。


    2.matalab分析CIC插值滤波器频谱

    打开matlab,选择左下角的“start”,“toolboxes”—“filterDesign”—“fdatool

    打开fadtool界面:

     

    设计(25/24)MHz采样率、24倍插值、4CIC滤波器的频谱图,如下:

     


    由上图可以见,主瓣大概40KHz,通带只有30KHz

     

    2、用matlab程序sin_1MHz_gen.m生成正弦波波形表,改变变量f0=1.5e6可以生成不同频率的波形。把第一个周期的波形数据存入signal_1m.dat文件中,存入的数据个数为Fs/Fo的最小正整数之比的分子,比如Fs=25MHz,Fo=0.3MHz,Fs/Fo=250/3(Fs=25/24MHz),则存入文件signal_1m.dat的波形数据个数为开头的250个数据。相应的signal_gen0.v中的语句if(i0<50)相应的改为if(i0<250)。仿真时signal_1m.dat放在仿真目录下

     

    3、用sin_1MHz_gen.m产生1MHz正弦波信号,并把数据hex_sin_data的前25个数据存入signal_1m.dat文件,相应的signal_gen0.v中的语句if(i0<50)相应的改为if(i0<25)。

    仿真的波形如下图:



    由图可见数据速率变高了,变为了25MHz,同时对信号也起了衰减作用

     

    4、用sin_1MHz_gen.m产生0.1MHz正弦波信号(f0=0.1e6),Fs/Fo=125/12,把数据hex_sin_data的前125个数据存入signal_1m.dat文件,相应的signal_gen0.v中的语句if(i0<25)相应的改为if(i0<125)。

    仿真的波形如下图:



    CIC对信号旗衰减左右。

    5、用sin_1MHz_gen.m产生1MHz正弦波信号(f0=0.01e6),Fs/Fo=625/6,把数据hex_sin_data的前625个数据存入signal_1m.dat文件,相应的signal_gen0.v中的语句if(i0<50)相应的改为if(i0<625)。

    仿真的波形如下图:



     

    由此可见CIC滤波器对带内的信号也是具有小的衰减

    由此可见CIC适合作为窄带低通滤波器。部分代码如下:


    //==========================================================================
    `timescale 1ns/1ps

    module   cic_dec_arithmetic
       (
    //sys_signal
       input          i_fpga_clk      ,//25MHz
       input          i_rst_n         ,
    //input    
       input   [7:0] i_cic_data      ,  //输入的数据
       
       output  [7:0] o_cic_data      

        );
       
       
    //=============================== main=============================
    //==================================================================
    //1.                      积分器例化                
    //==================================================================
    //--CIC0
       wire  [26:0] integral_data    ;//位扩展,防止累加溢出,8+4*log2(24)=27
       
    multilevel_integrator   u0_multilevel_integrator
       (
    //sys_signal
       .i_fpga_clk                (i_fpga_clk       ),//25MHz
       .i_rst_n                   (i_rst_n          ),           
    //input
       .i_integral_data           (i_cic_data      ),
    //output   
       .o_integral_data           (integral_data   )
        );
       

           
    //==================================================================                                                                           
    //2.                   24倍抽取,当然抽取率也可以取1                                    
    //==================================================================
    wire  [26:0] dec24_data    ;
    wire         dec24_fp      ;

    cic_dec24   u0_cic_dec24
       (
    //sys_signal
       .i_fpga_clk       ( i_fpga_clk   ),//25Mhz
       .i_rst_n          (i_rst_n     ),                        
    //input                                          
       .i_data           ( integral_data),

       .o_data           ( dec24_data  ),
       .o_fp             ( dec24_fp   )
        );
       
    //==================================================================                                                                           
    //3.                     派生滤波器                                     
    //==================================================================
    multilevel_der_filter   u0_multilevel_der_filter
       (
    //sys_signal
       .i_fpga_clk            ( i_fpga_clk   ),//25MHz
       .i_rst_n               (i_rst_n      ),                       
    //input
       .i_data        

    展开全文
  • 设计了一个CIC滤波器,我想不用补偿滤波器,直接求它的频谱,可是总是出错,不知道什么原因,是不是滤波器设计的不合理呢,设计的信号是AM信号基带信号为100KHZ,载波信号为1MHZ,采样率为80MHZ,将其抽取到10MHZ. ...
  • cic 滤波器matlab程序

    热门讨论 2012-04-28 16:14:29
    设计cic 滤波器matlab程序,可以实现对信号的抽取
  • MATLAB语言实现单级CIC滤波器,以及一些CIC滤波器介绍网站推荐
  • 设定低通滤波器的采样频率为112MHz,信号带宽为30MHz,,那么对于同相与正交分量分别具有15MHz带宽,因此低通滤波器的通频带为15MHz,参数配置如下(在MATLAB中调用fdatool函数) ...

    FDATool界面左下侧排列了一组工具按钮,其功能分别如下所述:
    ● 创建多速率滤波器(Create a Multirate Filter)
    ● 滤波器转换(TransForm Filter)
    ● 设置量化参数(Set Quantization Parameters)
    ● 实现模型(Realize Model)
    ● 零极点编辑器(Pole-zero Editor)
    ● 导入滤波器(Import Filter)
    ● 设计滤波器(Design Filter)

    一、低通滤波器
    设定低通滤波器的采样频率为112MHz,信号带宽为30MHz,,那么对于同相与正交分量分别具有15MHz带宽,因此低通滤波器的通频带为15MHz,参数配置如下(在MATLAB中调用fdatool函数)
    在这里插入图片描述
    滤波器界面介绍网址https://www.cnblogs.com/sunev/archive/2011/11/22/2258426.html
    二、CIC滤波器
    1、用MATLAB实现
    当采用N级CIC滤波器级联时,主瓣电平A0与旁瓣电平A1的差值可表示
    在这里插入图片描述
    采用5级CIC滤波器级联,主瓣电平A0与旁瓣电平A1的差值为
    在这里插入图片描述
    在这里插入图片描述
    在5级CIC滤波器中,内插因子设为30,采样速率设为3.125MHz。
    2、用simulink实现

    三、低通有限冲激响应(Fir)滤波器
    1、用fdatool工具
    滤波器类型(Filer Type)为低通(Low Pass)
    设计方法(Design Method)为FIR,采用窗函数法(Window)
    滤波器阶数(Filter order)定制为19(注意这里输入的数值是所要设计的滤波器的阶数减 1,本设计是20阶滤波器)
    窗口类型为Kaiser,Beta为5
    采样频率Fs为3125kHz,截止频率Fc为5kHz
    最后单击Design Filter图标,让MATLAB计算FIR滤波器系数并作相关分析(在 FDATool 工具界面中,点击 File 选择 Export,在弹出窗口中点击 Export,即可在 MATLAB 中生成所设计的滤波器的抽头系数)
    在这里插入图片描述
    在这里插入图片描述
    2、用MATLAB代码
    恺撒窗(Kaiser Window) 
    调用格式:w=kaiser(n,beta),根据长度 n 和影响窗函数旁瓣的β参数产生一个恺撒窗w。
    fir1(n,Wn,Window),n 为阶数、Wn 是截止频率(如果输入是形如[W1 W2]的矢量时,本函数将设计带通/带阻滤波器。
    [H,W ] = freqz(b,a,n)返回n点复频响应矢量H和n点的频率向量w。b和a为系统传递函数的分子和分母的系数向量。如果n没有指定,默认为512。

    b = fir1(19,0.04,kaiser(20,5));
    [h1,w1]=freqz(b,1);  
    plot(w1/pi,20*log10(abs(h1))); 
    axis([0,1,-70,5]); 
    grid on;
    xlabel('归一化频率/p') ;
    ylabel('幅度/dB') ;
    

    在这里插入图片描述

    展开全文
  • Matlab调用函数实现CIC滤波器

    万次阅读 2018-06-03 22:19:17
    matlab设计cic滤波器的函数有以下两种:1. fdesign.decimator 例如:设定好采样频率Fs, 信号带宽Fp, 阻带衰减As, 差分时延m及降采样比D就可以得到cic滤波器的传输函数d1 =fdesign.decimator(D,'CIC',m,Fpass,As,...

    matlab里设计cic滤波器的函数有以下两种:

    1. fdesign.decimator

           例如:设定好采样频率Fs, 信号带宽Fp, 阻带衰减As, 差分时延m及降采样比D就可以得到cic滤波器的传输函数

    d1 =fdesign.decimator(D,'CIC',m,Fpass,As,Fs);

    Hcic =design(d1);

     

     2.mfilt.cicdecim (fixed-point CIC decimator, mfilt是matlab里专门用来设计多速率信号处理滤波器的一套函数)

     

    hm =mfilt.cicdecim(decimation_factor,differential_delay,NumberofSections);

          decimation_factor为降采样比,differential_delay同上为差分时延,NumberofSections为cic滤波器的节数,与第一个函数相比,这个函数没有规定采样滤波,通带宽度、阻带衰减等


    在信号处理中,信号发射时,信号通过载波,调制,以电磁波的形式发射出来
    在接收端,射频信号通过天线接收,超外差式等方式进行处理,变频到中频
    然后通过数字技术对中频信号进行处理,此时的中频信号采样率很高,多达几十兆赫
    而要解调出来的信号很小,此时就要经过滤波来得到我们需要的信号
    如果直接设计滤波器,阶数会非常庞大,软件,硬件设备都承受不了
    因此,一般常用的技术是进行下变频处理,其主要技术就是通过抽取滤波进行下变频
    常用的滤波器就是CIC抽取, 希望可以帮助一些坛友解决基本的问题。
    下面以一个实例,对一个采样频率为45.5MHz的信号进行14倍的抽取滤波,同时进行
    补偿滤波器的设计,并给出CIC滤波器、补偿滤波器和级联后的频谱图


    1. %  Design a minimum-order CIC compensator that compensates...
    2. %  for the droop in the passband for the CIC decimator.
    3. Fs = 45.5e6;     % Input sampling frequency
    4. Fpass = 0.5e6;   % Frequency band of interest
    5. D = 14;          % Decimation factor of CIC
    6. d1 = fdesign.decimator(D,'CIC',1,Fpass,65,Fs); %design a cic filter
    7. Hcic = design(d1);
    8. Hd(1) = cascade(dfilt.scalar(1/gain(Hcic)),Hcic);
    9. d2 = fdesign.ciccomp(Hcic.DifferentialDelay, ...
    10.     Hcic.NumberOfSections,Fpass,1.625e6,.005,66,Fs/D); % design a cic compensator filter
    11. Hd(2) = design(d2);
    12. fcfwrite([Hcic Hd(2)],'CICdesciption','dec'); % 其中,生成的.fcf文件描述滤波器的结构
    13. hvt=fvtool(Hd(1),Hd(2),cascade(Hd(1),Hd(2)),'Fs',[Fs Fs/D Fs], ...   % plot whole response
    14.           'ShowReference', 'off');
    15. legend(hvt, 'CIC','CIC compensator', 'Whole response','Location', 'Northeast');

    复制代码




    展开全文
  • %滤波器长度 b=ones(1,M); delta=[1,zeros(1,1023)]; s1=filter(b,1,delta); %求取滤波器冲激响应 s2=filter(b,1,s1); %求取滤波器冲激响应 s3=filter(b,1,s2); %求取滤波器冲激响应 s4=filter(b,1,s3); %求取...
  • 在sigma-delta ADC的数字滤波器设计过程,由于CIC滤波器在通带处存在一定的衰减,因此需要CIC补偿滤波器对通带进行补偿,以实现较为平稳的低纹波通带。 一般在设计sigma-delta ADC的数字降采样滤波器的过程,...
  • CIC滤波器设计与仿真

    千次阅读 2020-10-14 23:35:19
    CIC滤波器已经被证明是在高速抽取和插值系统非常有效的单元,具有结构简单,易于工程实现的特点。CIC滤波器是数据通讯的常用模块,一般用于数字下变频(DDC)和数字上变频(DUC)系统,随着数据传输率的增加,级联...
  • CIC滤波器设计原理总结一、CIC滤波器应用概述二、基本原理理解1、模拟与数字信号关于频率的理解2、变采样对信号频率搬移变化的理解3、升采样(内插)与降采样(抽取)方法三、CIC滤波器幅频响应直观认识四、CIC...
  • Verilog CIC 滤波器设计(代码自取)

    千次阅读 2021-02-07 15:50:05
    CIC 滤波器结构简单,没有乘法器,只有加法器、积分器和寄存器,资源消耗少,运算速率高,可实现高速滤波,常用在输入采样率最高的第一级,在多速率信号处理系统具有着广泛应用。 1. DDC 原理 DDC 主要由本地振荡...
  • 基于MATLAB和FPGA的cic滤波器,使用的是VIVADO软件,实现滤波
  • 设计了采样频率为640 MHz...为了实现高频工作,CIC滤波器采用两级结构,第一级采用多相分解技术,使大部分结构工作在较低时钟频率下,极大地降低了CIC的功耗,第二级采用传统结构。CIC补偿滤波器使信号通带平坦,半...
  • CIC滤波器Matlab仿真与FPGA实现

    万次阅读 2017-03-11 23:45:49
    CIC滤波器 1、单级CIC滤波器CIC滤波器的冲激响应为: h(n)=1,[0,M-1] ...用MATLAB仿真不同长度的CIC滤波器: M=5;  b=ones(1,M); [Hz,f]=freqz(b,1,1000,1024); Plot(f*2/1000,20*log1
  •  文中基于多速率数字信号处理原理,设计了用于数字下变频技术的CIC抽取滤波器。通过分析CIC滤波器的原理及性能参数,利用MATLAB设计了符合系统要求的CIC滤波器,并通过FPGA实现了CIC滤波器设计
  • FPGA数字信号处理(十六)单级CIC滤波器Verilog设计

    千次阅读 多人点赞 2018-07-02 10:48:17
    该篇是FPGA数字信号处理的第16篇,选题为多速率信号处理系统常用的CIC滤波器。本文将详细介绍使用Verilog HDL设计单级CIC滤波器的方法。接下来几篇会介绍多级CIC滤波器的Verilog设计、使用Quartus和Vivado的IP核...
  • CIC滤波器

    千次阅读 2021-04-12 13:31:50
    CIC滤波器及半带滤波器因为具有运算速度快,占用资源少的特点,在多速率信号处理得到广泛的应用。 1. CIC滤波器的原理 1.1 单级CIC滤波器 CIC滤波器的冲激响应为 h(n)={1,0⩽n⩽M−10,其他h(n)=\left\{\begin{...
  • CIC滤波器是一种高效的滤波器,广泛应用于软件无线电的数字上下变频端。介绍了CIC抽取滤波器基本原理及其滤波器的Hogenauer结构。用Verilog HDL语言编写程序,实现该滤波器,通过MATLAB和Modelsim联合仿真,综合验证...
  • CIC抽取滤波器MATLAB仿真和FPGA实现(1) 设计理想滤波器目标:1、滤波器在有效频段内纹波满足设计要求。2、抽取或内插处理后在有效频段内不产生混叠。3、滤波器实现简单,需要资源较少。这个文章主要讲CIC理论基础...
  • FPGA数字信号处理(十七)多级CIC滤波器Verilog设计

    万次阅读 多人点赞 2018-07-02 15:47:40
    该篇是FPGA数字信号处理的第17篇,题接上篇,本文详细介绍多级CIC滤波器的特性、使用Verilog HDL设计多级CIC滤波器的方法。接下来两篇会介绍使用Quartus和Vivado的IP核设计CIC的方法。 多级CIC滤波器 根据上...
  • 这个代码是一个CIC补偿滤波器的代码,可以作为参考。
  • 本文档构成了一个关于设计和实现的教程MATLAB 的数字滤波器。 本教程基于以下功能过滤器设计工具箱。 该文件涵盖了 FIR 和 IIR 单速率和多速率的设计。 滴定过滤器。 它还讨论了先进的设计技术,例如多速率/多级...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 200
精华内容 80
关键字:

matlab中cic滤波器的设计

matlab 订阅