当使用级联积分梳状(CIC)滤波器抽取窄带信号时,哪个FIR滤波器更适合补偿CIC频率响应?
当使用级联积分梳状(CIC)滤波器抽取窄带信号时,哪个FIR滤波器更适合补偿CIC频率响应?
Answers:
您的问题没有一个唯一的答案:与任何滤波器设计问题一样,这取决于您的要求。正如在Wikipedia页面上很好地描述的那样,CIC(级联积分器梳状)滤波器由许多对积分器和梳齿级组成(因此得名)。每个积分梳齿级都有一个总的脉冲响应,它相当于一个箱式滤波器(即具有矩形频率响应的滤波器)。棚车的频率(幅值)响应具有类似于Sinc函数的形状,因此整个CIC结构将具有一个幅值响应,看起来像对某些功率的Sinc函数,其中是积分梳齿级数。N
但是,没有很多旋钮可以根据特定于应用程序的要求进行调整。您可以调整CIC结构的抽取/内插比,梳状延迟和级数,但仍然会遇到类似Sinc的频率响应,这并不是特别理想,因为它在整个SIC上并不平坦主瓣,具有较高的旁瓣。因此,通常在CIC之后是另一个“清理”整体响应的过滤器。
难题:您需要在应用程序中定义在CIC之后放置的任何补偿滤波器中的需求。真正重要的是整体级联的响应,您将根据应用程序的需求对其进行约束。没有“最合适”的特定过滤器。
有一个类似的问题,https://dsp.stackexchange.com/a/1551/306,以下是另一篇文章的答案的子集。
通常,为了补偿CIC滤波器,可以使用CIC滤波器响应的反函数来生成补偿滤波器。CIC的回应为2
其中D是微分延迟,M是抽取率,N是滤波器阶数(级联滤波器的数量)。逆可指定为
一旦有了补偿滤波器的频率响应,我们就可以简单地选择所需的FIR滤波器的长度。FIR的长度取决于应用程序。显然,FIR滤波器越长,补偿越好。
以下是这种直接补偿的曲线图。
以下是创建频率响应和图的Python代码。
从numpy导入sin,abs,pi导入numpy作为np导入pylab
D = 1; M = 7; N = 3
Hfunc = lambda w : abs( (sin((w*M)/2)) / (sin((w*D)/2.)) )**N
HfuncC = lambda w : abs( (sin((w*D)/2.)) / (sin((w*M)/2.)) )**N
w = np.arange(1024) * pi/1024
G = (M*D)**N
H = np.array(map(Hfunc, w))
Hc = np.array(map(HfuncC, w))
# only use the inverse (compensation) roughly to the first null.
Hc[int(1024*pi/M/2):] = 1e-8
plot(w, 20*log10(H/G))
plot(w, 20*log10(Hc*G))
grid('on')
2 R. Lyons,“了解数字信号处理”,第二版,新泽西州上萨德尔河Prentice Hall,2004年
ISOP(内插二阶多项式)通常用于补偿CIC通带下垂。
该过滤器的Matlab响应可使用以下方式显示:
alpha = 0.01 ;
b = [1, alpha, -alpha] ;
h = mfilt.firsrc(1,1,b)
freqz( b )
为您的需求选择Alpha是棘手的部分。最坏的情况是瓶坯蛮力仿真,以0.001的增量在0到0.5之间循环,找到导致最佳下垂补偿的alpha。将最佳下垂补偿定义为通带边缘的最小误差。
为了提高效率,通常将此滤波器以较低的数据速率放置在插值CIC之前和抽取CIC之后。