IQmath基本使用方法(2812为例子)
一. 配置CMD PRAMH0 : origin = 0x100000, length = 0x008000 BOOT_ROM : origin = 0x3ff000, length = 0x000fc0 IQmathTables : > BOOT_ROM, type = NOLOAD, PAGE = 0 IQmath : > PRAMH0, PAGE = 0 二. 载入gel文件,加入IQmath库和头文件 l IQmath.lib IQmathLib.h 三.定义全局Q格式,和调试Q格式 #define GLOBAL_Q 20 //全局为Q20格式,默认为Q24格式 long GlobalQ = GLOBAL //调试用为Q20格式(这样可以使用_IQ(x)在监视器中查看) //----------------------------- IQmath中常用的变量和字符 QN 16bitQ格式 IQN 32bitQ格式 N表示Q多少 int 16bit long 32bit _iq = _iqN = long F 浮点数输入 S 浮点字符串 P 正数最大值 N 负数最大值 格式转化函数 一般情况下IQ都有IQN版本的函数 float _IQtoF(A) //_iq浮点转成正常浮点 float _IQNtoF(A) int _IQtoQN(A) //iq和q(16bit)的转化 long _IQint(A) //提取iq的整数部分 _IQ(float F) //浮点转化成iq _IQN(float F) _atoIQ(char *s) //字符串转化成iq _IQfrac(A) //提取iq的小数部分 _IQtoIQN(A) //全局iq和普通iq的转化 _IQNtoIQ(A) _QNtoIQ(int A) 算术函数 long _IQmpyI32int(A, B) //N*long IQ乘long 返回整数部分 long _IQmpyI32frac(A, B)//N*long IQ乘long 返回小数部分 _IQmpy(A, B) //N*N乘法 _IQrmpy(A, B) //N*N四舍五入的乘法最后保存结果前(四舍五入) _IQrsmpy(A, B) //N*N四舍五入的饱和处理乘法(如果Q26[-32,+32],如果相乘结果超过也会限制到这个范围) _IQmpyI32(A, B) //N*long IQ乘long _IQmpyIQX(A, A1, B, B1) //N1*N2两个不同的Q格式乘法,返回全局Q格式 _IQdiv(A, B) // N/N iq除法 三角函数 _IQsin(A) _IQsinPU(A) //正弦函数(标幺值),你占这个圆周的几分之几为单位如果sin((0.25*PI)/(2*PI)) _IQcos(A) _IQcosPU(A) _IQatan2(A, B) //第四象限反正切 tan-1(sin, cos) _IQatan2PU(A, B) //第四象限反正切 tan-1(sin, cos) _IQatan(A, B) //定点反正切 tan-1(1),,1=sin/cos _IQNsin(A) _IQNsinPU(A) //正弦函数(标幺值),你占这个圆周的几分之几为单位如果sin((0.25*PI)/(2*PI)) _IQNcos(A) _IQNcosPU(A) _IQNatan2(_iqA, B) //第四象限反正切 tan-1(sin, cos) _IQNatan2PU(_iqA, B) //第四象限反正切 tan-1(sin, cos) _IQNatan(A, B) //定点反正切 tan-1(1),,1=sin/cos 数学函数 _IQNsqrt(A) //平方根 a^0.5 _IQNisqrt(A) //平方根倒数 1/a^0.5 _IQNmag(A, B) //求模运算(sqrt(A^2 + B^2) _IQsqrt(A) //平方根 a^0.5 _IQisqrt(A) //平方根倒数 1/a^0.5 _IQmag(A, B) //求模运算(sqrt(A^2 + B^2) 其它函数 _IQsat(A, long P, long N)//IQ数值的限幅函数 把A限制到[N P]之间 _IQNabs(A) //IQ数据的绝对值 |A| _IQabs(A) //IQ数据的绝对值 |A| |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论