CIC滤波器原理及设计实现

目录

1.CIC滤波器原理

2.CIC滤波器的设计

 3.完整matlab工程代码


1.CIC滤波器原理

CIC滤波器即积分梳状滤波器(CIC,Cascaded Integrator Comb),用作低通滤波器常与抽取和内插级联,CIC滤波器结构简单没有乘法器,只有加法器资源消耗少,运算效率高,因此同半带滤波器常用在上变频或下变频中。

单级内插CIC滤波器结构:

图中滤波器所处的位置与前所诉一致,即抽取前滤波,内插后滤波。

图中的积分器是单极点的IIR滤波器,反馈系数为1,状态方程和传输函数如下:

z(n)=z(n-1)+x(n)      H1(z)=1/(1-z^-1)

图中的梳状滤波器则是一个FIR滤波器,其状态方程和传输函数如下:

y(n)=z(n)-z(n-D)      H2(z)=1-z^-D

D为延迟单位,一般D等于抽取和内插倍数M。

则单级CIC滤波器的传输函数:

H(z)= H1(z)* H2(z)=( 1-z^-D)/ (1-z^-1) 

传输函数也可通过冲激响应的z变换求得,冲激响应h(n):

h(n)=1   0<=n<=D-1;

h(n)=0     其他

对其进行z变换得到:

还可用传递函数=输出的z变换/输入的z变换来求,H(z)表示系统频响特征。根据传递函数求得的幅频和相位响应如下:

 

CIC滤波器的幅频响应是近似与Sinc函数且具有线性相位。冲激幅频相位响应: 

 

 

由上图可知,CIC滤波器会给带内信号带来信号损失即插损,可以级联一个CIC补偿滤波器进行补偿,补偿滤波器的幅频响应近似为反sinc函数可据此设计。积分器为不稳定系统还需注意积分溢出的问题。[直流分量]

多级抽取CIC滤波器结构:

 线性时不变系统可对其进行位置变换:

2.CIC滤波器的设计

设计一个信号的频率包含300Khz和500Khz,采样率为16Mhz,设计一个抽取率为8倍的2级cic滤波器,使用filter designer工具设计如下:

根据设计参数自实现积分器和梳状滤波器,将信号输入到matlab函数和自实现CIC滤波器中对比,结果一致:

 

 3.完整matlab工程代码

文件:cic_sim.m

%------------------------------------------------------------------------
%------------------------------------------------------------------------
%------------------------------------------------------------------------
close all;
clc;
%-------------------------------------------------------------------------
%-------------------------------------------------------------------------
%-------------------------------------------------------------------------
sin_f0=300000;%构造一个300KHz频率的正弦信号y0
sin_f1=500000;%构造一个500KHz频率的正弦信号y1
Fs=16000000;%采样率为16MSPS
N=8192;
n=0:N-1;
time=n/Fs;
y0=sin(2*pi*sin_f0*time);
y1=sin(2*pi*sin_f1*time);
y=y0+y1;%将300KHz的信号500KHz的信号相加,生成包含两个频率分量的原始信号
%-------------------------------------------------------------------------
%-------------------------------------------------------------------------
%-------------------------------------------------------------------------
base_len = length(y);
f_label = zeros(1,base_len);%将采样点换算频域横坐标轴--频率
for i = 1:base_len
    f_label(i) = i*Fs/base_len;
end

y_len = base_len/8;
y_label = zeros(1,y_len);%将采样点换算频域横坐标轴--频率
for i = 1:y_len
    y_label(i) = (i*Fs/8)/y_len;
