打印

新版DSP库中Q7格式定点数的绝对值处理有bug

[复制链接]
249|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
冰糖炖雪梨|  楼主 | 2018-8-4 17:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
对于定点数Q7格式,0x80(对应的浮点数是-1)需要饱和运行到0x7f。

老版本DSP库处理是饱和指令__QSUB8做个减法运算取反,即用0去减这个数值。
/* C = |A| */
/* Read inputs */
in1 = (q31_t) * pSrc;
in2 = (q31_t) * (pSrc + 1);
in3 = (q31_t) * (pSrc + 2);

/* find absolute value */
out1 = (in1 > 0) ? in1 : (q31_t)__QSUB8(0, in1);


而新版DSP,处理有误,改成了__QSUB去处理,导致0x80没有包含运算到0x7f。
*pDst++ = (in > 0) ? in : (q7_t)__QSUB(0, in);

如果不使用专门的饱和执行,手动处理就是:
*pDst++ = (in > 0) ? in : ((in == (q7_t) 0x80) ? (q7_t) 0x7f : -in);

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

430

主题

436

帖子

0

粉丝