打印

如何实现DSP除法

[复制链接]
6480|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sqcumt123|  楼主 | 2012-3-12 17:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、最高效率的实现,利用空间换取时间的查表方法当然是最高效率的了。没有比他更高效率的除法实现了。当然这种方法需要大量的空间。
2、还有一种方法叫曲线拟合的方法。何谓曲线拟合?打个比方,函数f(x) = 1/x;我们知道函数f(x)是一条双曲线,在第一象限,我们可以用N条折线相连来逼近该曲线,如果我们知道每一条折线的斜率和x范围(折线方程用f(x) = kx + c表示),那么,函数的x值一旦给定,我们就可以通过该折线计算出的值来代替该函数的值,只要该折线和曲线逼近足够,那么获得的值的误差就是可以被接受的,从而实现了除法的运算。可以看到,折线方程的计算中没有除法,只有乘法和加法。对于DSP器件来说,乘法和加法是可以被硬件直接实现的,故,该除法的实现方式也可以被高效的实现。
3、第三种方法是级数展开的方法。打个比方,函数f(x) = 10log(x) ;
当|x-1|<1的时候,函数f(x)收敛,所以函数可以展开为
f(x) = 10log(x) = 4.35[(x-1) - (1/2)*(x-1)^2 + (1/3)*(x-1)^3……]
显然,对于展开后的函数表达式已经没有了浮点数的除法了,虽然有一些除法,但是也仅仅是1/2或者是1/3、1/4这样简单的除法了,这些简直就可以用一个很小很小的表格来存贮。剩下的只是一些乘法操作和除法操作了,为了保证精度,仅仅需要计算前面四项到五项就可以了。所以,在函数收敛的时候,采用级数展开也未尝不是一种很好的实现算法。
另外还有一点需要注意的就是,如果a/b这种运算中的1/b很多的话,不妨先将1/b的值计算出来,然后统一做a*(1/b)的运算,那样也可以大大减少除法的运算量,提高系统的处理速度。

相关帖子

沙发
爱之翼V| | 2012-3-19 16:55 | 只看该作者
学习了,多谢楼主

使用特权

评论回复
板凳
ji7411| | 2012-3-19 17:44 | 只看该作者
新手学习下,多谢LZ分享。:lol

使用特权

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

本版积分规则

88

主题

2107

帖子

1

粉丝