CIC滤波器

2024-05-26 09:12
文章标签 滤波器 cic

本文主要是介绍CIC滤波器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

CIC滤波器结构简单,没有乘法器,只有加法器、积分器和寄存器,适合工作在高抽样率条件下,而且CIC滤波器是一种基于零点相消的FIR滤波器。

CIC滤波器分为单级和多级滤波器。

1.在单极滤波器中:

当CIC滤波器的长度M远大于1时,第一旁瓣电平相对于主瓣电平的差值几乎是固定的13.46dB。显然这样小的阻带衰减远不能满足较高的CIC滤波器要求。

要想阻带衰减满足高的CIC滤波器要求,是对CIC滤波器进行级联,每增加一级滤波器,则第一旁瓣电平衰减增加13.46dB。例如采用5级CIC滤波器级联,则第一旁瓣电平衰减变为67.3dB

单级CIC滤波器实现的matlab代码:

%用Matlab仿真不同长度的单级CIC滤波器的频谱特性。M=2;         %滤波器长度
b=ones(1,M);
delta=[1,zeros(1,1023)];
s=filter(b,1,delta);        %求取滤波器冲激响应
Spec=20*log10(abs(fft(s))); %求取滤波器频谱特性
Spec2=Spec-max(Spec);
f=0:length(Spec)-1;
f=2*f/(length(Spec)-1);     %对频率轴进行归一化处理M=5;         %滤波器长度
b=ones(1,M);
delta=[1,zeros(1,1023)];
s=filter(b,1,delta);        %求取滤波器冲激响应
Spec=20*log10(abs(fft(s))); %求取滤波器频谱特性
Spec5=Spec-max(Spec);M=7;         %滤波器长度
b=ones(1,M);
delta=[1,zeros(1,1023)];
s=filter(b,1,delta);        %求取滤波器冲激响应
Spec=20*log10(abs(fft(s))); %求取滤波器频谱特性
Spec7=Spec-max(Spec);M=8;         %滤波器长度
b=ones(1,M);
delta=[1,zeros(1,1023)];
s=filter(b,1,delta);        %求取滤波器冲激响应
Spec=20*log10(abs(fft(s))); %求取滤波器频谱特性
Spec8=Spec-max(Spec);% plot(f,Spec2,f,Spec5,f,Spec7,f,Spec8);axis([0 1 -50 0]);grid;
% xlabel('归一化频率');ylabel('幅度(dB)');
% legend('M=2','M=5','M=7','M=8');
% grid;
plot(f,Spec2,'-',f,Spec5,'.',f,Spec8,'--');axis([0 1 -50 0]);
xlabel('归一化频率');ylabel('幅度(dB)');
legend('M=2','M=5','M=8');
grid;

2.多级CIC滤波器:

matlab代码:

%用Matlab仿真不同长度的5级CIC滤波器的频谱特性。M=2;         %滤波器长度
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);           %求取滤波器冲激响应
s=filter(b,1,s4);            %求取滤波器冲激响应
Spec=20*log10(abs(fft(s))); %求取滤波器频谱特性
Spec2=Spec-max(Spec);
f=0:length(Spec)-1;
f=2*f/(length(Spec)-1);     %对频率轴进行归一化处理M=5;         %滤波器长度
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);           %求取滤波器冲激响应
s=filter(b,1,s4);            %求取滤波器冲激响应
Spec=20*log10(abs(fft(s))); %求取滤波器频谱特性
Spec5=Spec-max(Spec);M=7;         %滤波器长度
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);           %求取滤波器冲激响应
s=filter(b,1,s4);            %求取滤波器冲激响应
Spec=20*log10(abs(fft(s))); %求取滤波器频谱特性
Spec7=Spec-max(Spec);M=8;         %滤波器长度
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);           %求取滤波器冲激响应
s=filter(b,1,s4);            %求取滤波器冲激响应
Spec=20*log10(abs(fft(s))); %求取滤波器频谱特性
Spec8=Spec-max(Spec);% plot(f,Spec2,f,Spec5,f,Spec7,f,Spec8);axis([0 1 -50 0]);grid;
% xlabel('归一化频率');ylabel('幅度(dB)');
% legend('M=2','M=5','M=7','M=8');
% grid;
plot(f,Spec2,'-',f,Spec5,'.',f,Spec8,'--');axis([0 1 -200 0]);
xlabel('归一化频率');ylabel('幅度(dB)');
legend('M=2','M=5','M=8');
grid;

3.CIC滤波器的应用条件

CIC滤波器的频谱形状是相似的,在给定过渡带的情况下,通带容限与阻带容限的取值只与CIC滤波器的阶数及级数有关。对于单级CIC滤波器来说,其对应关系为:

\delta p\geqslant \frac{1}{6}(\pi \frac{f_{p}}{F_{0}}M)^{2}

\delta _s\ge f_sM/F_0

