如何减少正弦、余弦的计算时间
dsp程序中需要大量做正弦、余弦、反正切计算,共运行24次计算,现采用直接计算的方法,没有用到IQmath,发现计算时间过长,不知道是否有好的解决方法。另外运行正弦、余弦的时间有多少,有没文档说明的! 查表、降低精度迭代计算计算速度实测吧,不同处理器不同 DOER 发表于 2015-5-9 15:07
查表、降低精度迭代计算
计算速度实测吧,不同处理器不同
查表法有个问题,这个表的格式是float还是int类型比较合适,int类型表应该少占空间,但是做正弦、余弦计算结果希望是float,这样数据类型的转换是否会降低精度;若采用float类型表应该会占空间较大,就是怕放不下这么多数据(正弦、余弦各自1000个点) xyx2012xyx 发表于 2015-5-9 15:41
查表法有个问题,这个表的格式是float还是int类型比较合适,int类型表应该少占空间,但是做正弦、余弦计 ...
正弦表与余弦表是一个表,而且取前90°即可 CORDIC,字数 charlesg 发表于 2015-5-9 16:42
CORDIC,字数
没接触过这个,有文档说明能共享下不 xyx2012xyx 发表于 2015-5-9 17:32
没接触过这个,有文档说明能共享下不
不好意思,我这边没有现成的文档,谷歌一大堆,可以自己搜一下 没必要每个都计算吧!正弦、余弦、反正切计算可以相互转换,只要解决一个就好了 你的dsp是定点的还是浮点的?这一点不说,很难判断怎么搞。总之一句话,优化代码要靠cpu特性(定点、浮点特性)和算法来实现。 查表法即可,统一放到到32BIT的精度应该足够使用了吧。 aureole 发表于 2015-5-9 18:50
你的dsp是定点的还是浮点的?这一点不说,很难判断怎么搞。总之一句话,优化代码要靠cpu特性(定点、浮点特 ...
用的是dsp28335,在10k周期中处理这么多正弦余弦变换 其实只需要一个象限的表就够了 cddyy 发表于 2015-5-9 22:48
查表法即可,统一放到到32BIT的精度应该足够使用了吧。
原先的设想是将360度生成个1000点的表,数据类型是float,不知这样可以不? xyx2012xyx 发表于 2015-5-9 23:53
原先的设想是将360度生成个1000点的表,数据类型是float,不知这样可以不?
只需要取90就行了 四分之一的数据,可以加加减减,正正负负,以前画圆时就时这么干的 精度要求很高?不然没必要用float,用定点就行,反正最后定时器里面还是整型 28335的boot ROM数学表描述:
正余弦函数表:单精度浮点型,1282字,Q格式为Q30,内容为5/4周期正弦波的32位浮点采样,这个函数有助于产生准确的正弦波和进行32位FFT分析。
还有其他。 对精度要求不是特别特别严格的时候,可以使用多次泰特级数展开来模拟SIN,精度可以接受,速度比较快。
还有楼上@charlesg网友说的Cordic 算法,这个算法可以看这个博客的介绍:
三角函数计算,Cordic 算法入门 nengcai0313 发表于 2015-5-10 12:33
对精度要求不是特别特别严格的时候,可以使用多次泰特级数展开来模拟SIN,精度可以接受,速度比较快。
还有 ...
学习了,原来如此! 查表,最快可以30~40个时钟周期完成 也就是在168M STM32F4上面,差不多0.3us求一次sin,cos,0.4us求一次atan2
nengcai0313 发表于 2015-5-10 12:33
对精度要求不是特别特别严格的时候,可以使用多次泰特级数展开来模拟SIN,精度可以接受,速度比较快。
还有 ...
谢谢推荐的博客链接,已收藏{:victory:} 学习了,一直缺少这方面的知识 好资料。博客链接已经收藏。 Cordic博客链接已经收藏。 CORDIC算法只适合定点运算啊。 查表,无敌模式{:lol:} 查表+差值 sunnyqd 发表于 2015-5-10 20:14
也就是在168M STM32F4上面,差不多0.3us求一次sin,cos,0.4us求一次atan2
28335实测4次正弦或余弦计算消耗5-6us,2次atan2居然消耗18-20us,难道是哪里设置有问题,求教! xyx2012xyx 发表于 2015-6-3 21:05
28335实测4次正弦或余弦计算消耗5-6us,2次atan2居然消耗18-20us,难道是哪里设置有问题,求教! ...
28335,150MHz的速度,查表法应该只需40个指令周期左右就可以完成了一次查表计算了啊 sunnyqd 发表于 2015-6-3 21:23
28335,150MHz的速度,查表法应该只需40个指令周期左右就可以完成了一次查表计算了啊 ...
我这个时间是做直接计算示波器实测时间,没有用查表方式,但感觉还是不太对,消耗这么多时间,特别是求解atan2的时候?
xyx2012xyx 发表于 2015-6-3 21:27
我这个时间是做直接计算示波器实测时间,没有用查表方式,但感觉还是不太对,消耗这么多时间,特别是求解 ...
直接计算肯定会耗时间的,就算是直接计算,最好也是用优化的泰勒展开,atan2用泰勒展开计算也应该在1us以内才对。除非你可能是直接用c库函数计算的
页:
[1]