硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4050|回复: 9
收起左侧

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

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
发表于 2019-9-25 01:05:34 | 显示全部楼层 |阅读模式

对于定点数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);


回复

使用道具 举报

13

主题

223

回帖

262

积分

高级会员

积分
262
发表于 2019-9-25 08:01:29 | 显示全部楼层
看不懂的飘过
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2019-9-25 10:45:22 | 显示全部楼层

他们把函数用错了,该用__QSUB8,结果用了个__QSUB,导致运算出问题
回复

使用道具 举报

22

主题

93

回帖

159

积分

初级会员

积分
159
发表于 2020-4-29 16:20:21 | 显示全部楼层
看了硬汉的V5开发板的DSP例程,都是没有开启ARM_MATH_DSP这个定义的,是不是都是没有用到DSP单元功能?
回复

使用道具 举报

22

主题

93

回帖

159

积分

初级会员

积分
159
发表于 2020-4-29 16:21:59 | 显示全部楼层
看了硬汉的V5开发板DSP教程例程,都没有开启ARM_MATH_DSP这个宏定义,是不是没有用到DSP单元功能?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2020-4-30 07:36:52 | 显示全部楼层
shibinjie 发表于 2020-4-29 16:21
看了硬汉的V5开发板DSP教程例程,都没有开启ARM_MATH_DSP这个宏定义,是不是没有用到DSP单元功能?

第1版和第2版的DSP教程使用的宏定义不同。

V5那会用的是通过ARM_MATH_CMx实现。
回复

使用道具 举报

22

主题

93

回帖

159

积分

初级会员

积分
159
发表于 2020-4-30 09:58:25 | 显示全部楼层
eric2013 发表于 2020-4-30 07:36
第1版和第2版的DSP教程使用的宏定义不同。

V5那会用的是通过ARM_MATH_CMx实现。

我看到的是V5第二版教程第一个例程,基础函数求和:arm_add_q15函数里,如图,这里是没有开启ARM_MATH_DSP的,对于V5使用的M4内核的,应该可以开启吧?
123.JPG
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2020-4-30 10:32:16 | 显示全部楼层
shibinjie 发表于 2020-4-30 09:58
我看到的是V5第二版教程第一个例程,基础函数求和:arm_add_q15函数里,如图,这里是没有开启ARM_MATH_DS ...

新版DSP库中的宏定义ARM_MATH_DSP无需用户去使能,编译器会自动使能
http://www.armbbs.cn/forum.php?m ... 4897&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

22

主题

93

回帖

159

积分

初级会员

积分
159
发表于 2020-4-30 11:12:11 | 显示全部楼层
eric2013 发表于 2020-4-30 10:32
新版DSP库中的宏定义ARM_MATH_DSP无需用户去使能,编译器会自动使能
http://www.armbbs.cn/forum.php?mo ...

原来如此,多谢指教。话说硬汉是如何知道编译器会自动使能的,单步调试看代码运行到哪里吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2020-4-30 13:16:32 | 显示全部楼层
shibinjie 发表于 2020-4-30 11:12
原来如此,多谢指教。话说硬汉是如何知道编译器会自动使能的,单步调试看代码运行到哪里吗?

忘了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-26 20:02 , Processed in 0.189819 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表