对于多级CIC滤波器(设级数为n)来说,各级CIC滤波器的误差容限与系统总误差容限的关系为;

\delta _p=\delta _{p1}+\delta _{s2}+....+\delta _{pn}

\delta _s=\delta _{s1}\delta _{s2}...\delta _{sn}

4.单级CIC滤波器的FPGA设计

抽取倍数为5,采用5阶CIC滤波器

module SigCIC(input rst,input clk,input signed[9:0] din,output rdy,output signed[12:0] dout
);reg rdy_tem;reg[2:0] c;reg signed[12:0] tem;reg signed[12:0] dout_tem;always @(posedge clk or posedge rst) beginif (rst) beginc <= 3'd0;tem <= 13'd0;dout_tem <= 13'd0;rdy_tem <= 1'b0;endelsebeginif (c==4) beginrdy_tem <= 1'b1;dout_tem <= tem + din;c = 3'd0;tem = 13'd0;endelsebeginrdy_tem <= 1'b0;tem = tem + din;c = c + 1;endendendassign dout = dout_tem;assign rdy = rdy_tem;endmodule

5.多级CIC滤波器的FPGA实现

(1)Noble恒等式

具体到多速率信号处理系统,如果线性系统F\left( z^M \right)后面紧跟着M倍抽取滤波器,则下列公式成立:

F\left( z^M \right) \left( \downarrow M \right) =\left( \downarrow M \right) F\left( z \right)

表明调换线性系统的抽取系统的处理顺序,即首先进行抽取,然后进行线性滤波,这样可以将线性滤波器的长度降低到1/M,即滤波器的抽头数为原来的1/M

(2)多级滤波器的输出字长

B_o=B_{in}+\log _2\left( N^D \right)

B_o为输出数据位数,        B_{in}为输入数据位数,        N为滤波器阶数,        D为滤波器级联数量

假设设计的滤波器为5阶3级CIC滤波器,输入数据位数为10bit

则整个系统的输出数据位数为17bit,并且多级CIC滤波器的中间运算位数也为17bit。

(3)Verilog编写

将程序分成3个模块来进行编写:积分模块(Integrated)、抽取模块(Decimate)和梳状模块(Comb)和顶层模块。

积分模块(Integrated)

module Integrated(input rst,input clk,input signed[9:0] Xin,output signed[16:0] Intout
);wire signed[36:0] I1,I2,I3;reg  signed[36:0] d1,d2,d3;//第一级积分器always @(posedge clk or posedge rst) beginif(rst)d1 <= 37'd0;elsed1 <= I1;endassign I1 = (rst ? 37'd0 : (d1+{{27{Xin[9]}},Xin}));//第二级积分器always @(posedge clk or posedge rst) beginif(rst)d2 <= 37'd0;elsed2 <= I2;endassign I2 = (rst ? 37'd0 : (I1+d2));//第三级积分器always @(posedge clk or posedge rst) beginif(rst)d3 <= 37'd0;elsed3 <= I3;endassign I3 = (rst ? 37'd0 : (I2+d3));assign Intout = I3[16:0];endmodule

抽取模块(Decimate)

module Decimate(input rst,input clk,input signed[16:0] Iin,output signed[16:0] dout,output rdy
);reg[2:0] c;reg signed[16:0] dout_tem;reg rdy_tem;always @(posedge clk or posedge rst) beginif(rst)beginc = 3'd0;dout_tem <= 17'd0;rdy_tem <= 1'b0;endelsebeginif (c==4) beginrdy_tem <= 1'b1;dout_tem <= Iin;c = 3'd0;endelsebeginrdy_tem <= 1'b0;c = c+1;endendendassign dout = dout_tem;assign rdy = rdy_tem;endmodule

梳状模块(Comb)

