IQ是一种定标格式,通过将浮点数转换为IQN类型的定点数提高CPU对数据的运算速度。
利用浮点转定点运算计算 2.25*1.125,以转化为IQ10格式为例:
2.25的IQ10为 2.25*2^10 = 2304,1.125 的IQ10为 1.125*2^10 = 2304
则两个IQ10格式数相乘 就是 2304*1152 = 2654208,该数为Q20格式,转换为Q10格式则为2654208>>10=2592
则 2.25*1.125 的 IQ10格式的运算结果就是 2592,浮点结果为2592>>10 = 2.53125
1.0 定标到Q12格式则为4096,0.7的Q12格式则为2867.2去掉小数即2867。
函数_IQN(x) 表示 输出x的IQN格式的数即 x*2^N。
例:
_IQ10(m) = m*2^10
_IQ10(0.25) = 0.25*2^10 = 256 相当于输出0.25的IQ10格式 256。
如何理解函数 _IQ2sqrt(A) 、_IQ29sin(input) 、_IQ24mpy(a,b)?
_IQNxx() 运算函数都为输入一个或几个IQN格式的数,输出一个IQN格式的数。
_IQ2sqrt(A) = sqrt(A>>2)<<2 = 2*sqrt(A)
_IQ29sin(input) = sin(input>>29)<<29
_IQ24mpy(a,b) = (a>>24*b>>24)<<24 = a*b>>24