TI论坛
直播中

李汉荣

8年用户 198经验值
私信 关注
[问答]

请问不同Q格式的用这个相乘怎么理解??

// Q21 = Q21*(GLOBAL_Q-GLOBAL_Q)
Tmp1 = _IQmpy(v->K1,(v->ElecTheta - v->OldElecTheta));
K1是Q21格式的,后面是Q15格式,看IQMath文档_IQmpy是两个Q格式相同的数相乘的,请问不同Q格式的用这个相乘怎么理解??

回帖(5)

冯敬宇

2018-11-22 10:13:56
ttyu
如果是两个不同格式的数相乘, 如果使用IQmpy,需要将其转换成相同的Q格式。
另外,不同Q格式的数相乘的理解,放大倍数不同的两个数相乘,最终结果你要考虑被放大多少倍了。比如2A  *  4B  = 8 AB, 即结果被放大了8倍。
Eric
                                                                         - ERIC
举报

李汉荣

2018-11-22 10:20:57
引用: guigui_7044 发表于 2018-11-22 08:20
ttyu
如果是两个不同格式的数相乘, 如果使用IQmpy,需要将其转换成相同的Q格式。
另外,不同Q格式的数相乘的理解,放大倍数不同的两个数相乘,最终结果你要考虑被放大多少倍了。比如2A  *  4B  = 8 AB, 即结果被放大了8倍。

但TI 给的例程里没有将其转换成相同的Q格式,而是直接用_IQmpy处理,这里还是不理解
举报

庄当甜

2018-11-22 10:29:04
引用: music19960304 发表于 2018-11-22 08:27
但TI 给的例程里没有将其转换成相同的Q格式,而是直接用_IQmpy处理,这里还是不理解

你好。
Q格式的数相乘,实际上是两个整数相乘,被乘的两个数可以是不同的Q格式的。
IQmath库函数没有开放源码,所以无法知道其具体怎么操作的,但是有一点,就是用_IQmpy做两数乘法时,至少其中一个数是Global_Q的,两乘得到的结果是另一个数的Q格式。因此,才有例程中// Q21 = Q21*(GLOBAL_Q-GLOBAL_Q)的注释说明。
事实上,我们可以简单地想一想Q格式计算的过程。比如,我们做Q15*Q21,Q15为Global_Q,那么得到的中间结果应该是Q36(需要注意在做乘法时,必须考虑使结果不溢出,两个32位整数表示的Q格式数相乘,中间结果必然需要用64位整数存储,这样Q36也是有意义的)。然后,我们把中间结果右移Global_Q(15)位,你会发现得到了一个Q21的数。当然,此时这个数用32位整数已经能够表示了。
Q格式计算两数据相乘的原理应该类似上述例子,IQmath的具体操作过程可能涉及一些优化而略有不同。
举报

李汉荣

2018-11-22 10:46:05
引用: 小Qhhui 发表于 2018-11-22 08:35
你好。
Q格式的数相乘,实际上是两个整数相乘,被乘的两个数可以是不同的Q格式的。
IQmath库函数没有开放源码,所以无法知道其具体怎么操作的,但是有一点,就是用_IQmpy做两数乘法时,至少其中一个数是Global_Q的,两乘得到的结果是另一个数的Q格式。因此,才有例程中// Q21 = Q21*(GLOBAL_Q-GLOBAL_Q)的注释说明。

明白了,谢谢!
举报

更多回帖

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