static inline void MCFLIB_InvPark_S16(const MCFLIB_2_DQ_T_S16 *psIn,
const sAngle_Trig *psAnglePos,
MCFLIB_2_ALBE_T_S16 *psOut)
{
register Q31_t s16D;register Q31_t s16Q;register Q31_t s16Sin;register Q31_t s16Cos;register Q31_t s32Temp;
/* Store values for calculation */
s16D = (psIn->s16D);
s16Q = (psIn->s16Q);
s16Sin = (psAnglePos->s16Sin);
s16Cos = (psAnglePos->s16Cos);
/* Calculate beta = d * sin(theta) + q * cos(theta) */
s32Temp = (s16Cos * s16Q + s16Sin * s16D) >> 15;
psOut->s16Beta = (Q15_t)s32Temp ;
/* Calculate alpha = d * cos(theta) - q * sin(theta) */
s32Temp = ((s16Cos * s16D) - (s16Sin * s16Q)) >> 15;
psOut->s16Alpha = (Q15_t) s32Temp ;
}
这里的 s32Temp = (s16Cos * s16Q + s16Sin * s16D) >> 15;代码为什么要进行右移十五位的操作呀?如果是匹配Q15_t数据类型的话,下面不就有个强转嘛,这里的>>15操作,有什么含义呀?初学,想请教各位大佬一下!!感谢!!
|
理解了:这样理解应该是对的!!因为s16Sin的数据类型是Q15_t的类型的,并不是-1~1,这里实际操作的s16Sin数据就是-1~1的数据并不是-32768~32767的数据,所以这里需要一个右移15位的操作!! 如有不对!还请大家指正!