当前位置:   article > 正文

MATLAB CIC滤波器_cic滤波器 matlab

cic滤波器 matlab

MATLAB CIC滤波器

CIC滤波器是无线通信中的常用模块,一般用于数字下变频(DDC)和数字上变频(DUC)。随着无线通信中数据速率的增加,IC滤波器的应用变得尤为重要。CIC滤波器的结构简单,没有乘法器,只有加法器、积分器和寄存器,适合工作在高抽样条件下,而且CIC滤波器是一种基于零点相消的FIR滤波器,已经被证明是在高倍抽取或内插系统中非常有效的单元。本节主要通过MATLAB仿真来介绍CIC滤波器的原理。

1.单级CIC滤波器

  CIC滤波器的冲激响应为:
h ( n ) = { 1 , 0 ≤ n ≤ M − 1 0 , 其他 } (1) h(n)=

{1,0nM10,}
\tag{1} h(n)={1,0,0nM1其他}(1)
式中,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=0M1zn=1z11zM(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=0M1x(nk)=x(n)x(nM)+k=0M1x(n1k)=[x(n)x(nM)]+y(n1)

1.1 采用MATLAB仿真不同长度的单级CIC滤波器的频谱特性

% 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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

1.2 仿真结果及结果分析

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X0RgKBfE-1688462339506)(C:/Users/lenovo/AppData/Roaming/Typora/typora-user-images/image-20230704171006516.png)]

  由图1可知,当CIC滤波器的长度原大于1时,第一旁瓣电平的差值几乎是固定的13.46dB。显然,这样小的阻带衰减远不能满足较高的CIC滤波器要求。可以通过对CIC滤波器进行级联,从而增加第一旁瓣电平衰减。

2.多级CIC滤波器

2.1 采用MATLAB仿真不同长度的5级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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

2.2 仿真结果及结果分析

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0T8QPNHE-1688462339508)(C:/Users/lenovo/AppData/Roaming/Typora/typora-user-images/image-20230704171036672.png)]

  从图中可以看出,相对于单级CIC滤波器而言,第一旁瓣电平的衰减达到67.3dB。但同时也可以看到,多级CIC滤波器主瓣电平值的下降也要比单级CIC滤波器快得多。也就是说,在相同通带频段内,多级CIC滤波器的通带衰减也会更加明显。

2.3 采用MATLAB仿真不同级数的5阶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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

2.4 仿真结果及结果分析

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4pQzOLVQ-1688462339509)(C:/Users/lenovo/AppData/Roaming/Typora/typora-user-images/image-20230704171519337.png)]

  从图中可以看出,对于归一化通带频率为0.2的通道衰减来讲,单级、2级、5级CIC滤波器分别为3.8dB、7.5dB、18.9dB。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/603272
推荐阅读
相关标签
  

闽ICP备14008679号

        
cppcmd=keepalive&