我正在创建一个由复杂混频器,CIC抽取器和FIR补偿/抽取滤波器组成的通道器。如果重要的话,最终的FIR滤波器可以实现为多个滤波器。
我的问题是,如何设计滤波器以补偿CIC滤波器的非平坦频率响应?您是否通过计算CIC响应的倒数来创建所需的频率响应,然后通过逆FFT对其进行运算以获得脉冲响应?
如您所见,尽管我的特定问题与CIC滤波器有关,但我的问题实际上是关于如何创建任何类型的失真补偿滤波器。
谢谢你的时间。
我正在创建一个由复杂混频器,CIC抽取器和FIR补偿/抽取滤波器组成的通道器。如果重要的话,最终的FIR滤波器可以实现为多个滤波器。
我的问题是,如何设计滤波器以补偿CIC滤波器的非平坦频率响应?您是否通过计算CIC响应的倒数来创建所需的频率响应,然后通过逆FFT对其进行运算以获得脉冲响应?
如您所见,尽管我的特定问题与CIC滤波器有关,但我的问题实际上是关于如何创建任何类型的失真补偿滤波器。
谢谢你的时间。
Answers:
以下内容介绍了CIC补偿,而不是一般的“失真”技术。但这是“补偿”不变的“失真”的简单方法。如果已知频率响应,则可以使用频率的倒数进行补偿。诸如CIC滤波器之类的示例由于复杂度降低而可能使用劣质滤波器,但这些信号会在信号链之后得到补偿。在这个例子中,频率响应是已知的,并且可以使用倒数。注意,对于多速率滤波器,您只想在抽取后使用“可用”频谱。
通常,为了补偿CIC滤波器,可以使用CIC滤波器响应的反函数来生成补偿滤波器。CIC的响应为(请参阅参考文献[r2]或[r3])
其中D是微分延迟,M是抽取率,N是滤波器阶数(级联滤波器的数量)。逆可指定为
一旦有了补偿滤波器的频率响应,我们就可以简单地选择所需的FIR滤波器的长度。FIR的长度取决于应用程序。显然,FIR滤波器越长,补偿越好。
以下是这种直接补偿的曲线图。
以下是创建频率响应和图的Python代码。
import numpy as np
from numpy import sin, abs, pi
import 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')
[r1] Altera,“了解CIC补偿滤波器”
[r2] R. Lyons,“了解数字信号处理”,第二版,Prentice Hall,新泽西州上萨德尔河,2004年
[r3] R. Lyons,“了解级联积分梳状滤波器”
M=8
和N=9
它创建作为参考1.我用的命名更接近基准2.同一地块
我认为克里斯托弗的答案是一个很好的答案。我以为我可以为懒惰/骗子类型添加一个。
在研究Matlab的fdatool(滤波器设计和分析工具)时,我发现它可以设计和建模CIC和反Sinc滤波器,其中Sinc反滤波器是CIC的失真补偿滤波器。
您可以直接进入“创建多速率过滤器”页面(R2011b版本左侧的按钮)并指定CIC过滤器来生成CIC过滤器。然后,您可以在其上设置所有参数,例如插值/抽取率,级联数(Matlab称其为“节”)等。
通过转到“设计过滤器”页面(该工具启动时默认为该页面),然后从低通下拉菜单中指定“反向Sinc低通”,可以创建反正弦滤波器。然后,您可以为其设置各种参数。在对话框的“选项”部分中,它具有几个唯一的参数,包括“ p”,它对应于级联数(正指数)。
但是,反正弦滤波器的设计并不完全令人满意,因为正确设置似乎比算算通带在哪里,CIC下降在那时是什么,而不是算术的实例,然后设计了一个可以抵消的滤波器下垂。由于我的CIC过滤器具有四个级联,因此我以为我需要将“ p”设置为四个,但是这样做的话,它的补偿方式会过高。我最终将“ p”保留为默认值1。
当我在会话中保存两个滤波器,然后进入滤波器管理器并对其进行级联以查看整体频率响应时,该工具真的发光了。这非常有帮助,而且很容易做到。
在这里不重复答复,请参阅
该图显示了用于CIC补偿的非常简单的3抽头解决方案。
这特定于CIC或需要逆Sinc的任何应用程序(例如在D / A转换之前)。
为了补偿任何一般的横向失真(可以用横向滤波器来复制,而不是动态噪声失真),我会采用使用Wiener Hopf方程的方法,使用最小二乘误差方法来提出补偿滤波器,理想情况下使用训练序列(如果有)将期望值与实际响应进行比较并训练均衡器。对于使用源代码显示此信息的应用程序,请参见: