使用浮点实现 CIC 滤波器

信息处理 过滤器设计 抽取 固定点 多相 浮点
2022-02-01 15:55:21

我正在尝试实现 CIC 过滤器,并且正在阅读文献,发现 CIC 过滤器无法使用浮点实现。我无法理解为什么会发生这种情况。到处给出的理由似乎是积分器在使用浮点时不稳定,但我无法理解为什么会这样。有人可以解释这将如何发生吗?

我还发现使用多相分解将允许浮点实现,但我不确定这将如何发生,因为传递函数仍然相同。我无法为此找到令人满意的解释。这是进行浮点实现的唯一方法吗?

我还读到如果抽取因子很高,CIC 滤波器很好,但我正在寻找大约 5 到 20 的抽取因子。为什么在这种情况下使用 CIC 滤波器不是一个好方法。

3个回答

呵呵。我刚刚解决了这个问题,我认为您可以使用浮点实现 CIC——但这并不完美,在大多数处理环境中,这浪费资源。

基本的 CIC 阶段是一个以最大数为模实现的积分器——在整数实现中,这将是xmax=2n在哪里n是字长,在非整数定点实现中,它将是数据类型可以容纳的最大值跨度。

xk=(xk1+uk)modxmaxyk=(xkxkN)modxmax

其中 "映射到区间 .y=xmodxmaxxy[xmax2,xmax2)

您选择以便在个样本中,的值不可能多次翻转。xmaxNxk

使 CIC 在浮点环境中不太实用的事情是,您必须明确地进行模运算,要么通过实际进行浮点模运算,要么通过检测并通过添加或减去来调整它们。xkyk[xmax2,xmax2)xmax

使 CIC 在浮点运算中不够精确的原因是浮点算术根据指数或多或少地截断。

CIC 对快速、计算效率高的 DSP 如此有吸引力的原因是因为使用定点(整数或非整数)数学,是因为使用典型的加法器硬件和 2 的部分算术,模运算是免费的——它只是固定的——字宽溢出通常是定点运算的祸根。因此,您无需为模数支付任何费用 - 从某种意义上说,比没有支付任何费用*。

CIC 是精确的原因是因为如果所有参数都是具有相同基数(即整数)的定点,那么所有操作都是位精确的。这不能说是浮点数。

所以——在浮点环境中,您可以实现 CIC 过滤器。但是,您将花费大量额外的计算资源来执行这两个模运算,因此您也可以执行其他操作,例如半带滤波器。在我看来,在浮点中使用 CIC 唯一有意义的地方是,如果您正在测试台上工作并且想要模拟稍后将要实现的系统。

* 因为您不必担心检测或阻止它。

请参阅 Robert Bristow-Johnson 的这篇文章,顺便说一下,我认为他在这个堆栈交换组上发帖。

https://www.dsprelated.com/showthread/comp.dsp/364544-1.php

这篇文章是关于移动平均滤波器的,但 CIC 滤波器基本上是带有抽取或插值的 RMA 滤波器。

有关浮点运算问题的更多信息

https://stackoverflow.com/questions/10371857/is-floating-point-addition-and-multiplication-associative

您可以通过将梳状滤波器级放在第一级并将积分器放在第二级来缓解这个问题,这样当您应用 DC 值时,您的积分器将永远不会饱和。但是,您最终可能仍会在积分器中获得一些您无法摆脱的剩余价值。

对于第二个问题,CIC 滤波器没有平坦的通带,因此它们通常与另一个低通 FIR 滤波器结合使用以获得更平坦的通带。

您是否考虑过使用半带滤波器进行抽取,而不是使用 CIC 滤波器?与 CIC 滤波器相比,它们效率更高,通带更平坦。https://en.wikipedia.org/wiki/Half-band_filter

我认为浮点数不能以完全相同的形式直接使用的原因在于 CIC 如何处理翻转,此外还会产生随 CIC 累加器内部电平变化的量化误差:CIC 本质上是减去一个积分结果(累加器输出)来自 N 个样本前的相同结果(其中 N 通常是抽取率,但不一定是)。使用定点算术,即使在累加器不可避免的溢出之后,减法的结果也是相同的——浮点的情况并非如此,因此累加器需要额外的复位功能来防止溢出或下溢。

最简单形式的级联梳状积分器是累加器 (Integrator),后跟 N 个样本 (Comb) 上累积输出的差值,对于固定点,它等效于 N 个样本移动平均值,并且(仅对于固定点)操作顺序可以互换(在累加器和梳子之间):

CIC 实施

由于累加器中会引入随机游走错误,因此首先出现差分后跟累加器的底层实现不能在浮点中实现,但是首先使用累加器的实现(如在 CIC 抽取器中使用的那样)不会有其他此类问题而不是要求在上溢/下溢条件附近复位累加器。

CIC结果

浮点中将发生的是与累加器中的电平成比例的量化误差,因此累加器可以浮动到如此大的数字,以至于对于较低的累加器输出值,将以非常高的精度测量给定的差值当指数更高甚至最终完全截断时,精度会低得多。 ,则考虑单精度浮点实现在这种情况下,差异将被截断为 12,一旦它增长到,相同的差异将为零。2×10162×1017