问题1:为什么进行扩位、截位???
两个M位的数相加,结果最高可能为M+1位;两个M位的数相乘,结果最高可能为2M位。但是随着相乘运算的增加,量化位数太多,一方面占资源,另一方面对处理精度也不会带来改善。因此必须进行截位操作。
问题二:怎么选择截取位数???
截取位数太多,就会丢失有用的信息比特,造成很大误差,截取位数太少,太占资源。所以截取位数的目标是,截位后的定点仿真达到浮点运算的效果。
在这里,我们选择正数直接截位,即除以2N,负数截位后+1的方式。
问题三:截位有几种方法???
截位可以选择截取高位和低位,一般选择去低位,保留高位(round)的截取方法。且在实际工程中,不能直接截去低几位,对于正负数,要考虑进位!
而去高位保留低位的方法又称为饱和截取法(saturation),需判断截去的高几位是否全0或者全1,是则表示符号扩展位,则截位不会产生溢出,可直接保留低几位;若否,则直接保留会产生溢出,故进行饱和处理(最大值表示),正数用01111…、负数用10000…保留。
问题四:量化、截位、反量化之间区别???
1.量化实质上是将原浮点数据归一化后(变为<1的小数),再按比例放大,变为整数定点(int)表示;
2.截位实质是将很大的定点整数按比例缩小为小的定点整数;
3.反量化实质是将定点数按原始量化比例缩小为浮点数。