标题：Q格式
Q格式前提
无符号数：当参与运算的数值没有负数且运算的结果也没有负数时，则所有字元都可以表示数值，这种没有符号的数，称为无符号数(如记忆体储存位址)，有符号数：数值中有某位数值代表符号，通常最高位作为符号位，0代表正，1代表负。
真值：有符号数所代表的数值，例如：110所代表的值是 -2 而非 6，有符号数只要去除符号位就可以获得该数的大小，在运算时，它的符号位可参与运算。但在加减运算时，必须将它分离出来，才能进行运算。有时，还要确定哪个有符号数的真值比较大，才能确定结果的符号。为了达到这些功能，电路的设计就相当复杂。所以很多电脑系统不直接使用有符号数，而使用有符号数的1’s补数或2’s补数表示法作为编码系统
正弦脉波宽度调变(SPWM)之控制方法经Q 格式乘法器转换成振幅与频率可变V/F 控制，当成其单相感应马达的输入信号，藉由控制责任周期的大小，以达到变电压相对改变频率的效果。
DSPs
1.实现数位系统的第一步
在自然世界中，所有的物理量包括时间、电压、质量、位移等等，都是类比的、连续的。可是在数位系统中，讯号是在不连续的时间点取样，物理量或讯号的大小也不再是连续，而是被量化(Quantized)。在数位系统中，只能用有限字元长度的数字去表示数量的大小，而不能以无限精确的数值(实数)去表示。为了实现数位系统；使用了定点数与浮点数的表示法。
a)定点数(Fixed Point Number)：指一个数字的表示，其小数点是在固定的位置(位元)。
b)浮点数(Floating Point Number)：使用假数以及指数两部分来表示数值。
例如：一个不含正负号的四位数十进制，包含三位整数和一位小数；
定点数所能表示的à
※最大值：999.9
※最小值：000.1
※动态范围：20log9999≒80(dB)
※所以小于0.1以及大于999.9的数值皆无法用此格式表示。
浮点数所能表示的à
※最大值：0.999 × 109
※最小值：0.001 × 100
※动态范围：20log1012≒240(dB)
PS:动态范围：指一个数字表示法所能表示最大数值与最小数值的比值。
c)两种表示法的比较：
※有效位数：定点有效位数有四位数，浮点格式只有三位数。
※价格：定点DSP价廉且普及(90%)；浮点DSP运用在复杂运算价格昂
贵。
d)DSP 的算数运算：
※负数：采用二补数法来表示。例如；﹣46(d)可表示成1101 0010(b)。用
二补数来表示有号数的好处是：只需一个加法器，就可以具备加、减
法运算的功能。
※Q格式：小数点位于第 n 位元之右侧，称为Qn 格式。例如；
16 位元二进位无号数：0100 0010 1000 0001
à在Q0格式下其表示的是：2^14+2^9+2^7+2^0=17025(d)
à在Q8格式下其表示的是：2^6+2^1+2^-1+2^-8=66.50390~(d)
à在Q16格式下其表示的是：2^-2+2^-7+2^-9+2^-16=0.25978~(d)
进行加法或减法时，Q格式并不会影响运算法则，两个Q8 格式的小数相
加，所得到的数值仍是Q8格式。两个Q6格式相减，所得到的数值仍是Q6格
式。因此在定点数之加减运算并不因Q格式不同而有差异。不过可能会产生溢位(overflow)，而且不同格式的数值不能直接相加减。
乘法时，Q格式便会影响运算结果。两个16 位元数做乘法，会得到32 位元数。此时只能取16位元。
àQ0 格式：取运算结果最低的16 位元，删除较高的16 位元。
àQ16 格式：取运算结果最高的16 位元，删除较低的16 位元。
3
处理有数号是采Q15格式来表示定点数，因为MSB被用来表示正负号。且在乘法运算不考虑溢位的问题。
举例：+0.5 × (-0.5) = -0.25
1.100 0000 0000 0000× 0.100 0000 0000 0000
s⊕s.11 0000 0000 0000 0000 0000 0000 0000
得到的结果MSB 为两数的MSB 做XOR 求得，并取上面画底线Q15 的部分
可得1.110 0000 0000 0000 (16bit)。为了使结果也是Q15 格式，由于最高两位元
仅是表示正负号，所以DSP会自行将结果的最高位元舍弃。
CPU是定点微处理器不能直接处理小数，C语言中的自动调用运行时的函数来处理浮点数（float型），C语言中抹平了定点处理器和浮点处理器的差别，用户的编程工作量最少，但是编译出来的代码很庞大。在嵌入式应用中很多情况下，float型几乎不能去想。
整数定标本质上并不复杂，简单地说，就是通过假定小数点位于哪一位。从而确定小数精度。
常用Q格式来表示数的定标。Q0是把小数点位定于第0位的右侧，Q15是定于第15位的右侧。
公式为：
浮点Xf->定点Xq: 
定点Xq->浮点Xf: 
浮点1.1变成Q13就为：(int)(1.1*2^13)=9011；
Q0范围:-32768<X<32767
Q15范围:-1<X<0.9999695
定点加减法一定要具有相同的Q格式才能进行。
定点乘除法是Q值相加减。
DSP处理器本身没有硬件除法器，除法通过减法和移位完成的。
定点左移右移相当于Q值加减；
Q15格式范围是个不超过1的小数，小数之间相互乘法还是小数，永远不会溢出。这是小数的一个优势。
如果一个数据既有整数也有小数。使用Q格式，直观的做法就是选定一个适当的Q格式。
再不就全部化为小数，再用Q15格式表示。
DSP芯片的定点运算
1． 数据的溢出：1> 溢出分类：
上溢（overflow）, 下溢（underflow）
2>溢出的结果：

