碧波液压网 欢迎你,游客。 登录 注册

log10x的快速算法及DSP实现

版权信息:站内文章仅供学习与参考,如触及到您的版权信息,请与本站联系。

  0 引言

  随着数字化的不断成熟,越来越多的设备从模拟转向数字,其中仪器也不例外。现在很多仪器公司纷纷把仪器数字化[1],这样可以降低成本、提高性能、减小体积和方便升级等等。对于用户,数字化的仪器价格更低、性能更好、操作更简单等等。但仪器数字化同时也给研发带来一定的困难,譬如说仪器所测量的信号范围很宽,就得采用对数单位—分贝(dB),或者简单点说就是用常用运算log10x来将信号范围对数缩小,模拟仪器处理时,可以通过一个小小的对数放大器即可实现,数字化仪器中却不能这样,但可以采用数字信号处理器,如DSP,这就涉及到另外一个问题,使用定点DSP实现log10x计算效率太低,无法完成仪器中快速的运算需求。

  本文就该问题提出一种实现以10为底的对数运算的快速算法,该算法主要是针对数字化仪器的需要进行快速对数运算。其实与该运算类似的运算log2x在C语言的库函数中已经有定义,而现在的所有的硬件都有C语言汇编器,都能直接调用以2为底的对数运算,联合换底公式就可以计算出以10为底的对数运算。那为什么还需要研究该算法呢?原因就是直接调用这个对数函数消耗的时间过长,执行效率低。在高速处理环境中最常用的就是定点DSP[2](因为浮点DSP主频太低),使用定点DSP执行log102500需要5725个时钟周期,如果频率为600MHz,那么每秒钟也只能处理104803.5个数据,也就是0.1M,这相对于几兆或者十几兆每秒的数据流来说真的是太小了。

  1 快速算法原理

  本文提出的快速算法的主要思想就是用一个简单的多项式来代替对数运算,并保证误差在10-4内,以满足一般计算的需要,多项式在DSP的实现要比直接调用log()函数稍显复杂,但是其执行效率却要远远高于直接调用对数函数。

  这个多项式可以通过拟合y=log10x曲线来得到,考虑到拟合范围过大的曲线带来不必要的复杂,因此本文在拟合之前对曲线进行了两次归一化的预处理,缩短拟合长度。第一次归一化是以10i为除数,把数据归一化到[1,10),第二次归一化则是以2i为除数,把[1,10)数据归一到[1,2),那么最后需要拟合的就只有y=log10x(1≤x<2)这一小段函数。这样既可以计算所有数据的对数,又可以降低拟合的阶数。

  本文是采用最小二乘法[3-4]来拟合对数运算曲线,以此来获得所需要的多项式系数。但是在真正实现的过程中并不需要人工按照最小二乘法的理论来计算多项式的系数,而是可以借助Matlab这个数学工具。

  2 最小二乘法

  最小二乘法是一种数学优化技术,它是通过最小化误差的平方和找到一组数据的最佳函数匹配,它也是数理统计中一种常用的方法,在工业技术和其他科学研究中有广泛应用。

你没有登陆,无法阅读全文内容

您需要 登录 才可以查看,没有帐号? 立即注册

标签:
点赞   收藏

相关文章

发表评论

请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。

用户名: 验证码:

最新评论