赞
踩
CIC滤波器是无线通信中的常用模块,一般用于数字下变频(DDC)和数字上变频(DUC)。随着无线通信中数据速率的增加,IC滤波器的应用变得尤为重要。CIC滤波器的结构简单,没有乘法器,只有加法器、积分器和寄存器,适合工作在高抽样条件下,而且CIC滤波器是一种基于零点相消的FIR滤波器,已经被证明是在高倍抽取或内插系统中非常有效的单元。本节主要通过MATLAB仿真来介绍CIC滤波器的原理。
CIC滤波器的冲激响应为:
h
(
n
)
=
{
1
,
0
≤
n
≤
M
−
1
0
,
其他
}
(1)
h(n)=
式中,M为CIC滤波器的长度。从CIC滤波器的冲激响应容易看出,它其实是一种具有线性相位的特殊FIR滤波器,其系统函数为
H
(
z
)
=
∑
n
=
0
M
−
1
z
−
n
=
1
−
z
−
M
1
−
z
−
1
(2)
H(z)=\sum_{n=0}^{M-1}z^{-n}=\frac{1-z^{-M}}{1-z^{-1}}\tag{2}
H(z)=n=0∑M−1z−n=1−z−11−z−M(2)
写成差值形式为
y
(
n
)
=
∑
k
=
0
M
−
1
x
(
n
−
k
)
=
x
(
n
)
−
x
(
n
−
M
)
+
∑
k
=
0
M
−
1
x
(
n
−
1
−
k
)
=
[
x
(
n
)
−
x
(
n
−
M
)
]
+
y
(
n
−
1
)
y(n)=\sum_{k=0}^{M-1}x(n-k)=x(n)-x(n-M)+\sum_{k=0}^{M-1}x(n-1-k)=[x(n)-x(n-M)]+y(n-1)
y(n)=k=0∑M−1x(n−k)=x(n)−x(n−M)+k=0∑M−1x(n−1−k)=[x(n)−x(n−M)]+y(n−1)
% My_E6_3_SigCIC % 用Matlab仿真不同长度的单级CIC滤波器的频谱特性。 M = 2; %滤波器长度 b = ones(1,M); %CIC滤波器 h(n) 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(f)); %归一化频率 最大值抽样频率为2 即f/N *fs 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 = 16; %滤波器长度 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,Spec8,'--');axis([0 1 -50 0]); xlabel('归一化频率');ylabel('幅度(dB)'); legend('M=2','M=5','M=8'); grid;
由图1可知,当CIC滤波器的长度原大于1时,第一旁瓣电平的差值几乎是固定的13.46dB。显然,这样小的阻带衰减远不能满足较高的CIC滤波器要求。可以通过对CIC滤波器进行级联,从而增加第一旁瓣电平衰减。
% My_E6_4_MultCIC.M % 用Matlab仿真不同长度的5级CIC滤波器的频谱特性。 M1 = 2; %滤波器长度为2 b1 = ones(1,M1); delta = [1 zeros(1,1023)]; %冲激函数 s1 = filter(b1,1,delta); s2 = filter(b1,1,s1); s3 = filter(b1,1,s2); s4 = filter(b1,1,s3); s = filter(b1,1,s4); Spec = 20*log10(abs(fft(s))); Spec1 = Spec - max(Spec); M2 = 5; %滤波器长度为5 b2 = ones(1,M2); s1 = filter(b2,1,delta); s2 = filter(b2,1,s1); s3 = filter(b2,1,s2); s4 = filter(b2,1,s3); s = filter(b2,1,s4); Spec = 20*log10(abs(fft(s))); Spec2 = Spec - max(Spec); M3 = 8; %滤波器长度为8 b3 = ones(1,M3); s1 = filter(b3,1,delta); s2 = filter(b3,1,s1); s3 = filter(b3,1,s2); s4 = filter(b3,1,s3); s = filter(b3,1,s4); Spec = 20*log10(abs(fft(s))); Spec3 = Spec - max(Spec); plot(f,Spec1,'-',f,Spec2,'.',f,Spec3,'--');axis([0 1 -200 0]); xlabel('归一化频率');ylabel('幅度(dB)'); legend('M=2','M=5','M=8'); grid;
从图中可以看出,相对于单级CIC滤波器而言,第一旁瓣电平的衰减达到67.3dB。但同时也可以看到,多级CIC滤波器主瓣电平值的下降也要比单级CIC滤波器快得多。也就是说,在相同通带频段内,多级CIC滤波器的通带衰减也会更加明显。
%E6_5_CompareCIC.M %例6-5: %用Matlab仿真长度为4的不同级联数CIC滤波器的频谱特性。 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); %求取滤波器冲激响应 s5=filter(b,1,s4); %求取滤波器冲激响应 Spec1=20*log10(abs(fft(s1))); %求取滤波器频谱特性 Spec1=Spec1-max(Spec1); Spec2=20*log10(abs(fft(s2))); %求取滤波器频谱特性 Spec2=Spec2-max(Spec2); Spec3=20*log10(abs(fft(s3))); %求取滤波器频谱特性 Spec3=Spec3-max(Spec3); Spec4=20*log10(abs(fft(s4))); %求取滤波器频谱特性 Spec4=Spec4-max(Spec4); Spec5=20*log10(abs(fft(s5))); %求取滤波器频谱特性 Spec5=Spec5-max(Spec5); f=0:length(Spec1)-1; f=2*f/(length(Spec1)-1); %对频率轴进行归一化处理 plot(f,Spec1,'-',f,Spec2,'.',f,Spec3,'--',f,Spec5,'-.');axis([0 1 -150 0]); xlabel('归一化频率');ylabel('幅度(dB)'); legend('D=1','D=2','D=3','D=5'); grid;
从图中可以看出,对于归一化通带频率为0.2的通道衰减来讲,单级、2级、5级CIC滤波器分别为3.8dB、7.5dB、18.9dB。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。