定点仿真方法的学习笔记(一)
在用MATLAB工具对算法进行仿真时,数据的流动是以浮点形式进行的,浮点型又分单
单精度浮点型数据用32 bit 来存储数据,其中符号位1 bit,指数位8 bit,尾数位23 bit。双精度浮点型数据则用64 bit 来存储数据,其中符号位1 bit,指数位11 bit,尾数位52 bit。
这样的数据存储方式能够保证一个数的精度。但是在考虑硬件实现的时候(如FPGA,定点DSP),数据的流动是以固定长度的二进制序列进行,因此,为了进一步的反映硬件实现中算法性能,我们需要对数据的类型做重新的定义,使得所表示的数据更符合硬件平台上的处理方式。
做定点仿真实际就是对算法中的每一个数据进行量化,用规定字长的二进制序列表示一个数,使它接近实际值。为了方便对数据类型做定点转换,MATLAB提供了强大的Fixed-Point Toolbox 来帮助我们做这项工作。以下的所用内容只是个人对Fixed-Point Toolbox 学习的总结,如有任何疑问,请查找HELP 中的相关内容,理解上如有错误,恳请斧正。
先介绍几个对象给大家认识,也就是Object,个人认为定点的过程就是让数据在 fi
这个对象下进行工作。
●fi 对象
当你用 fi 这个函数对一个数据进行定点处理时,你就构造了一个fi 对象(说白了也是一个数,你规定了这个数的数据类型)。你可以对这个对象进行运算。与一个数不同的是这个对象有很多的属性,在这里先把它们中常用的列出来,并对它们做一些简要说明,后面会用实例告诉大家怎么去理解这些属性。
?Data 属性
该属性可以让你了解一个fi对象在不同的数据形式下的具体值,如二进制(bin),八进制(oct),十进制(dec),十六进制(hex),双精度(double)等等。
?fimath 属性
该属性规定了fi 对象在进行数据运算时,处理数据的习惯(数学运算,截位方式,溢出方式)。它是一个比较抽象意义上的属性,你可以用另一个对象对它进行定义。当你要定义fi对象的fimath属性时,你需要先定义一个fimath的对象,再用fimath 对象定义fi对象的fimath属性。将在fimath对象中介绍。
?numerictype 属性
该属性包含了fi对象的所有数据类型信息。它是一个比较抽象意义上的属性,你可以用另一个对象对它进行定义。当你要定义fi对象的numerictype属性时,你需要先定义一个numerictype对象,再用numerictype对象定义fi对象的fimath属性。将在numerictype对象中介绍。
●fimath 对象
该对象的常用属性如下:
?CastBeforeSum 属性
在两个操作数进行加法之前,是否将操作数影射成“和”的数据类型。“0”表示“否”,“1”表示“是”。例如,若两个操作数(对象)是18 bit,定义“和”为12 bit,若该属性为“0”,则两个操作数先进行“加”操作,然后对“和”截位得到12 bit输出,若该属性为“1”,则两个操作数先截位成12 bit,然后再进行“加”操作。