我正在创建一个由复杂混频器,CIC抽取器和FIR补偿/抽取滤波器组成的通道器。最终的FIR滤波器可能需要实现多个滤波器。 CIC过滤器?您是通过计算CIC响应的倒数来创建所需的频率响应,然后通过逆FFT运行它以获得脉冲响应吗?

您可以看到,尽管我的特殊问题与CIC滤波器,我的问题真的是关于如何创建任何类型的失真补偿滤波器。

谢谢您的时间。

评论

一个目的是在通信系统中尽早补偿失真的滤波器通常称为均衡器。这可能会为您提供更多信息,同时供您阅读。常见的类型有零强制均衡器(如果要补偿的系统的频率响应为零,则不是您想要的类型)和最小均方误差(MMSE)均衡器。

@JasonR我在通道补偿决策导向均衡器的背景下熟悉MMSE自适应均衡器,但是我怀疑那是您的意思。您会以某种方式训练均衡器吗?我想症结在于您如何确定错误所在。

MMSE仅指均衡器努力争取的标准。它可以是自适应的,也可以是非自适应的。如果您知道要补偿的系统传递函数以及任何附加噪声的自相关函数,并且两者都是随时间变化的,那么您可以推导出“ the” MMSE均衡器,该均衡器将随着时间而固定。当该信息无法准确知道或随时间变化(这很常见)时,可以使用自适应解决方案。

自适应滤波器通常包括一种训练模式,在该模式下,许多已知符号将通过系统传输,从而使接收器能够使其滤波器收敛于一组好的系数上。训练后,通常会进入跟踪阶段,在此阶段,将决策操作用于过滤器抽头的连续更新。作为替代方案,在SNR和ISI“足够好”的情况下,可以从一开始就将决策导向模式用作盲采集方案,从而跳过训练阶段。
在数学上很难找到关于该主题的阅读材料。我喜欢Haykin的“自适应滤波器理论”,但是要花一点时间才能简化数学运算(并且您需要一些坚实的线性代数背景)。它非常复杂,如果您不定期使用它,则需要先复习统计信号处理主题。

#1 楼

以下内容介绍了CIC补偿,而不是一般的“失真”技术。但是,“补偿”不变的“失真”是一种简单的方法。如果已知频率响应,则可以使用频率的倒数进行补偿。诸如CIC滤波器之类的示例由于复杂度降低而可能使用劣质滤波器,但这些信号会在信号链之后得到补偿。在这个例子中,频率响应是已知的,并且可以使用倒数。请注意,对于多速率滤波器,您只想在抽取后使用“可用”频谱。

通常,为了补偿CIC滤波器,可以使用CIC滤波器响应的倒数
来生成补偿滤波器。 CIC具有
响应(请参见参考文献[r2]或[r3])

$$
H(\ omega)= \ left | \ frac {sin(\ omega D / 2)} {sin(\ omega M / 2)} \ right | ^ N
$$

其中D是微分延迟,M是抽取率,N是滤波器的阶数(级联滤波器的数量)。逆可以指定为

$$
H(\ omega)= \ left | \ frac {sin(\ omega M / 2)} {sin(\ omega D / 2)} \ right | ^ 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')




其他方法和$ sinc ^ {-参见[r1] 1} $近似值。

[r1] Altera,“了解CIC补偿滤波器”

[r2] R. Lyons,“了解数字信号处理”,
2004年,新泽西州上萨德尔河,Prentice Hall,第2版。

[r3] R. Lyons,“了解级联积分梳状滤波器”

评论


$ \ begingroup $
参考1很棒,但是使用了不同的术语(M =阶段延迟,在其中使用D。R =降低率,在您使用M),所以花了我一段时间才能看到错误:您使用WM / 2 ,Altera指定pi F / R。快速浏览Excel后,我相信Altera版本是正确的。
$ \ endgroup $
–艾伦·坎贝尔
15年8月4日在5:16

$ \ begingroup $
@AlanCampbell如果绘制上述方程式(我在代码片段中所做的),您将发现没有错误。我没有在方程式中明确指出的是增益。注意,在代码片段中,我删除了增益。如果运行代码片段并修改M = 8和N = 9,则会创建与参考1相同的图。我使用的术语更接近参考2。
$ \ endgroup $
–克里斯托弗·费尔顿(Christopher Felton)
2015年12月9日19:12



#2 楼

我认为克里斯托弗的答案是一个很好的答案。我以为我可以为我们的惰性/加热器类型添加一个。

在研究Matlab的fdatool(滤波器设计和分析工具)时,我发现它可以设计和建模CIC和逆Sinc滤波器,其中正弦逆滤波器是CIC的失真补偿滤波器。

通过直接转到“创建多速率滤波器”页面(R2011b版本左侧的按钮)并指定CIC过滤器。然后,您可以设置所需的所有参数,例如插值/抽取率,级联数(Matlab称为“节”)等。

通过到“设计过滤器”页面(该工具启动时默认为该页面),并从“低通”下拉菜单中指定“反向Sinc低通”。然后可以为其设置各种参数。在对话框的“选项”部分中,它具有几个唯一的参数,其中包括“ p”,它对应于级联数(正弦指数)。但是,由于正确设置似乎比算算通带的位置更重要的是数学运算的实例,此时CIC的下垂是什么,然后设计一个可以大致抵消该下垂的滤波器。由于我的CIC过滤器具有四个级联,因此我以为我需要将“ p”设置为四个,但是这样做的话,它会被过度补偿。我最终将默认值“ p”保留为1。响应。这非常有帮助,而且容易实现。

#3 楼

在此不重复说明,请参阅

如何制作CIC补偿滤波器

,该示例展示了一种非常简单的CIC补偿三抽头解决方案。

这是CIC特有的,或者要求反向Sinc的任何应用(例如在D / A转换之前)。

为了补偿任何一般的横向失真(可以用横向滤波器来复制,而不是动态噪声失真),我将采用维纳霍夫方程来提供补偿滤波器使用最小二乘误差方法,最好使用训练序列(如果有)将期望值与实际响应进行比较并训练均衡器。有关使用源代码显示此信息的应用程序,请参见:

补偿音频信号中的扬声器频率响应