FPGA定点数字信号处理技巧(一)

    科技2022-08-26  108

    引言

          在数字信号处理或者其他算法中涉及到的大部分计算都是浮点小数的计算,但是FPGA只能进行整数的计算。因此,我们在考虑数字信号处理或其他算法的FPGA实现时,就不得不寻求在FPGA中进行小数计算的方法。本次博文主要介绍在FPGA中进行高效数字信号处理时的定点处理技巧。

    1、浮点小数定点量化概念

          由于在FPGA中进行计算时,参与运算的数的位宽都是有限制的,是恒定的,因此需要将参与运算的浮点小数定点化,限制浮点小数的位宽到FPGA中所允许的位宽范围之内。

          首先介绍一下一些基本概念,浮点小数是指小数点位置是浮动的小数,定点小数是指小数点位置是固定的小数,定点量化就是使用有限数位来表示无限精度的数。下面以一个例子来说明:

          假设十进制数为:3.671875

          用二进制数可表示为:11.101011,位宽为8

          定点量化,限制整数位为2位,小数位为5位后,可表示为:11.10101,此时代表的是十进制数为3.65625,量化误差为              3.671875-3.65625=0.015625。

          上述定点小数11.10101即叫做十进制小数3.671875定点量化后的定点小数,存在量化误差。讲到这里大家或许还有疑问,我们这个小数点该如何表示呢? FPGA只能处理整数啊,这定点量化后不还是小数吗?

          其实上述定点量化的过程只是为了固定计算数据的位宽而开展的,由于定点量化是具有量化误差的,因此我们需要在正式计算开始前,在定点量化误差允许的情况下选择合适的数据位宽,然后为后续正式开展小数计算而服务,这个数据位宽的确定是要以算法仿真为基础的,即量化误差不会对算法结果产生很大的影响。

    2、FPGA进行小数计算的详细流程

          在根据第一节所介绍的方法正式确定数据位宽后,即可进行下一步的小数计算。

          首先介绍一下Qn编码和反Qn编码的概念,Qn编码是将数据进行归一化后乘以2的n次方的处理方法。反Qn编码是指将数据除以2的n次方的处理方法。

    第一步:将输入数据批归一化,归一化方法一般采用(0,1)标准化的方法,如下所示;

    将归一化浮点数量化为定点数(其他各种量化方法将在后续文章进行介绍);将量化后的定点数进行Qn编码(n应该大于等于定点小数的小数位数),得到的数是一个整数;将Qn编码后的数据按照相应算法公式进行计算,得到结果,该结果仍然为整数,计此时的整数对应的编码为Qm编码;将数据进行反Qm编码,将整数转化为小数;然后根据采用的归一化公式,对该小数进行逆归一化,得到最终结果。

          注意事项:

    Qm编码乘以Qn编码,得到的结果是Q(m+n)编码;Qm编码除以Qn编码,得到的结果是Q(m-n)编码;如果两种不同位宽的编码(Qm编码和Qn编码)想要进行加法或减法,则需要先进行移位,使得编码一致后才能计算。

          

    Processed: 0.018, SQL: 9