DSP编程技巧---详解浮点运算的定点编程
fine Q 28,则我们在程序中调用IQMath库函数时,
sin_out =_IQsin(input);//使用全局定义的Q28格式
sin_out =_IQ29sin(input); //特别指定使用Q29格式
默认情况下,编译器使用的Q格式是24,如果追求更高的精度,则可以使用更大的Q值,但是相应地表示的浮点数的范围也要小,此时可以考虑使用标么值,使得大部分变量的值都处在-1到1的区间内。
此外,在C语言编程时,调用方式是_IQsin(input),在C++编程时,则直接使用IQsin(input)就可以了。
3)在CMD链接文件中指明IQMath数学表的位置:
例如,对于281x器件:
MEMORY
{
PAGE 0:
PRAMH0 (RW) : origin = 0x3f8000, length = 0x001000
PAGE 1:
IQTABLES (R) : origin = 0x3FF000, length = 0x000b50
DRAMH0 (RW) : origin = 0x3f9000, length = 0x001000
}
SECTIONS
{
IQmathTables : load = IQTABLES, type = NOLOAD, PAGE = 1
IQmathTablesRam : load = DRAMH0, PAGE = 1
IQmath : load = PRAMH0, PAGE = 0
}
对于2833x器件:
MEMORY
{
PAGE 0:
PRAML0 (RW) : origin = 0x008000, length = 0x001000
PAGE 1:
IQTABLES (R) : origin = 0x3FE000, length = 0x000b50
IQTABLES2 (R) : origin = 0x3FEB50, length = 0x00008c
DRAML1 (RW) : origin = 0x009000, length = 0x001000
}
SECTIONS
{
IQmathTables : load = IQTABLES, type = NOLOAD, PAGE = 1
IQmathTables2 > IQTABLES2, type = NOLOAD, PAGE = 1
{
IQmath.lib
}
IQmathTablesRam : load = DRAML1, PAGE = 1
IQmath : load = PRAML0, PAGE = 0
}
对于280x器件:
MEMORY
{
PAGE 0:
PRAML0 (RW) : origin = 0x008000, length = 0x001000
PAGE 1:
IQTABLES (R) : origin = 0x3FE000, length = 0x000b50
IQTABLES2 (R) : origin = 0x3FEB50, length = 0x00008c
IQTABLES3 (R) : origin = 0x3FEBDC, length = 0x0000AA
DRAML1 (RW) : origin = 0x009000, length = 0x001000
}
SECTIONS
{
IQmathTables : load = IQTABLES, type = NOLOAD, PAGE = 1
IQmathTables2 > IQTABLES2, type = NOLOAD, PAGE = 1
{
IQmath.lib
}
IQmathTables3 > IQTABLES3, type = NOLOAD, PAGE = 1
{
IQmath.lib
}
IQmath : load = PRAML0, PAGE = 0
}
为了方便数学运算的高效处理,IQMath库中还包含了常用的数学运算函数,包括:
1. 格式转换
IQN浮点转定点,IQNtoF定点转浮点,atoIQN字符串转定点,IQNtoa定点转字符串,IQNint返回定点数的整数部分,IQNfrac返回定点数的小数部分,IQtoIQN和IQNtoIQ为指定Q格式与全局Q格式的互转,IQtoQN和QNtoIQ为32位与16位互转,IQmpy2, 4, 8..64即左移,IQdiv2, 4, 8..64即右移
2. 算数运算
IQNmpy和IQNrmpy:乘法,IQNrsmpy为带饱和的乘法。IQNmpyI32和IQNmpyI32int为定点数与32位整数的乘法,IQNmpyI32frac可返回结果的小数位数。QNmpyIQX:不同Q格式的定点数相乘。
IQNdiv:除法运算。
3. 三角运算
包括IQNasin,IQNsin,IQNsinPU,IQNacos,IQNcos,IQNcosPU,IQNatan2,IQNatan2PU,IQNatan。
其中,PU的含义在该函数中π已经折算为1。例如:
sin(0.25*π)=sinPU(0.25)。
4. 代数运算
包括IQNexp,IQNlog,IQNsqrt,IQNisqrt,IQNmag,IQNabs,IQsat
DSP编程技 相关文章:
- DSP编程技巧之:编译流程与处理器选项(12-21)
- DSP编程技巧---在main函数运行之前,你需要知道的(12-21)
- DSP编程技巧之:不得不看的编译指示(12-21)
- DSP编程技巧---详解cmd文件(12-21)
- DSP编程技巧-使用代码优化时必须考虑的五大问题(12-21)
- DSP编程技巧---理解函数的调用过程(12-21)