module Comb (input rst,input clk,input ND,input signed[16:0] Xin,output signed[16:0] Yout
);reg signed[16:0] d1,d2,d3,d4;wire signed[16:0] C1,C2;wire signed[16:0] Yout_tem;always @(posedge clk or posedge rst) beginif (rst) begind1 <= 17'd0;d2 <= 17'd0;d3 <= 17'd0;d4 <= 17'd0;endelsebeginif (ND) begind1 <= Xin;d2 <= d1;d3 <= C1;d4 <= C2;endendendassign C1 = (rst ? 17'd0:(d1-d2));assign C2 = (rst ? 17'd0:(C1-d3));assign Yout_tem = (rst ? 17'd0:(C2-d4));assign Yout = Yout_tem;endmodule

顶层模块

module MultCIC (input rst,input clk,input [9:0] Xin,output [16:0] Yout,output rdy
);wire ND;wire signed[16:0] Intout;wire signed[16:0] dout;Integrated U1(.rst(rst),.clk(clk),.Xin(Xin),.Intout(Intout));Decimate U2(.rst(rst),.clk(clk),.Iin(Intout),.dout(dout),.rdy(ND));Comb U3(.rst(rst),.clk(clk),.ND(ND),.Xin(dout),.Yout(Yout));assign rdy = ND;endmodule

参考资料

数字滤波器的FPGA与MATLAB实现

这篇关于CIC滤波器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1004043

相关文章

【MATLAB】FIR滤波器的MATLAB实现

FIR滤波器的MATLAB实现 FIR滤波器的设计fir1函数fir2函数 与IIR滤波器相比,FIR滤波器既有其优势也有其局限性。FIR滤波器的主要优点包括: 精确的线性相位响应;永远保持稳定性;设计方法通常是线性的;在硬件实现中具有更高的运行效率;启动传输仅需有限的时间。 然而,FIR滤波器也存在一些显著的缺点: 为了达到与IIR滤波器相同的性能要求,FIR滤波器通常需要

波导模式分析2 用于圆TE01模式高功率传输线的大型多模波导滤波器

摘要: 一种对于大型多模波导滤波器的设计方法,其能衰减掉(deteriorate)不想要的模式而不影响所需要的工作模式,被提出来抑制用于圆TE01模式高功率传输线的受限模式谐振。为了从TE10模式中分离出不期望的模式,引入了一种形变圆波导。在波导中的本征模式通过微扰分析理论推断,并且研究了一些公共模式的传输特性。此分析显示在工作TE01模式和其他模式之间通过变形圆波导可以获得显然的模式间隔,特别

简单理解滤波器(入门经典)

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

【FPGA数字信号处理】并行FIR滤波器

​​在数字信号处理领域,FIR(Finite Impulse Response)数字滤波器是一种非常重要的工具。它具有线性相位、稳定性好等优点,被广泛应用于通信、音频处理、图像处理等领域。 今天介绍一下并行 FIR 数字滤波器的原理以及实现。 一、FIR数字滤波器原理解析 1、数字滤波器 数字滤波器是数字信号处理领域的核心组件,它们对信号进行数学处理以增强或抑制某些特性。 数字滤波器按照

均值滤波器的原理及实现

1.均值滤波器 平滑线性空间滤波器的输出是包含在滤波器模板邻域内的像素的简单平均值,也就是均值滤波器。均值滤波器也是低通滤波器,均值滤波器很容易理解,即把邻域内的平均值赋给中心元素。 均值滤波器用来降低噪声,均值滤波器的主要应用是去除图像中的不相关细节,不相关是指与滤波器的模板相比较小的像素区域。模糊图片以便得到感兴趣物体的粗略描述,因此那些较小的物体的灰度就会与背景混合在一起,较大的物体则变

有源电力滤波器有哪些种类?ANAPF有源电力滤波器的介绍

安科瑞徐赟杰 前言 我们都知道谐波对公用电网、电气设备和通信系统都会有不同程度的影响。电网中的谐波会导致电机的附加损耗,增大机械振动、噪声和过电压,使变压器局部严重过热。谐波使电容器、电缆等设备过热、绝缘老化、寿命缩短,以至损坏。谐波会引起公用电网中局部的并联谐振和串联谐振,从而使谐波放大甚至引起严重事故。18(7061@650*67 目前解决谐波比较好的方案是引入APF有源电力滤波器,它由

语音信号处理2:数字滤波器 Digital Filters

参考: The Scientist and Engineer’s Guide to Digital Signal Processing Multimedia Signal Processing: Theory and Applications in Speech, Music and Communications Classification 欲知细节,先识大体,看看数字滤波器都有哪些种类吧

双二阶滤波器之MATLAB设计及C语言实现

参考: 双二阶滤波器 本文中的例子和代码放在Github First,什么是双二阶滤波器?wiki上是这么说的:二阶、递归、线性,含有两个极点和两个零点,“双二阶”的名字来源于它的传递函数是两个二次多项式的比值。 In signal processing, a digital biquad filter is a second order recursive linear filter,

计算机视觉基础 2. 滤波器

1. 简介 模糊滤波器是低通滤波器。它们从图像中去除高空间频率内容,只留下低频空间分量。结果是图像失去了细节,看起来很模糊。图像模糊在计算机图形学和计算机视觉中有许多应用。它可用于降低噪声(如图17.1所示),揭示不同尺度下的图像结构,或用于对图像进行上采样和下采样。 Blur是通过计算输入像素值的小邻域上的局部平均值来实现的。这可以通过卷积来实现。然而,有非线性方法可以去除图像细节,如各向

功率器件和滤波器件的选型及测试方法

目录 一、功率器件的选型及测试方法 1.1功率器件的选型 1.2功率器件的测试方法 二、滤波器件的选型及测试方法 2.1滤波器件的选型 2.2滤波器件的测试方法 三、表格总结 一、功率器件的选型及测试方法 1.1功率器件的选型 在电子电路设计中,功率器件的选择是至关重要的,以下是一些主要的考虑因素: 电压和电流额定值:功率器件需要能够处理电路中的最大电压和电流。例如,如