微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > DSP编程技巧---详解浮点运算的定点编程

DSP编程技巧---详解浮点运算的定点编程

时间:12-21 来源:互联网 点击:

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)

  }

  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(IQmathTablesRam)

  }

  IQmathTables3 > IQTABLES3, type = NOLOAD, PAGE = 1

  {

  IQmath.lib(IQmathTablesRam)

  }

  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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top