1.定点计算的必要性
定点计算,简单来说,就是把小数转换为整数的一种计算。这个定点计算的点,就是小数点。从字面意思上说来,就是小数点固定的运算。在详细一点就是,对于整数来说,将假定的小数点固定在某个位置,将整数视为小数。一般来讲,小数点定在哪都无所谓的,决定了之后,那么这个小数点就固定在某一位了(所以叫做定点运算)。简单来说,就是把小数的计算,转换为整数的计算。那么,为什么要如此麻烦的转换过来计算呢?
①对于实际的C语言程序,小数的表达常用[double]与[float]类型。换句话说,这个浮点数。对于实际信号处理,在处理前,我们必定会使用A/D去采集原本的模拟信号,然后将其转换为数字信号。这个数字信号,很显然,也不是小数。某些时候为了计算,我们甚至还得将其转换为浮点数,然后才能计算。
②DSP分为定点DSP与浮点DSP。浮点DSP就是为浮点运算而量身定做的,其内部有硬件可以直接完成浮点运算。但是,由于其较为复杂的结构,计算耗时也很大以及价格等等的因素,其运用也有一定的限制。
③限制结果的位数。
综上所述,为了计算的快速,掌握定点计算还是必须的。
2.负数的表达与三大规则
①
规则一:最高位(MAB)是符号位。使用最高位作为符号位,下面我们使用4-bit的数来进行说明。最高位是符号位,符号位是1的话,其表示的是负数,反之则是正数。那么,此时,最高位的权重则是-8(4-bit),此时+6与-6的表示如下。
很显然,+6 = 4+2,-6 = -8+2成立。这样理解比较直观吧。还有就是,-6就是6的补码,这样理解也对。
②
规则二:负数的符号位扩展不影响数的大小。还是拿-6来说,在符6的前面无论补多少个1,这个数同样表示的是-6。当然,最高位是符号位(规则一)。
③
规则三:一个数与符号位相乘,结果等于这个数的补码。当然,这是理所应当的事情。
3.固定小数点的折算与其实现(C语言)
首先,陈述一个事实。一个4-bit的数乘以一个4-bit的数,其结果为8-bit。继续乘下去的话,位数迟早不够用的。
为了解决这个问题,我们可以引入小数点。假设0.9x0.9其结果为0.81。前两个乘数与被乘数的有效位数是1,那么结果只需要0.8就足够了。按照这个思路,只要使用绝对值为1一下的数来进行乘法,就可以有效的避免位数不够用了。为此,我们可以提出固定小数点。固定小数点对于DSP来讲,是不存在的,只是我们想象中的一个小数点。对此,对于一个4-bit的数,有以下几种小数点的取法。
按照之前我们讲的,要将数字压缩在绝对值小于1的范围内的话,我们可以选择小数点在②的位置。小数点在②的时候,其小数点后有3位,故称为Q3格式。很显然,Q3结构下,可以表示某个数X的范围是 &nbs