TM4C IQmath 使用教程
- 介绍
Texas Instruments®Tiva™IQmath Library是一个高度优化和高精度的集合,数学函数为C/ C++程序员无缝地将浮点算法移植到Tiva设备上的定点代码。
这些例程通常用于计算密集型实时应用,其中最优的执行速度和高精度是至关重要的。通过使用IQmath库,它有可能实现比同等代码快得多的执行速度。
IQmath使用起来并没有想象中那么复杂,简单来说就是将浮点数转化为整数计算,然后再将整数转为浮点数。
使用过程中合数选和定义IQ变量,获得更好的计算性能。
IQmath使用手册在TIVAware中:
C:\ti\tivaware_c_series_2_1_4_178\docs
FPU,编译器默认开启FPU,double型变量计算速度有所下降,1.0默认是double型变量,1.0f为float型变量,计算速度在某些情况下比double快几倍,大概5倍左右,如果对精度要求不是很高可以采用float。
2. 测试分析
代码如下。
while(1)
{
MAP_GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_6|GPIO_PIN_7,0);
for(i=0;i<0xFF;i++)
{
// value = 0.4f+0.8f+0.8f*0.8f+79.8f/7.8f;
c = _IQ24sin(a)+ _IQ24sin(b);
// value = sin(3.1245)+ sin(2.14);
}
MAP_GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_6|GPIO_PIN_7,GPIO_PIN_6|GPIO_PIN7);
for(i=0;i<0xFF;i++)
{
// value =0.4f+0.8f+0.8f*0.8f+79.8f/7.8f;
c = _IQ24sin(a)+ _IQ24sin(b);
// value = sin(3.1245)+sin(2.14);
}
value1=(float)(c*1.0/m24);
}
当使用IQmath时候,每秒计算速度在480k左右,当不使用时在每秒计算次数在7k左右。这明显提高了计算三角函数的速度。
当不用来计算三角函数时候,用来计算乘积运算,计算性能大大降低,不如不使用IQmath的计算速度。实测降低1536k左右。
在求平方根时,采用,math库函数计算速度为34k/s,而采用IQ时候,计算速度为488k/s。
3. IQ变量定义范围
4.使用范例
#include "IQmath/IQmathLib.h"
int
main(void)
{
_iq24 X, Y, Z;
X = _IQ24(1.0);
Y = _IQ24(7.0);
Z = _IQ24div(X, Y);
}
其中iq24,定义IQ变量,X = _IQ24(1.0);则将数据1.0转为IQ数据。
转换关系如下:
浮点数(x)转换为定点数(xq):xq=(int)x*2Q;
定点数(xq)转化为浮点数(x):x=(float)(xq*1.0/2Q);
5. 常用IQ库函数
以IQ30为例。IQ位数之间的转换这里不做说明。
转化一个数据为IQnumber
//*****************************************************************************
//
// Convert a value into an IQ