TI论坛
直播中

邹昀

7年用户 140经验值
私信 关注
[问答]

Q格式相乘问题怎么解决

/* Q0 = Q0*GLOBAL_Q => _IQXmpy(), X = GLOBAL_Q*/
v.SpeedRpm = _IQmpy(v.BaseRpm,v.Speed);
v.BaseRpm为Q0格式v.Speed为Q15格式,他两个相乘为什么得到Q0格式的v.SpeedRpm。Q格式相乘不应该Q后面系数相加吗。

回帖(9)

邹昀

2020-5-19 11:08:31
 v.Speed = _IQdiv(v.SpeedScaler,v.EventPeriod);

我能再问你个问题吗,那为什么Q0除以Q0会生成Q15的格式那,我Q格式有点没学明白,
举报

徐小婷

2020-5-19 11:22:55
安装IQmpy的定义,乘法的结果会转为宏定义的Q格式,默认是Q25。Q15和Q0相乘应该是Q0格式,因为Q15相当于I17Q15,Q0等于132Q0,结果如果是64位的话就是I49Q15,乘法结果会取高32位,所以就是132Q0,所以结果是Q0
举报

邹昀

2020-5-19 11:29:42
您的意思是,乘除法得到的Q格式都是按照=号之前的格式取的吗?
v.Speed = _IQdiv(v.SpeedScaler,v.EventPeriod);

/* Q0 = Q0*GLOBAL_Q => _IQXmpy(), X = GLOBAL_Q*/
v.SpeedRpm = _IQmpy(v.BaseRpm,v.Speed);
这两个语句中v.SpeedScaler,v.EventPeriod为Q0格式除法得到v.Speed  Q_GLOBAL
v.SpeedRpm   v.BaseRpm为Q0格式他们的输出是不是都可以按照=号之前格式选取。而它们的值直接进行乘除
举报

徐小婷

2020-5-19 11:47:27
跟等号前后无关,跟你用的指令有关,你用IQMPY,那就是默认QGLOBAL,如果你用IQ15MPY那就是IQ15的输出。你需要看一下SPRC990 的6,3节
举报

更多回帖

发帖
×
20
完善资料,
赚取积分