程序中有一句 _iq SpeedRef =_IQ(0.15),其中全局的Q格式是24,可不可以这样理解,speedref的十进制的数值就是0.15*2^24的值?
求助ti人,1.怎样理解IQ的计算?
2,程序中的iq值可以看作是标幺值吗
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
程序中有一句 _iq SpeedRef =_IQ(0.15),其中全局的Q格式是24,可不可以这样理解,speedref的十进制的数值就是0.15*2^24的值?
求助ti人,1.怎样理解IQ的计算?
2,程序中的iq值可以看作是标幺值吗
ZengZhen,
两种方法:
1. 先将x和y分别先转换成IQ格式的,再相乘:i = _IQmpy(_IQmtoIQ(x), _IQmtoIQ(y)),其中m指你的x和y的IQ格式,如IQ15或IQ0等;
2. 先计算x*y的值,然后再转换为IQ格式:i = _IQmtoIQ(_IQmpy(x*y)); 前提是x和y都是同样IQ格式的,m的含义如上;
注意几点:
1. IQ格式的数据相乘需要调用_IQmpy(A,B)函数;
2. IQ相乘的结果是两个IQ数的叠加,如两个IQ15的数相乘的结果是IQ30格式的,需要后面转换成你想要的IQ格式。
具体的细节可以去查下TI的IQ manth库的文档
ZengZhen,
_IQ12toIQ(x)的含义是将IQ12格式的x转换成你软件系统中定义的IQ格式,
你查下你的 GLOBAL_Q是多少,如TI的很多例程中在
<IQmathLib.h> 定义:#define GLOBAL_Q 24
因此针对你的语句就成x转换成IQ24格式的,即x左移12位。