MinMaxunsigned char0255signed char-128127unsigned int065535signed int-3276832767上溢在圆圈上按数据逆时针移动；下溢在圆圈上顺时钟移动。
例：signed int ：32767+1=－32768； -32768-1=32767
unsigned char：255+1=0； 0-1=255
3>为了避免溢出的发生，一般在DSP中可以设置溢出保护功能。当发生溢出时，自动将结果设置为最大值或最小值。
2． 定点处理器对浮点数的处理：1> 定义变量为浮点型（float，double），用C语言抹平定点处理器和浮点处理器的区别，但是程序的代码庞大，运算速度也慢。
2> 放大若干倍表示小数。比如要表示精度为0.01的变量，放大100倍去运算，运算完成后再转化。但是这个做法比较僵硬，如要将上面的变量重新定义成0.001精度，又需要放大1000倍，且要重新编写整个程序，考虑溢出等问题。
3> 定标法：Q格式：通过假定小数点位于哪一位的右侧，从而确定小数的精度。
Q0：小数点在第0位的后面，即我们一般采用的方法
Q15 小数点在第15位的后面，0～14位都是小数位。
转化公式：Q=（int）（F×pow（2，q）） F是浮点数
F=（float）（Q×pow（2，－q）） Q是定标数
3． Q格式的运算1> 定点加减法：须转换成相同的Q格式才能加减
2> 定点乘法：不同Q格式的数据相乘，相当于Q值相加
3> 定点除法：不同Q格式的数据相除，相当于Q值相减
4> 定点左移：左移相当于Q值增加
5> 定点右移：右移相当于Q减少
4． Q格式的应用格式实际应用中，浮点运算大都时候都是既有整数部分，也有小数部分的。所以要选择一个适当的定标格式才能更好的处理运算。一般用如下两种方法：
1> 使用时使用适中的定标，既可以表示一定的整数复位也可以表示小数复位，如对于2812的32位系统，使用Q15格式，可表示－65536.0～65535.999969482区间内的数据。
2> 全部采用小数，这样因为小数之间相乘永远是小数，永远不会溢出。取一个极限最大值（最好使用2的n次幂），转换成x/Max的小数（如果Max是取的2的n次幂，就可以使用移位代替除法）。