呵呵。我刚刚解决了这个问题,我认为您可以使用浮点实现 CIC——但这并不完美,在大多数处理环境中,这会浪费资源。
基本的 CIC 阶段是一个以最大数为模实现的积分器——在整数实现中,这将是xmax=2n在哪里n是字长,在非整数定点实现中,它将是数据类型可以容纳的最大值跨度。
xk=(xk−1+uk)modxmaxyk=(xk−xk−N)modxmax
其中 "映射到区间 .y=xmodxmaxxy∈[−xmax2,xmax2)
您选择以便在个样本中,的值不可能多次翻转。xmaxNxk
使 CIC 在浮点环境中不太实用的事情是,您必须明确地进行模运算,要么通过实际进行浮点模运算,要么通过检测或在并通过添加或减去来调整它们。xkyk[−xmax2,xmax2)xmax
使 CIC 在浮点运算中不够精确的原因是浮点算术根据指数或多或少地截断。
CIC 对快速、计算效率高的 DSP 如此有吸引力的原因是因为使用定点(整数或非整数)数学,是因为使用典型的加法器硬件和 2 的部分算术,模运算是免费的——它只是固定的——字宽溢出通常是定点运算的祸根。因此,您无需为模数支付任何费用 - 从某种意义上说,比没有支付任何费用*。
CIC 是精确的原因是因为如果所有参数都是具有相同基数(即整数)的定点,那么所有操作都是位精确的。这不能说是浮点数。
所以——在浮点环境中,您可以实现 CIC 过滤器。但是,您将花费大量额外的计算资源来执行这两个模运算,因此您也可以执行其他操作,例如半带滤波器。在我看来,在浮点中使用 CIC 唯一有意义的地方是,如果您正在测试台上工作并且想要模拟稍后将要实现的系统。
* 因为您不必担心检测或阻止它。