在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5299|回复: 11

[求助] CIC数据截取时的直流增益问题

[复制链接]
发表于 2012-7-7 09:38:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
各位大侠好:

    我目前在做降采样滤波器,降采样滤波的时候,由于字长增长问题,需要将数据截取一段作为最终输出,但在数据截取的时候,在频谱上产生了一个直流分量,这个直流分量该怎么消除?
附上代码。

(代码为功能代码。在网上下的)

module cic3s32 (clk, x_in, clk2, y_out); //----> Interface
  input        clk;
  input   x_in;
  output [15:0] y_out;
  output clk2;
  reg  clk2;
  parameter hold=0, sample=1;
  reg [1:0] state;
  reg [4:0]  count;
  reg    x;                     // Registered input
  wire [25:0] sxtx;                  // Sign extended input
  reg  [25:0] i0;                    // I section 0
  reg  [20:0] i1;                    // I section 1
  reg  [15:0] i2;                    // I section 2
  reg  [13:0] i2d1, i2d2, i2d3, i2d4, c1, c0; // I + COMB 0
  reg  [12:0] c1d1, c1d2, c1d3, c1d4, c2; // COMB section 1
  reg  [11:0] c2d1, c2d2, c2d3, c2d4, c3; // COMB section 2
      
  always @(posedge clk)
  begin : FSM
    if (count == 31) begin
        count <= 0;
        state <= sample;
        clk2  <= 1;
      end
    else begin
        count <= count + 1;
        state <= hold;
        clk2  <= 0;
      end
  end
  assign sxtx = {{18{x[7]}},x};
  always @(posedge clk)
  begin : Int
      x   <= x_in;
      i0  <= i0 + sxtx;        
      i1  <= i1 + i0[25:5];        
      i2  <= i2 + i1[20:5];  
  end
  always @(posedge clk)
  begin : Comb
    if (state == sample) begin
      c0   <= i2[15:2];
      i2d1 <= c0;
      i2d2 <= i2d1;
      c1   <= c0 - i2d2;
      c1d1 <= c1[13:1];
      c1d2 <= c1d1;
      c2   <= c1[13:1] - c1d2;
      c2d1 <= c2[12:1];
      c2d2 <= c2d1;
      c3   <= c2[12:1] - c2d2;
    end
  end
  assign y_out = c3[11:2];
endmodule
 楼主| 发表于 2012-7-7 17:09:17 | 显示全部楼层
求解,这个直流分量可以消除吗?还是可以控制在一定范围内,不可能完全消除?
发表于 2012-7-8 10:00:35 | 显示全部楼层
用round不要用clip
 楼主| 发表于 2012-7-8 10:08:51 | 显示全部楼层
回复 3# tigerjade


    具体操作是怎么操作的?判断最高位和截取的下一位?只有2‘b01时加1’b1.
发表于 2012-7-8 21:49:45 | 显示全部楼层
四舍五入时正负应是对等的,比如0.5取为1,那-0.5那应取为-1,而不是0
 楼主| 发表于 2012-7-9 07:59:34 | 显示全部楼层
回复 5# eaglelsb


    想要知道具体的操作流程,我c[22:0]。我取其中的c[22:2]赋给d[20:0]。也就是d[20:0] <= c[22:2]。那我该怎么四舍五入?我通过判断{c[22],c[0]}。
但老做不对。您能告诉我具体操作吗?谢谢了。
 楼主| 发表于 2012-7-9 09:41:44 | 显示全部楼层
回复 5# eaglelsb


    等待您的回复……
 楼主| 发表于 2012-7-9 10:04:30 | 显示全部楼层
回复 5# eaglelsb


    我这样比较吧。-9的补码是1 0111
右移1位
1 011 是-5
本来该是-4.5的,现在移位,-5

我觉得,负数貌似不需处理
您说呢?
发表于 2012-7-9 12:56:26 | 显示全部楼层
本帖最后由 eaglelsb 于 2012-7-9 13:39 编辑

我这里举几个例子,5 bit数据
10011  值-13, 除以4,得-3.25, 四舍五入,得-3
10010     -14                 得-3.5                     得-4
10001     -15                  得-3.75                  得-4
10000     -16                   得-4                       得-4

像除以4这种操作,只有后两位都是11时,才是需要直接右移两位再+1的,别的直接截掉两位。
发表于 2012-7-9 13:43:46 | 显示全部楼层
回复 8# wanglscool

如果只是除以2的话,对于负数来说,都一样,除以4的话,则要考虑最后两BIT为11的情况与其它不一样的。


其实就是关于中间那个点的问题, -0.5 这个可归为-1, 但是比-0.5再多一点点,或少一点点,值倾斜的方向就变了,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-20 07:10 , Processed in 0.023365 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表