end
%-------------------------------------------------------------------------
%-------------------------------------------------------------------------
%-------------------------------------------------------------------------
base_sig = y;
base_fft = abs(fft(base_sig));
figure(1);
subplot(6,1,1);
plot(base_sig(1:1024),'b');grid;%观察原始信号的时域波形
title('原始时域信号');
subplot(6,1,2);
plot(f_label,base_fft,'b');grid;%观察原始信号的频域波形
title('原始频域信号');
%---------------------------------------------------------------------------
%---------------------------------------------------------------------------
%---------------------------------------------------------------------------
CFs=1;
CAstp=0.2;
CFp=0.4;
hcic = design(fdesign.decimator(8,'cic',1, CFp, CAstp, CFs),'SystemObject',true);
src = dsp.SignalSource(base_sig',128);
fir_out = zeros(N/8);
for i = 1 : N/128
    fir_out((i-1)*16+1:i*16) = hcic(src());%将原始信号通过APP设计的滤波器函数
end
fir_offt = abs(fft(fir_out));
subplot(6,1,3);
plot(y_label,fir_offt,'b');grid;%观察通过滤波器后的输出信号的频谱
title('过函数CIC滤波器频域信号');

subplot(6,1,4);
plot(fir_out(1:128),'b');grid;%观察通过滤波器后的输出信号
title('过函数CIC滤波器时域信号');

%--------------------------------------------------------------------------
%--------------------------------------------------------------------------
%--------------------------------------------------------------------------
cic_i1 = zeros(1,N);
cic_i2 = zeros(1,N);
for i=2:N
    cic_i1(i) = cic_i1(i-1)+base_sig(i);
end 
% for i=2:N
%     cic_i2(i) = cic_i2(i-1)+cic_i1(i);
% end 
cic_i2 = cic_i1;

cic_c1 = zeros(1,N);
cic_c2 = zeros(1,N);
for i=9:N
    cic_c1(i)=cic_i2(i)-cic_i2(i-8);
end 
% for i=9:N
%     cic_c2(i)=cic_c1(i)-cic_c1(i-8);
% end
cic_c2 = cic_c1;

cic_d = zeros(1,N/8);
for i=1:N/8
    cic_d(i) = cic_c2(i*8);
end 

cic_fft = abs(fft(cic_d));
subplot(6,1,5);
plot(y_label,cic_fft,'b');grid;%观察通过滤波器后的输出信号的频谱
title('自实现CIC滤波器频域信号');

subplot(6,1,6);
plot(cic_d(1:128),'b');grid;%观察通过滤波器后的输出信号
title('自实现CIC滤波器时域信号');

%---------------------------------------------------------------------------
%---------------------------------------------------------------------------
%---------------------------------------------------------------------------
%积分器和梳状滤波器/微分器的幅频曲线和相位曲线,D=8
%积分器:H1(z)=1/(1-z^-1)
%梳状滤波器:H2(z)=1-z^-D
%CIC滤波器:H3(z)=(1-z^-D)/(1-z^-1)
figure(2);
b1=[0,1];%分子
a1=[-1,1];%分母
h1=freqz(b1,a1,500);
subplot(6,1,1);
plot(abs(h1),'b');grid;
title('积分器的幅频响应');
subplot(6,1,2);
plot(angle(h1),'b');grid;
title('积分器的相位响应');

b2=[-1,0,0,0,0,0,0,0,1];
a2=[0,0,0,0,0,0,0,0,1];
h2=freqz(b2,a2,500);
subplot(6,1,3);
plot(abs(h2),'b');grid;
title('微分器的幅频响应');
subplot(6,1,4);
plot(angle(h2),'b');grid;
title('微分器的相位响应');

b3=[-1,0,0,0,0,0,0,0,1];
a3=[0,0,0,0,0,0,0,-1,1];
h3=freqz(b3,a3,500);
subplot(6,1,5);
plot(abs(h3),'b');grid;
title('CIC的幅频响应');
subplot(6,1,6);
plot(angle(h3),'b');grid;
title('CIC的相位响应');

文件:cic_fir.m

function Hd = cic_fir
%CIC_FIR Returns a multirate filter object.

% MATLAB Code
% Generated by MATLAB(R) 9.7 and DSP System Toolbox 9.9.
% Generated on: 17-Dec-2021 13:28:05

decf    = 8;  % Decimation Factor
diffd   = 1;  % Differential Delay
numsecs = 2;  % Number of Sections

Hd = dsp.CICDecimator( ...
    'DecimationFactor', decf, ...
    'DifferentialDelay', diffd, ...
    'NumSections', numsecs);

% [EOF]
 

 

  • 5
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: CIC滤波器是数字信号处理领域常用的一种滤波器,因其具有高效率、低成本、易于实现等特点,被广泛应用于数字信号处理中。其原理是将输入信号经过移位、累加、除法等操作,得到输出信号,实现数字信号的抽取、平滑和滤波处理。 CIC滤波器设计主要分为三个步骤:抽取因子的选择、CIC滤波器的结构设计和防止过载的设计。 首先,在选择抽取因子时,需要考虑信号的采样率、信噪比、带宽等因素,通过分析和对比,确定最适合的抽取因子。 其次,在实现CIC滤波器的结构设计时,需要根据信号的特点和要求,选择相应的结构类型和参数设置。常见的结构类型有单级CIC滤波器、多级CIC滤波器和差分CIC滤波器等,每种结构类型都有不同的特点和适用范围。 最后,在防止过载的设计方面,需要考虑信号的幅度和极值问题,采取适当的增益补偿措施,避免信号过载和失真。 总的来说,CIC滤波器在数字信号处理中具有广泛的应用前景和重要的研究价值,未来将继续发挥其优越的性能和特点,在滤波、调制、编码等方面取得更多的应用和进展。 ### 回答2: CIC滤波器(Cascaded Integrator-Comb Filter)是一种数字滤波器,由多个积分器和差分器级联而成。CIC滤波器的主要作用是在数字信号处理中进行抽取和插值操作,可以减少数据瓶颈,提高数据采样率,同时还能滤除高频信号成分。 CIC滤波器原理是将输入信号进行采样并缩小其幅度,然后通过积分器累加相邻样本的差值,最后再通过comb滤波器进行重叠平均,得到输出信号。CIC滤波器的具体设计需要考虑其采样率、抽取因子、插值因子等因素,同时还需要选择合适的滤波器结构和系数,以提高其滤波性能。 CIC滤波器的优点是具有低延迟、高精度、低复杂度等特点,适用于数字信号处理中的各种应用场景。同时,CIC滤波器也存在一些缺点,如滤波器的振荡问题、降噪性能不佳等,需要进一步优化和改进。 总之,CIC滤波器是数字信号处理中一种重要的滤波器,其原理设计是理解和应用数字滤波器的基础,可以在各种应用中发挥重要作用。 ### 回答3: CIC滤波器是数字信号处理中广泛使用的一种滤波器,它可以高效地对高速采样率的信号进行滤波。CIC滤波器的全称为“累加器-积分-累加器”滤波器,其结构简单,主要由一个累加器和一个积分器串联组成。 CIC滤波器的工作原理是:输入信号经过累加器和积分器的串联,先由累加器对过高的频率进行抑制,再由积分器对信号进行平滑处理,最后再经过一次累加器得到最终的输出信号。该滤波器的重点在于累加器和积分器的作用,累加器主要起到了抽取低频成分的作用,积分器则起到了对高频成分的滤波作用。 CIC滤波器设计需要确定一些关键参数,例如:采样率、截止频率和滤波器阶数。其中,采样率是指采样点数除以单位时间,截止频率是指需要滤除的频率范围,滤波器阶数指需要滤波的信号所需的级数。根据这些参数,可以使用相关的设计公式得到累加器、积分器、移位器和补偿器的参数,进而确定CIC滤波器的结构和组成。 总之,CIC滤波器作为一种高效的数字滤波器,其原理简单而明确,设计需要考虑到各种关键参数,合理选择参数将帮助开发人员设计出更加高效、精确的滤波器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

积文致远

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值