为什么我的滤波器输出不准确?

时间:2009-07-18 02:37:20

标签: matlab filter

我正在模拟一个4阶段的数字滤波器。

阶段是:

  1. CIC
  2. 半带
  3. OSR
  4. 128
  5. 输入为4位,输出为24位。我对24位输出感到困惑。

    我使用MATLAB生成4位带符号的sinosoid输入(使用SD工具),并使用modelsim进行模拟。所以输出也应该是一个sinosoid。问题是输出只包含4个不同的数据。

    对于24位输出,我们不应该获得2 ^ 24-1个不同的数据吗? 这是什么原因?是因为内部位宽?

3 个答案:

答案 0 :(得分:1)

我不熟悉Modelsim,我不了解您使用的过滤器术语,但是......您的滤波器线性系统是什么?如果是这样,给定频率的输入将导致相同频率的输出,尽管可能具有不同的幅度和相位。如果您的输入信号是单音,采样使得每个周期有四个值,则每个周期输出仍然有四个值。除非其中一个阶段执行采样率转换,否则系统将按预期运行。正如Donnie DeBoer所指出的那样,计算的单词宽度无关紧要,只要它可以代表输入的四个值。

同样,我不熟悉您系统的详细信息,因此如果其中一个阶段确实执行了采样率转换,则不适用。

答案 1 :(得分:0)

原谅我缺乏过滤器知识,但其中一个过滤器阶段是否在输入值之间进行插值?如果没有,那么无论您的输出分辨率如何,您最多只能获得2 ^ 4个输出值(基于输入分辨率)。仅仅因为输出到24位并不意味着你将拥有2 ^ 24个值...想象一下将数字方波运行到D-> A转换器中。您拥有世界上所有的输出分辨率,但您仍然只有2个值。

答案 2 :(得分:0)

其实非常简单:

  1. 即使您有4位输入,您的滤波器系数也可能超过4位。
  2. 你做的每个数学阶段都会增加位数。如果添加两个4位值,则答案是5位数,因此添加0xf和0xf不会溢出。当您将两个4位值相乘时,实际上需要8位输出来保持答案而不会出现溢出。所有数学运算完成后,您的4位输入显然需要24位来保持最大可能输出。