我需要在嵌入式应用程序中进行旋转(和其他)转换,需要sin()cos()和tan()函数。我知道您可以使用查找表,这是我自己进行研究时可以找到的唯一解决方案,但是那里有一个好的定点触发库吗?
我正在考虑为应用程序使用cortex M3,因此我想尽可能远离浮点,以使应用程序保持简洁。
有两种想法:旋转的传统原始实现是CORDIC算法。您可能还会看到您的供应商现在是否在提供与您正在考虑的M3竞争的Cortex M4。
—
克里斯·斯特拉顿
您为什么不想使用查找表?这对于罪恶和cos非常有效。从算法上做正弦和余弦将花费更长的时间。唯一的好处可能是减少了使用的程序存储空间,但这在您的应用程序中真的重要吗?
—
奥林·拉斯洛普
@OlinLathrop,我想知道其他人发现了什么:也许存在一些我没有找到的有效解决问题的有效方法,几乎没有错误,同时又节省了存储空间?据我所知(我可能是错的),使用标准库进行算法求解的最大问题是,所有数学运算都是在浮点数中完成的,而没有FPU,所有数学运算都必须以数字形式完成,这效率低下。 ..查询表的最大麻烦是:我需要达到多少精度?如果精度要求发生变化,我是否还会有足够的程序存储空间?
—
Bob
您需要多少精度?适中的查找表足以满足大多数嵌入式sin / cos需求。使用1025个表条目,您将获得4096角度分辨率。那时,线性互操作为您提供表条目之间的良好准确性。关于正弦查找似乎有很多错误的神话。有关更多详细信息,请参见electronics.stackexchange.com/a/16516/4512上的答复。
—
Olin Lathrop
我听到您在说什么,并且我了解正弦函数查找表的概念,但是如果我的代码有限(项目总是填充代码空间),是否有更紧凑的方式来处理此问题?这就是为什么我问:有很多有才华的人在做贡献,我想知道他们是否找到了更好的东西。
—
Bob