2011-07-12 by zony
定点仿真方法的学习笔记(一)
在用 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,然后再进行“加”操作。