CIC滤波器设计
CIC滤波器实现简单,资源消耗少(只需要加法器),成为变采样率系统中比较常用的滤波器,但也需要在合适的场景中使用,不然对信号质量会造成较大影响。
我们可以通过matlab的filter designer了解CIC滤波器的各种特性。通过图1和图2找到CIC滤波器设计窗口。
从幅频曲线中容易得出CIC滤器器通带平台性差,过渡带宽,带外抑制性能起伏较大。
带外抑制性能可以通过增加CIC级数(Number Of Sections)来提升,但这会对通带平坦性带来负面影响,具体设计CIC时需要折中该参数。
通常在C语言实现CIC时,可以将该参数设计为偶数,这样会使拖尾是一个整数,方便去掉数据首尾的无效值。更进一步,设计为2,4,8时,归一化可以直接通过移位实现。
当我们使用CIC时,需要保证 有用信号的fmax应足够小于fs/2/Mcic ,其中Mcic为内插倍数。这样才能保证在有效带宽内足够的平坦度,一般fmax相对于直流衰减不能超过0.5dB.
所以在变速率系统中,CIC一般作为最后数字滤波器的前端(靠近模拟域),如上采样系统中信号先经过限带成型滤波器(低通FIR),HB滤器组,最后经过CIC到DAC速率。
下图为8倍上采样的图示。
需要注意的是为了保证CIC前后信号时域采样点平均功率的一致性,在第一级CIC滤波器中没有做归一化,这部分增益正好可以补偿上采样插0带来采样点功率的损失。后续每一级都要做归一化,防止溢出。
clear;clc;close all;
%% load data symbols from RRC out,make sure fmax << fs/2/Mcic
load('zeroDataFilterOut.mat') % 8x oversampling signal
symbPower = funCountPower(zeroDataFilterOut); % Power before filter
%% CIC filter for interpolate 8 times
Mcic = 8;
coefCic = ones(Mcic,1);
N = 4; % number of CIC section
modDataZero8x = upsample(zeroDataFilterOut,Mcic);
txPower = funCountPower(modDataZero8x); % Power after zero insertion
%% filter
dataFilterTemp = conv(modDataZero8x,coefCic); % First CIC section
for i = 1:N-1
dataFilterTemp = conv(dataFilterTemp,coefCic)/Mcic;
end
tailLen = N*(Mcic-1)/2;
dataOut = dataFilterTemp(tailLen+1:end-tailLen);
outPower = funCountPower(dataOut); % Power after filter
CIC滤波器
CIC滤波器是无线通信的常用模块,一般用于数字下变频(DDC)核数字上变频(DUC)系统。CIC滤波器结构简单,没有乘法器,只有加法器、积分器和寄存器,可以实现高速滤波,常用在输入采样率最高的第一级。
1.单级CICI滤波器
CIC滤波器包括两个基本组成部分:积分部分和梳妆部分,如图所示:
积分部分的积分器是单极点的IIR滤波器,并且反馈系数为1,状态方程为:
上述的积分器也可以看做是累加器。根据Z变换,积分器的传输函数为:
梳妆器是一份FIR滤波器,其状态方程为:
式中,D是设计参数,称为微分延迟,其传输函数为:
那么:单级CIC滤波器的传递函数为:
令
带入上式,可以得到传递函数的幅频响应为:
CIC滤波器的幅频响应特性如图所示,其中[0,2π/DM]为主瓣,其他的区间称为旁瓣。
从幅频响应特性可以看到,主瓣的最大值为DM(在 w=0时w=0时),旁瓣的最大值在 w=3π/DMw=3π/DM处 取得
它与主瓣电平的差值为:
根据在 θ在0~ 45°时, θ≈sinθ,可得:
可见单级CIC滤波器的旁瓣电平较大,阻带衰减较差。为降低旁瓣电平,可以采用多级CIC滤波器级联办法来实现。
2.多级CICI滤波器
一个N级CIC抽取滤波器系统传递函数为:
在N级级联时,阻带衰减为单级衰减的N倍,即13.46×N(dB)。
CIC的滤波器
CIC cascade imtegrator comb,积分梳状滤波器CIC滤波器最初由Hogenauer提出,因为它结构简单,没有乘法器,只用加法器、积分器和寄存器,适合工作在高采样率。而且,CIC滤波器是一种基于令吉电相消的FIR滤波器,已经被证明是在高速抽取或插值系统中非常有效的单元。CIC滤波器包括两个基本部分:积分部分和梳状部分。单级CIC抽取滤波器如图1所示:单级CIC插值滤波器如图2所示:
matlab里设计CIC滤波器该用哪个函数
matlab里设计cic滤波器的函数有以下两种:
1. fdesign.decimator
例如:设定好采样频率Fs, 信号带宽Fp, 阻带衰减As, 差分时延m及降采样比D就可以得到cic滤波器的传输函数
d1 = fdesign.decimator(D,'CIC',m,Fpass,As,Fs);
Hcic = design(d1);
2. mfilt.cicdecim (fixed-point CIC decimator, mfilt是matlab里专门用来设计多速率信号处理滤波器的一套函数)
hm = mfilt.cicdecim(decimation_factor,differential_delay,NumberofSections);
decimation_factor为降采样比,differential_delay同上为差分时延,NumberofSections为cic滤波器的节数,与第一个函数相比,这个函数没有规定采样滤波,通带宽度、阻带衰减等