使用级联积分梳 (CIC) 滤波器抽取窄带信号时,哪个 FIR 滤波器更适合补偿 CIC 频率响应?
使用 CIC 抽取滤波器时的 FIR 滤波器补偿器
有一个类似的问题,https://dsp.stackexchange.com/a/1551/306,以下是另一篇帖子的答案的一个子集。
通常,为了补偿 CIC 滤波器,可以使用 CIC 滤波器响应的倒数来生成补偿滤波器。CIC的回应是2
其中 D 是微分延迟,M 是抽取率,N 是滤波器阶数(级联滤波器的数量)。逆可以指定为
一旦我们有了补偿滤波器的频率响应,我们就可以简单地选择我们想要的 FIR 滤波器的长度。FIR 的长度是特定于应用程序的。显然,FIR 滤波器越长补偿越好。
以下是这种直接补偿的图表。
以下是用于创建频率响应和绘图的 Python 代码。
将 numpy 导入为 np 从 numpy 导入 sin、abs、pi 导入 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')
请参阅Altera,“了解 CIC 补偿滤波器”,了解其他方法和近似值1。
2 R. Lyons,“理解数字信号处理”,第 2 版,Prentice Hall,上萨德尔河,新泽西州,2004 年
您的问题没有单一的答案:与任何过滤器设计问题一样,这取决于您的要求。正如维基百科页面上很好描述的那样,CIC(级联积分梳)滤波器由多对积分器和梳状级(因此得名)组成。每个积分器梳状级都有一个聚合脉冲响应,相当于一个棚车滤波器(即具有矩形频率响应的滤波器)。Boxcar 的频率(幅度)响应具有类似于 sinc 函数的形状,因此整个 CIC 结构将具有幅度响应,看起来像 sinc 函数的某种功率, 在哪里是积分梳级数。
但是,根据任何特定于应用程序的要求,您无需调整很多旋钮。您可以调整 CIC 结构的抽取/插值比、梳状延迟和级数,但您仍然会遇到类似 sinc 的频率响应,这并不是特别理想,因为它在整个主瓣和具有相对较高的旁瓣。因此,CIC 后面通常会跟着另一个“清理”整体响应的过滤器。
问题:您在 CIC 之后放置的任何补偿过滤器所需的内容将由您的应用程序定义。真正重要的是整个级联的响应,您可以根据应用程序的需要对其进行限制。没有“最合适”的特定过滤器。
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 之后用于抽取。