如何创建失真补偿滤波器


11

我正在创建一个由复杂混频器,CIC抽取器和FIR补偿/抽取滤波器组成的通道器。如果重要的话,最终的FIR滤波器可以实现为多个滤波器。

我的问题是,如何设计滤波器以补偿CIC滤波器的非平坦频率响应?您是否通过计算CIC响应的倒数来创建所需的频率响应,然后通过逆FFT对其进行运算以获得脉冲响应?

如您所见,尽管我的特定问题与CIC滤波器有关,但我的问题实际上是关于如何创建任何类型的失真补偿滤波器。

谢谢你的时间。


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

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

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

自适应滤波器通常包括一种训练模式,在该模式下,许多已知符号将通过系统传输,从而使接收器能够使其滤波器收敛于一组良好的系数上。训练后,通常会进入跟踪阶段,在此阶段,将决策操作用于过滤器抽头的连续更新。作为替代方案,在SNR和ISI“足够好”的情况下,可以从一开始就将决策导向模式用作盲采集方案,从而跳过训练阶段。
杰森R

在数学上很难找到关于该主题的阅读材料。我喜欢Haykin的“ 自适应滤波器理论”,但要花一点时间才能简化数学运算(并且您需要一些坚实的线性代数背景)。它非常复杂,如果您不定期使用它,则需要先复习统计信号处理主题。
杰森R

Answers:


9

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

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

Hω=|s一世ñωd/2s一世ñω中号/2|ñ

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

Hω=|s一世ñω中号/2s一世ñωd/2|ñ

一旦有了补偿滤波器的频率响应,我们就可以简单地选择所需的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')

s一世ñC-1个

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

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

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


参考1很好,但是使用了不同的术语(M =阶段延迟,使用D时,R =降低率,使用M时),所以花了我一段时间才能看到错误:您使用WM / 2,Altera指定pi F / R。快速浏览Excel后,我相信Altera版本是正确的。
艾伦·坎贝尔

@AlanCampbell如果绘制上述方程式(我在代码片段中所做的),您将看到没有错误。我没有在方程式中明确指出的是增益。注意,在代码片段中,我删除了增益。如果你运行该代码剪断,并修改M=8N=9它创建作为参考1.我用的命名更接近基准2.同一地块
克里斯托弗·费尔顿

2

我认为克里斯托弗的答案是一个很好的答案。我以为我可以为懒惰/骗子类型添加一个。

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

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

通过转到“设计过滤器”页面(该工具启动时默认为该页面),然后从低通下拉菜单中指定“反向Sinc低通”,可以创建反正弦滤波器。然后,您可以为其设置各种参数。在对话框的“选项”部分中,它具有几个唯一的参数,包括“ p”,它对应于级联数(正指数)。

但是,反正弦滤波器的设计并不完全令人满意,因为正确设置似乎比算算通带在哪里,CIC下降在那时是什么,而不是算术的实例,然后设计了一个可以抵消的滤波器下垂。由于我的CIC过滤器具有四个级联,因此我以为我需要将“ p”设置为四个,但是这样做的话,它的补偿方式会过高。我最终将“ p”保留为默认值1。

当我在会话中保存两个滤波器,然后进入滤波器管理器并对其进行级联以查看整体频率响应时,该工具真的发光了。这非常有帮助,而且很容易做到。


0

在这里不重复答复,请参阅

如何制作CIC补偿滤波器

该图显示了用于CIC补偿的非常简单的3抽头解决方案。

这特定于CIC或需要逆Sinc的任何应用程序(例如在D / A转换之前)。

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.