目录
大多数的MCU、DSP中的浮点数处理单元都是定点浮点数处理单元,处理定点数据会相当快,但是处理浮点数据就会非常慢。可以利用Q格式进行浮点数据到定点的转化,节约CPU时间。实际应用中,浮点运算大都时候都是既有整数部分,也有小数部分的。所以要选择一个适当的定标格式才能更好的处理运算。
1、Q格式
Q格式表示为:Qm.n,表示数据用m比特表示整数部分位宽,n比特表示小数部分位宽,共需要m+n+1位来表示这个数据,多余的一位用作符合位。假设小数点在n位的左边(从右向左数),从而确定小数的精度。
例如Q15表示小数部分有15位,一个short型数据,占2个字节,最高位是符号位,后面15位是小数位,就假设小数点在第15位左边,表示的范围是:-1<X<0.9999695 。
2、转换方法
浮点数在定点化时,小数点位置可以随意定。最常用的还是定点化为-1~1之间,即最高位是符号位,小数点,后面全是数据位。编程时要心中明确小数点的位置。
浮点数据转化为Q15,将数据乘以2^15;Q15数据转化为浮点数据,将数据除以2^15。
例如:假设数据存储空间为2个字节,0.333×2^15=10911=0x2A9F,0.333的所有运算就可以用0x2A9F表示,同理10911/2^(15)=0.332977294921875。可以看出浮点数据通过Q格式转化后是有误差的。
3、量化精度
如果浮点数表示为Qm.n格式,那么:
- 整数部分有m位,最大表示为十进制数2^m-1;
- 小数部分有n位,可表示十进制数范围:0≤ɑ≤(2^n-1)/2^n,当n比较大时,ɑ≈1,负数同理;
-
整数+小数最大能表示十进制数为:(2^m-1)+(2^n-1)/2^n;
-
n位二进制数最大能表示2^n;所以此种量化方式的精度为t=((2^m-1)+(2^n-1)/2^n)/2^(m+n);
-
浮点数定点化为:浮点数/t,并取整。误差百分比为:偏差/取整后的整数值。
举例:将十进制数2.918量化为16位的(3位整数位宽,12位小数位宽,1个符号位)
- 整数部分有3位,最大为111,表示为十进制数:2^3-1=7;
- 小数部分12位,表示范围(2^12-1)/2^12≈1;
- 整数+小数最大能表示7+1 =8;而3+12=15位二进制数最大能表示32768,所以此种量化方式的精度为t=(7+1)/32768;
- 2.918定点化为:2.918/t=11952.128≈11952,定点化为有0.128的误差。误差百分比为0.128/11952=1.0710e-05。近似可以忽略不计。
4、sin查找表
为了减少MCU、DSP的运算负荷,可以与先把需要MCU浮点单元计算的结果制作成一个表格,实际以运用时查找并直接应用表格中的结果。
这里举例说明Q15浮点数转定点数的查找表的设计方法,浮点数(-1,1)之间,用Sin(-1,1)表达,角度范围 [0,360] 度。0位整数位宽,15位小数位宽,1个符号位。
- 整数部分有0位,只能表示为0;
- 小数部分15位,表示范围0≤ɑ≤(2^15-1)/2^15≈1。
- 整数+小数最大能表示0+1=1;而15位二进制数最大能表示2^15=32768;所以此种量化方式的精度为t=(0+1)/32768。
- 例如,0.918定点化为:0.918/t=30081.024≈30081,定点化有0.024的误差,误差百分比为0.024/30081=7.9785e-07,忽略不计。
/* Includes ------------------------------------------------------------------*/
/*******************************************************************************
变量名: SinTable[]
描述: sin查找表,
表长(No. Entries):256 ,
角度范围(Angle Range):360 deg
Sin数值定标(Number forma)t:Q15 with range -1 < N < +1
********************************************************************************/
const int16 SinTable[] = {
0 , // 0 0 0
804 , // 1 1.41 0.0245
1608 , // 2 2.81 0.0491
2410 , // 3 4.22 0.0736
3212 , // 4 5.63 0.0980
4011 , // 5 7.03 0.1224
4808 , // 6 8.44 0.1467
5602 , // 7 9.84 0.1710
6393 , // 8 11.25 0.1951
7179 , // 9 12.66 0.2191
7962 , // 10 14.06 0.2430
8739 , // 11 15.47 0.2667
9512 , // 12 16.88 0.2903
10278, // 13 18.28 0.3137
11039, // 14 19.69 0.3369
11793, // 15 21.09 0.3599
12539, // 16 22.50 0.3827
13279, // 17 23.91 0.4052
14010, // 18 25.31 0.4276
14732, // 19 26.72 0.4496
15446, // 20 28.13 0.4714
16151, // 21 29.53 0.4929
16846, // 22 30.94 0.5141
17530, // 23 32.34 0.5350
18204, // 24 33.75 0.5556
18868, // 25 35.16 0.5758
19519, // 26 36.56 0.5957
20159, // 27 37.97 0.6152
20787, // 28 39.38 0.6344
21403, // 29 40.78 0.6532
22005, // 30 42.19 0.6716
22594, // 31 43.59 0.6895
23170, // 32 45.00 0.7071
23731, // 33 46.41 0.7242
24279, // 34 47.81 0.7410
24811, // 35 49.22 0.7572
25329, // 36 50.63 0.7730
25832, // 37 52.03 0.7883
26319, // 38 53.44 0.8032
26790, // 39 54.84 0.8176
27245, // 40 56.25 0.8315
27683, // 41 57.66 0.8449
28105, // 42 59.06 0.8577
28510, // 43 60.47 0.8701
28898, // 44 61.88 0.8819
29268, // 45 63.28 0.8932
29621, // 46 64.69 0.9040
29956, // 47 66.09 0.9142
30273, // 48 67.50 0.9239
30571, // 49 68.91 0.9330
30852, // 50 70.31 0.9415
31113, // 51 71.72 0.9495
31356, // 52 73.13 0.9569
31580, // 53 74.53 0.9638
31785, // 54 75.94 0.9700
31971, // 55 77.34 0.9757
32137, // 56 78.75 0.9808
32285, // 57 80.16 0.9853
32412, // 58 81.56 0.9892
32521, // 59 82.97 0.9925
32609, // 60 84.38 0.9952
32678, // 61 85.78 0.9973
32728, // 62 87.19 0.9988
32757, // 63 88.59 0.9997
32767, // 64 90.00 1.0000
32757, // 65 91.41 0.9997
32728, // 66 92.81 0.9988
32678, // 67 94.22 0.9973
32609, // 68 95.63 0.9952
32521, // 69 97.03 0.9925
32412, // 70 98.44 0.9892
32285, // 71 99.84 0.9853
32137, // 72 101.25 0.9808
31971, // 73 102.66 0.9757
31785, // 74 104.06 0.9700
31580, // 75 105.47 0.9638
31356, // 76 106.88 0.9569
31113, // 77 108.28 0.9495
30852, // 78 109.69 0.9415
30571, // 79 111.09 0.9330
30273, // 80 112.50 0.9239
29956, // 81 113.91 0.9142
29621, // 82 115.31 0.9040
29268, // 83 116.72 0.8932
28898, // 84 118.13 0.8819
28510, // 85 119.53 0.8701
28105, // 86 120.94 0.8577
27683, // 87 122.34 0.8449
27245, // 88 123.75 0.8315
26790, // 89 125.16 0.8176
26319, // 90 126.56 0.8032
25832, // 91 127.97 0.7883
25329, // 92 129.38 0.7730
24811, // 93 130.78 0.7572
24279, // 94 132.19 0.7410
23731, // 95 133.59 0.7242
23170, // 96 135.00 0.7071
22594, // 97 136.41 0.6895
22005, // 98 137.81 0.6716
21403, // 99 139.22 0.6532
20787, // 100 140.63 0.6344
20159, // 101 142.03 0.6152
19519, // 102 143.44 0.5957
18868, // 103 144.84 0.5758
18204, // 104 146.25 0.5556
17530, // 105 147.66 0.5350
16846, // 106 149.06 0.5141
16151, // 107 150.47 0.4929
15446, // 108 151.88 0.4714
14732, // 109 153.28 0.4496
14010, // 110 154.69 0.4276
13279, // 111 156.09 0.4052
12539, // 112 157.50 0.3827
11793, // 113 158.91 0.3599
11039, // 114 160.31 0.3369
10278, // 115 161.72 0.3137
9512 , // 116 163.13 0.2903
8739 , // 117 164.53 0.2667
7962 , // 118 165.94 0.2430
7179 , // 119 167.34 0.2191
6393 , // 120 168.75 0.1951
5602 , // 121 170.16 0.1710
4808 , // 122 171.56 0.1467
4011 , // 123 172.97 0.1224
3212 , // 124 174.38 0.0980
2410 , // 125 175.78 0.0736
1608 , // 126 177.19 0.0491
804 , // 127 178.59 0.0245
0 , // 128 180.00 0.0000
-804 , // 129 181.41 -0.0245
-1608 , // 130 182.81 -0.0491
-2410 , // 131 184.22 -0.0736
-3212 , // 132 185.63 -0.0980
-4011 , // 133 187.03 -0.1224
-4808 , // 134 188.44 -0.1467
-5602 , // 135 189.84 -0.1710
-6393 , // 136 191.25 -0.1951
-7179 , // 137 192.66 -0.2191
-7962 , // 138 194.06 -0.2430
-8739 , // 139 195.47 -0.2667
-9512 , // 140 196.88 -0.2903
-10278, // 141 198.28 -0.3137
-11039, // 142 199.69 -0.3369
-11793, // 143 201.09 -0.3599
-12539, // 144 202.50 -0.3827
-13279, // 145 203.91 -0.4052
-14010, // 146 205.31 -0.4276
-14732, // 147 206.72 -0.4496
-15446, // 148 208.13 -0.4714
-16151, // 149 209.53 -0.4929
-16846, // 150 210.94 -0.5141
-17530, // 151 212.34 -0.5350
-18204, // 152 213.75 -0.5556
-18868, // 153 215.16 -0.5758
-19519, // 154 216.56 -0.5957
-20159, // 155 217.97 -0.6152
-20787, // 156 219.38 -0.6344
-21403, // 157 220.78 -0.6532
-22005, // 158 222.19 -0.6716
-22594, // 159 223.59 -0.6895
-23170, // 160 225.00 -0.7071
-23731, // 161 226.41 -0.7242
-24279, // 162 227.81 -0.7410
-24811, // 163 229.22 -0.7572
-25329, // 164 230.63 -0.7730
-25832, // 165 232.03 -0.7883
-26319, // 166 233.44 -0.8032
-26790, // 167 234.84 -0.8176
-27245, // 168 236.25 -0.8315
-27683, // 169 237.66 -0.8449
-28105, // 170 239.06 -0.8577
-28510, // 171 240.47 -0.8701
-28898, // 172 241.88 -0.8819
-29268, // 173 243.28 -0.8932
-29621, // 174 244.69 -0.9040
-29956, // 175 246.09 -0.9142
-30273, // 176 247.50 -0.9239
-30571, // 177 248.91 -0.9330
-30852, // 178 250.31 -0.9415
-31113, // 179 251.72 -0.9495
-31356, // 180 253.13 -0.9569
-31580, // 181 254.53 -0.9638
-31785, // 182 255.94 -0.9700
-31971, // 183 257.34 -0.9757
-32137, // 184 258.75 -0.9808
-32285, // 185 260.16 -0.9853
-32412, // 186 261.56 -0.9892
-32521, // 187 262.97 -0.9925
-32609, // 188 264.38 -0.9952
-32678, // 189 265.78 -0.9973
-32728, // 190 267.19 -0.9988
-32757, // 191 268.59 -0.9997
-32767, // 192 270.00 -1.0000
-32757, // 193 271.41 -0.9997
-32728, // 194 272.81 -0.9988
-32678, // 195 274.22 -0.9973
-32609, // 196 275.63 -0.9952
-32521, // 197 277.03 -0.9925
-32412, // 198 278.44 -0.9892
-32285, // 199 279.84 -0.9853
-32137, // 200 281.25 -0.9808
-31971, // 201 282.66 -0.9757
-31785, // 202 284.06 -0.9700
-31580, // 203 285.47 -0.9638
-31356, // 204 286.88 -0.9569
-31113, // 205 288.28 -0.9495
-30852, // 206 289.69 -0.9415
-30571, // 207 291.09 -0.9330
-30273, // 208 292.50 -0.9239
-29956, // 209 293.91 -0.9142
-29621, // 210 295.31 -0.9040
-29268, // 211 296.72 -0.8932
-28898, // 212 298.13 -0.8819
-28510, // 213 299.53 -0.8701
-28105, // 214 300.94 -0.8577
-27683, // 215 302.34 -0.8449
-27245, // 216 303.75 -0.8315
-26790, // 217 305.16 -0.8176
-26319, // 218 306.56 -0.8032
-25832, // 219 307.97 -0.7883
-25329, // 220 309.38 -0.7730
-24811, // 221 310.78 -0.7572
-24279, // 222 312.19 -0.7410
-23731, // 223 313.59 -0.7242
-23170, // 224 315.00 -0.7071
-22594, // 225 316.41 -0.6895
-22005, // 226 317.81 -0.6716
-21403, // 227 319.22 -0.6532
-20787, // 228 320.63 -0.6344
-20159, // 229 322.03 -0.6152
-19519, // 230 323.44 -0.5957
-18868, // 231 324.84 -0.5758
-18204, // 232 326.25 -0.5556
-17530, // 233 327.66 -0.5350
-16846, // 234 329.06 -0.5141
-16151, // 235 330.47 -0.4929
-15446, // 236 331.88 -0.4714
-14732, // 237 333.28 -0.4496
-14010, // 238 334.69 -0.4276
-13279, // 239 336.09 -0.4052
-12539, // 240 337.50 -0.3827
-11793, // 241 338.91 -0.3599
-11039, // 242 340.31 -0.3369
-10278, // 243 341.72 -0.3137
-9512 , // 244 343.13 -0.2903
-8739 , // 245 344.53 -0.2667
-7962 , // 246 345.94 -0.2430
-7179 , // 247 347.34 -0.2191
-6393 , // 248 348.75 -0.1951
-5602 , // 249 350.16 -0.1710
-4808 , // 250 351.56 -0.1467
-4011 , // 251 352.97 -0.1224
-3212 , // 252 354.38 -0.0980
-2410 , // 253 355.78 -0.0736
-1608 , // 254 357.19 -0.0491
-804 , // 255 358.59 -0.0245
0 // 256 360.00 0.0000
};