搜索
bottom↓
回复: 31

如何减少正弦、余弦的计算时间

[复制链接]
(207774432)

出0入0汤圆

发表于 2015-5-9 15:02:52 | 显示全部楼层 |阅读模式
dsp程序中需要大量做正弦、余弦、反正切计算,共运行24次计算,现采用直接计算的方法,没有用到IQmath,发现计算时间过长,不知道是否有好的解决方法。另外运行正弦、余弦的时间有多少,有没文档说明的!
(207774132)

出0入17汤圆

发表于 2015-5-9 15:07:52 | 显示全部楼层
查表、降低精度迭代计算
计算速度实测吧,不同处理器不同
(207772110)

出0入0汤圆

 楼主| 发表于 2015-5-9 15:41:34 | 显示全部楼层
DOER 发表于 2015-5-9 15:07
查表、降低精度迭代计算
计算速度实测吧,不同处理器不同

查表法有个问题,这个表的格式是float还是int类型比较合适,int类型表应该少占空间,但是做正弦、余弦计算结果希望是float,这样数据类型的转换是否会降低精度;若采用float类型表应该会占空间较大,就是怕放不下这么多数据(正弦、余弦各自1000个点)
(207771578)

出0入17汤圆

发表于 2015-5-9 15:50:26 | 显示全部楼层
xyx2012xyx 发表于 2015-5-9 15:41
查表法有个问题,这个表的格式是float还是int类型比较合适,int类型表应该少占空间,但是做正弦、余弦计 ...

正弦表与余弦表是一个表,而且取前90°即可
(207768436)

出0入0汤圆

发表于 2015-5-9 16:42:48 | 显示全部楼层
CORDIC,字数
(207765447)

出0入0汤圆

 楼主| 发表于 2015-5-9 17:32:37 来自手机 | 显示全部楼层
charlesg 发表于 2015-5-9 16:42
CORDIC,字数

没接触过这个,有文档说明能共享下不
(207763446)

出0入0汤圆

发表于 2015-5-9 18:05:58 | 显示全部楼层
xyx2012xyx 发表于 2015-5-9 17:32
没接触过这个,有文档说明能共享下不

不好意思,我这边没有现成的文档,谷歌一大堆,可以自己搜一下
(207762214)

出0入0汤圆

发表于 2015-5-9 18:26:30 | 显示全部楼层
没必要每个都计算吧!正弦、余弦、反正切计算可以相互转换,只要解决一个就好了
(207760746)

出0入0汤圆

发表于 2015-5-9 18:50:58 | 显示全部楼层
你的dsp是定点的还是浮点的?这一点不说,很难判断怎么搞。总之一句话,优化代码要靠cpu特性(定点、浮点特性)和算法来实现。
(207746485)

出50入0汤圆

发表于 2015-5-9 22:48:39 | 显示全部楼层
查表法即可,统一放到到32BIT的精度应该足够使用了吧。
(207742875)

出0入0汤圆

 楼主| 发表于 2015-5-9 23:48:49 来自手机 | 显示全部楼层
