嵌入式系统上的三角函数

9 c embedded math trigonometry

sin并且cos功能很慢,需要大量资源才能在嵌入式系统上运行.如何以更节省资源和更快速的方式计算sincos运行?

pav*_*ium 16

计算泰勒傅里叶级数总是很费时间.

在嵌入式系统中,您应该考虑查找表.

关于惠普如何在早期科学计算器中优化此类计算的网络上可能还有一些有趣的信息.

我记得当时看到过这样的东西

  • 而且当然没有理由坚持线性插值.sin(x)表现得相当好,因此高阶插值也有效.本质上,在"所有数据,无插值"和"sin(0)= 0,sin(90)= 1之间存在整个连续体,插入其他所有内容". (4认同)
  • 如果我记得正确的512条目查找表为0..90°,归一化为0..2 ^ 15给出 - 使用线性插值 - 最多21位的精确度.这只是两个比正确的正弦更糟糕. (3认同)
  • 一个简单的256元素表将为您提供一小部分正弦; 其他一切都可以通过简单的对称规则得出. (2认同)

Nol*_*rin 10

毫无疑问,带插值的查找表是最有效的解决方案.但是,如果您想使用更少的内存,CORDIC是一种非常有效的计算三角函数值的算法,通常在手持式计算器中实现.

作为一个侧面点,使用傅立叶级数表示这些函数没有任何意义,因为您只是创建了一个循环问题,即如何评估系列的sin/cos项.泰勒级数是一种众所周知的近似方法,但在许多情况下,误差大得令人无法接受.

您可能还想查看这个问题及其答案,关于Java的快速三角函数(因此代码可以轻松移植).它提到了CORDIC和Chebyshev近似等.其中一个无疑将满足您的需求.