CIC滤波器


CIC滤波器及半带滤波器因为具有运算速度快,占用资源少的特点,在多速率信号处理中得到广泛的应用。

1. CIC滤波器的原理

1.1 单级CIC滤波器

CIC滤波器的冲激响应为
h ( n ) = { 1 , 0 ⩽ n ⩽ M − 1 0 , 其 他 h(n)=\left\{\begin{matrix} 1,& 0\leqslant n\leqslant M-1\\ 0, & 其他 \end{matrix}\right. h(n)={1,0,0nM1
式中,M为滤波器的长度。从滤波器的冲激响应容易看出,CIC滤波器其实是一种具有线性相位特征的FIR滤波器,其系统函数为
H ( z ) = ∑ n = 0 M − 1 z − n H(z)=\sum_{n=0}^{M-1}z^{-n} H(z)=n=0M1zn
将上式的分子分母同时乘以因子 ( 1 − z − 1 ) (1-z^{-1}) (1z1),可得
H ( z ) = ( 1 − z − 1 ) ∑ n = 0 M − 1 z − n / ( 1 − z − 1 ) = ( 1 − z − M ) / ( 1 − z − 1 ) H(z)=(1-z^{-1})\sum_{n=0}^{M-1}z^{-n}/(1-z^{-1})=(1-z^{-M})/(1-z^{-1}) H(z)=(1z1)n=0M1zn/(1z1)=(1zM)/(1z1)
对第一个式子进行傅里叶变换,可得其幅频特性为
∣ H ( e j ω ) ∣ = ∣ s i n ( ω M / 2 ) s i n ( ω / 2 ) ∣ \left | H(e^{j\omega }) \right |=\left | \frac{sin(\omega M/2)}{sin(\omega /2)} \right | H(ejω)=sin(ω/2)sin(ωM/2)
用MATLAB仿真的方法来查看不同长度滤波器的频谱特性
在这里插入图片描述
图中,横坐标为归一化频率,数值1相当于数据速率的一半。从图中可以看出,CIC滤波器的频谱特性像一把梳子,这也是CIC被称为梳状滤波器的原因。当滤波器的长度M远大于1时,第一旁瓣电平相对于主瓣电平的差值几乎是固定的13.46dB。显然,这样的小的阻带衰减远不能够满足较高的滤波器要求。解决这一问题的方法是对滤波器进行级联,每增加一级滤波器,则旁瓣电平衰减增加13,46dB。比如,采用5级CIC滤波器级联,则旁瓣电平衰减变为67.3dB。

1.2 多级CIC滤波器

下图为5级CIC滤波器级联的频谱图,显然,旁瓣电平衰减达到67.3dB。但是,多级CIC的主瓣电平下降也比单级快得多。也就是说,在相同的通带频段内,滤波器的通带衰减也明显增加,多级滤波器的通带范围要低于单级滤波器。
在这里插入图片描述

2. CIC滤波器的应用条件

抗混叠滤波器最重要的指标有通带容限 δ p \delta _{p} δp通带衰减 a p a_{p} ap、阻带容限 δ s \delta _{s} δs或阻带衰减 a s a_{s} as、通带截止频率 f p f_{p} fp及阻带截止频率 f s f_{s} fs。其中
a p = 20 l g ( 1 + δ p 1 − δ p ) , a s = 20 l g δ s a_{p}=20lg\left ( \frac{1+\delta _{p}}{1-\delta _{p}} \right ),a_{s}=20lg\delta _{s} ap=20lg(1δp1+δp),as=20lgδs
CIC滤波器的频谱形状是相似的,在给定过渡带的情况下,通带容限与阻带容限的取值只与滤波器的阶数(长度)及级数有关。对于单级滤波器,器对应关系为
δ p ⩾ 1 6 ( π f p f s M ) 2 \delta _{p}\geqslant \frac{1}{6}\left ( \pi \frac{f_{p}}{f_{s}}M \right )^{2} δp61(πfsfpM)2
δ s ⩾ f s M / F 0 \delta _{s}\geqslant f_{s}M/F_{0} δsfsM/F0
对于多级滤波器来说,各级滤波器的误差容限与系统总误差容限的关系为:
δ p = δ p 1 + δ p 2 + ⋯ + δ p n \delta _{p}=\delta _{p1}+\delta _{p2}+\cdots +\delta _{pn} δp=δp1+δp2++δpn
δ s = δ s 1 δ s 2 ⋯ δ s n \delta _{s}=\delta _{s1}\delta _{s2}\cdots \delta _{sn} δs=δs1δs2δsn
从上几式可以看出,多级CIC滤波器与单级相比,通带容限增加(通带衰减增加)的同时,阻带铜线减小(阻带衰减增加)。
要同时满足通带及阻带误差容限的CIC滤波器非常困难,除非滤波器的误差容限较大,或者通带归一化频率很小。而通带归一化频率较小,即意味着信号的采样率相对于有用信号的频带较高的情况。也就是说,CIC滤波器通常适用于多速率信号处理中的前端抗混叠抽取滤波器,或后端抗混叠内插滤波器。

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

3.1 Hogenauer滤波器

N级CIC滤波器的系统函数可表示为:
H ( z ) = ( 1 − z − M 1 − z − 1 ) − N H(z)=\left ( \frac{1-z^{-M}}{1-z^{-1}} \right )^{-N} H(z)=(1z11zM)N
根据Noble恒等式,可以得到多级CIC抽取/内插滤波器,如下图所示
在这里插入图片描述

3.2 计算字长

从上图©可以看出,CIC组成结构的前级为级联的积分器,根据数字滤波器理论,极点不再单位圆内(极点的绝对值小于1)的滤波器是不稳定的,因此积分器的输出数据范围是需要首先考虑的问题。虽然单从积分器的系统函数来看,是不稳定的,但从整个CIC滤波器的结构来看,因为存在零/极点互相抵消的情况,CIC本身是一个FIR滤波器。因此,整个CIC滤波器一定是一个因果稳定系统,当输入数据有界时,输出数据一定是有界的。
估算运算过程字长的公式如下
W 1 = W i n + N l o g 2 ( M D ) W_{1}=W_{in}+Nlog_{2}(MD) W1=Win+Nlog2(MD)
式中, W 1 W_{1} W1为CIC滤波器的中间字长, W i n W_{in} Win为输入数据位宽,N为CIC滤波器的阶数,M为系统抽取因子,D为滤波器的级数。

3.3 FPGA源码

module MultCIC (
	rst,clk,Xin,
	Yout,rdy);
	
	input		rst;   //复位信号,高电平有效
	input		clk;   //FPGA系统时钟,频率为2kHz
	input	  [9:0]	Xin;  //数据输入频率为2kHZ
	output  [16:0]	Yout; //滤波后的输出数据
	output rdy;    //数据有效指示信号
	
	wire ND;
	wire signed [36:0] Intout;
	wire signed [36:0] dout;
	//wire signed [36:0] yt;
	
	//实例化积分器模块
	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;
	//assign Yout = yt[16:0];
	
endmodule
module Integrated (
	rst,clk,Xin,
	Intout);
	
	input		rst;   //复位信号,高电平有效
	input		clk;   //FPGA系统时钟,频率为2kHz
	input	 signed [9:0]	Xin;    //数据输入频率为2kHZ
	output signed [36:0]	Intout; //滤波后的输出数据
	
	
	//根据图6-16(c)所示的结构,每级积分器只需要一个寄存器及一级加法运算
	wire signed [36:0] I1,I2,I3;
	reg  signed [36:0] d1,d2,d3;
	

	//第1级积分器
	always @(posedge clk or posedge rst)
		if (rst)
			d1 <= 37'd0;	
		else
		   d1 <= I1;
   assign I1 = (rst ? 37'd0 : (d1+{{27{Xin[9]}},Xin}));

	//第2级积分器
	always @(posedge clk or posedge rst)
		if (rst)
			d2 <= 37'd0;	
		else
		   d2 <= I2;
   assign I2 = (rst ? 37'd0 : (I1+d2));

	//第3级积分器
	always @(posedge clk or posedge rst)
		if (rst)
			d3 <= 37'd0;	
		else
		   d3 <= I3;
   assign I3 = (rst ? 37'd0 : (I2+d3));
	
	assign Intout = I3;

endmodule

module Decimate (
	rst,clk,Iin,
	dout,rdy);
	
	input		rst;   //复位信号,高电平有效
	input		clk;   //FPGA系统时钟,频率为2kHz
	input	  signed[36:0]	Iin;  //数据输入频率为2kHZ
	output  signed[36:0]	dout; //滤波后的输出数据
	output rdy;    //数据有效指示信号
	
	reg [2:0] c;
	reg signed[36:0] dout_tem;
	reg rdy_tem;
	always @(posedge clk or posedge rst)
		if (rst)
			//初始化寄存器值为0
			begin
				c = 3'd0;
				dout_tem <= 37'd0;
				rdy_tem <= 1'b0;
		   end	
		else
		   begin
				if (c==4)
					begin
						rdy_tem <= 1'b1;
						dout_tem <= Iin;
						c = 3'd0;
					end
				else
				   begin
					   rdy_tem <= 1'b0;
						c = c+1;
					end
			end
			
	assign dout = dout_tem;
	assign rdy  = rdy_tem;
	
endmodule
module Comb (
	rst,clk,ND,Xin,
	Yout);
	
	input		rst;   //复位信号,高电平有效
	input		clk;   //FPGA系统时钟,频率为2kHz
	input    ND;    //输入的数据准备好信号
	input	 signed [36:0]	Xin;  //数据输入频率为2kHZ
	output signed [16:0]	Yout; //滤波后的输出数据
	

	reg signed [36:0] d1,d2,d3,d4;
	wire signed [36:0] C1,C2;
	wire signed[36:0] Yout_tem;
	always @(posedge clk or posedge rst)
		if (rst)
			//初始化寄存器值为0
			begin
				d1 <= 37'd0;
				d2 <= 37'd0;
				d3 <= 37'd0;
				d4 <= 37'd0;
		   end	
		else
		   begin
			   if (ND)
					begin
						d1 <= Xin;
						d2 <= d1;
						d3 <= C1;
						d4 <= C2;
					end
			end
			
	assign C1 = (rst ? 37'd0 : (d1-d2));	
	assign C2 = (rst ? 37'd0 : (C1-d3));	
	assign Yout_tem = (rst ? 37'd0 : (C2-d4));
   /*always @(posedge clk or posedge rst)	
      if (rst)
		   Yout_tem <= 37'd0;
		else
		   Yout_tem <= C2-d4;*/
	assign Yout = Yout_tem[16:0];
			
endmodule

  • 31
    点赞
  • 246
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
CIC滤波器补偿滤波器是一种数字滤波器,用于对信号进行滤波和频率补偿。CIC滤波器是一种多级积分器累积器(CIC)结构,用于实现高效的抽取和插值操作。然而,CIC滤波器在频率响应上存在一些缺陷,例如有一个很宽的过渡带和一个剧烈下降的折线响应。 为了克服CIC滤波器的频率响应问题,可以设计一个补偿滤波器。补偿滤波器通常是一个带通滤波器,用于补偿CIC滤波器的频率响应。补偿滤波器的设计目标是使得整体滤波器的频率响应更加平坦。 补偿滤波器的设计方法通常包括以下步骤: 1. 确定CIC滤波器的型号和参数。这包括CIC滤波器的积分阶数、不同级别的延迟和减小因子。 2. 分析CIC滤波器的频率响应。可以使用数学分析或者模拟工具来获得CIC滤波器的幅度响应和相位响应。 3. 根据CIC滤波器的频率响应,设计补偿滤波器。通常可以选择使用FIR(有限脉冲响应)滤波器或者IIR(无限脉冲响应)滤波器来实现补偿滤波器。 4. 进行滤波器的仿真和验证。使用仿真工具来验证补偿滤波器的性能,并对其进行调整和优化。 5. 实现补偿滤波器并与CIC滤波器级联。将补偿滤波器CIC滤波器级联,以实现靠近理想频率响应的整体滤波器。 通过补偿滤波器的设计,可以有效改善CIC滤波器的频率响应,并得到更接近理想滤波器的性能。这在许多信号处理和通信系统中非常重要,特别是对于需要对信号进行高质量处理和恢复的应用。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值