aureole 发表于 2015-5-9 18:50
你的dsp是定点的还是浮点的?这一点不说,很难判断怎么搞。总之一句话,优化代码要靠cpu特性(定点、浮点特 ...

用的是dsp28335,在10k周期中处理这么多正弦余弦变换
(207742591)

出0入22汤圆

发表于 2015-5-9 23:53:33 来自手机 | 显示全部楼层
其实只需要一个象限的表就够了
(207742591)

出0入0汤圆

 楼主| 发表于 2015-5-9 23:53:33 来自手机 | 显示全部楼层
cddyy 发表于 2015-5-9 22:48
查表法即可,统一放到到32BIT的精度应该足够使用了吧。

原先的设想是将360度生成个1000点的表,数据类型是float,不知这样可以不?
(207704749)

出0入0汤圆

发表于 2015-5-10 10:24:15 来自手机 | 显示全部楼层
xyx2012xyx 发表于 2015-5-9 23:53
原先的设想是将360度生成个1000点的表,数据类型是float,不知这样可以不?

只需要取90就行了
(207702849)

出0入0汤圆

发表于 2015-5-10 10:55:55 | 显示全部楼层
四分之一的数据,可以加加减减,正正负负,以前画圆时就时这么干的
(207701572)

出0入0汤圆

发表于 2015-5-10 11:17:12 | 显示全部楼层
精度要求很高?  不然没必要用float,用定点就行,  反正最后定时器里面还是整型
(207698971)

出0入0汤圆

发表于 2015-5-10 12:00:33 | 显示全部楼层
28335的boot ROM数学表描述:
正余弦函数表:单精度浮点型,1282字,Q格式为Q30,内容为5/4周期正弦波的32位浮点采样,这个函数有助于产生准确的正弦波和进行32位FFT分析。
还有其他。
(207696973)

出0入0汤圆

发表于 2015-5-10 12:33:51 | 显示全部楼层
对精度要求不是特别特别严格的时候,可以使用多次泰特级数展开来模拟SIN,精度可以接受,速度比较快。
还有楼上@charlesg网友说的Cordic 算法,这个算法可以看这个博客的介绍:

三角函数计算,Cordic 算法入门
(207672379)

出0入17汤圆

发表于 2015-5-10 19:23:45 | 显示全部楼层
nengcai0313 发表于 2015-5-10 12:33
对精度要求不是特别特别严格的时候,可以使用多次泰特级数展开来模拟SIN,精度可以接受,速度比较快。
还有 ...

学习了,原来如此!
(207669402)

出0入0汤圆

发表于 2015-5-10 20:13:22 | 显示全部楼层
查表,最快可以30~40个时钟周期完成
(207669354)

出0入0汤圆

发表于 2015-5-10 20:14:10 | 显示全部楼层
也就是在168M STM32F4上面,差不多0.3us求一次sin,cos,0.4us求一次atan2
(206363499)

出0入0汤圆

发表于 2015-5-25 22:58:25 | 显示全部楼层
nengcai0313 发表于 2015-5-10 12:33
对精度要求不是特别特别严格的时候,可以使用多次泰特级数展开来模拟SIN,精度可以接受,速度比较快。
还有 ...

谢谢推荐的博客链接,已收藏
(206348542)

出0入0汤圆

发表于 2015-5-26 03:07:42 来自手机 | 显示全部楼层
学习了,一直缺少这方面的知识
(206330513)

出0入0汤圆

发表于 2015-5-26 08:08:11 | 显示全部楼层
好资料。博客链接已经收藏。
(206318931)

出0入0汤圆

发表于 2015-5-26 11:21:13 | 显示全部楼层
Cordic博客链接已经收藏。
(206308997)

出0入0汤圆

发表于 2015-5-26 14:06:47 | 显示全部楼层
CORDIC算法只适合定点运算啊。
(206295479)

出0入0汤圆

发表于 2015-5-26 17:52:05 | 显示全部楼层
查表,无敌模式
(206192141)

出0入0汤圆

发表于 2015-5-27 22:34:23 | 显示全部楼层
查表+差值
(205592696)

出0入0汤圆

 楼主| 发表于 2015-6-3 21:05:08 | 显示全部楼层
sunnyqd 发表于 2015-5-10 20:14
也就是在168M STM32F4上面,差不多0.3us求一次sin,cos,0.4us求一次atan2

28335实测4次正弦或余弦计算消耗5-6us,2次atan2居然消耗18-20us,难道是哪里设置有问题,求教!
(205591578)

出0入0汤圆

发表于 2015-6-3 21:23:46 | 显示全部楼层
xyx2012xyx 发表于 2015-6-3 21:05
28335实测4次正弦或余弦计算消耗5-6us,2次atan2居然消耗18-20us,难道是哪里设置有问题,求教! ...


28335,150MHz的速度,查表法应该只需40个指令周期左右就可以完成了一次查表计算了啊
(205591346)

出0入0汤圆

 楼主| 发表于 2015-6-3 21:27:38 | 显示全部楼层
sunnyqd 发表于 2015-6-3 21:23
28335,150MHz的速度,查表法应该只需40个指令周期左右就可以完成了一次查表计算了啊 ...

我这个时间是做直接计算示波器实测时间,没有用查表方式,但感觉还是不太对,消耗这么多时间,特别是求解atan2的时候?
(205546675)

出0入0汤圆

发表于 2015-6-4 09:52:09 | 显示全部楼层
xyx2012xyx 发表于 2015-6-3 21:27
我这个时间是做直接计算示波器实测时间,没有用查表方式,但感觉还是不太对,消耗这么多时间,特别是求解 ...

直接计算肯定会耗时间的,就算是直接计算,最好也是用优化的泰勒展开,atan2用泰勒展开计算也应该在1us以内才对。除非你可能是直接用c库函数计算的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 ( 公安交互式论坛备案:44190002001997 粤ICP备09047143号 )

GMT+8, 2021-12-8 10:10

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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