FPGA滤波器几种舍入方式和误差分析及verilog实现

1.        舍入与截尾误差,补码截尾,会有负的直流偏置;

 

FPGA二进制几种截尾和舍入方法比较:

wire signed [15:0] scaletypeconvert1;

wire signed [37:0] scale1;

1.        Round Mode: fix——filter_zero

scaletypeconvert1= $signed({scale1[37:22]} + (scale1[37] & |scale1[21:0]));

2.        Round Mode : round——filter_Round

scaletypeconvert1 = (scale1[37:0] + {~scale1[37],{21{scale1[37]}}})>>>22;

3.        Round Mode : convergent——filter_near_convergent

scaletypeconvert1 = (scale1[37:0] + {scale1[22],{21{~scale1[22]}}})>>>22;

4.        Round Mode  : nearest——filter_near

scaletypeconvert1 = (scale1[37:21] + 1)>>>1;

5.        Round Mode  : floor——filter_floor

scaletypeconvert1 = scale1[37:22];

6.        Round Mode : ceil——filter_Ceil

scaletypeconvert1= scale1[37:22] + |scale1[21:0]

虽然在舍入过程中总会损失精度,但是不同的舍入模式还是会引入不同的资源消耗和精度误差,为了给您提供在资源消耗和精度误差之间权衡的灵活性,DSP System Toolbox software 支持以下几种舍入模式:

   1.Ceiling ,将计算结果向着正无穷的方向舍入到最近的整数;对应 ceil 函数。

   2.Convergent,将计算结果向着最近的整数舍入,如果出现1/2的情况,向着最近的偶数舍入;在DSP System Toolbox中,这是 least biased 的舍入模式;对应 convergent 函数。

   3.Floor,等效于 truncation ,将计算结果向着负无穷的方向舍入到最近的整数;对应 floor 函数。

   4.Nearest ,将计算结果向着最近的整数舍入,如果出现1/2的情况,向着正无穷的方向舍入到最近的整数;对应 nearest 函数。

   5.Round ,将计算结果向着最近的整数舍入,如果出现1/2的情况,对于正数,向着正无穷的方向舍入到最近的整数;对于负数,向着负无穷的方向舍入到最近的整数;对应 round函数。

   6.Simplest ,用在 simulink 中,有 simulink 根据情况判断,自动进行舍入。

   7.Zero ,将计算结果向着0方向舍入,对应 fix 函数。


需要综合考虑FPGA综合面积和舍入精度。个人用的是near舍入方式,near convergent面积最大,floor、ceil、zero舍入方式会有直流偏置,在进行IIR滤波器设计时特别明显。

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值