如何使用线性插值在 C(SDCC 编译器)中构建查找表
对于 LPC922 微控制器(带有 SDCC),我想创建一个具有线性插值的查找表。 假设我得到了 x 和 y 值,例如
x=300 y=10,0201
x=700 y=89,542
x=800 y=126,452
x=900 y=171,453
x=1500 y=225,123
带有线性插值的查找表的代码看起来如何,所以我得到例如 x=850 y 的正确值((171,453+126,452)/2)?
For a LPC922 microcontroller (with SDCC) I want to create a lookup table with linear interpolation.
Lets assume I got x and y values like
x=300 y=10,0201
x=700 y=89,542
x=800 y=126,452
x=900 y=171,453
x=1500 y=225,123
How can the code for a lookup table with linear interpolation look like, so I get for example for x=850 the right value for y ((171,453+126,452)/2)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果您愿意,这可以很容易地扩展到其他插值方法。请注意,您可能需要扩展边界区域的特殊情况,但是您希望处理它。当没有足够的邻近值可用于首选方法时,常见的方法是进行线性插值。
此外,当值的数量开始增长时,我建议使用 二分搜索 方法来计算起始值观点。不过,对于这几个值来说,这不应该是问题。
更新:由于 OP 在有限的平台上运行,因此以下是使用 libfixmath 的上述版本:
This can fairly easily be extended to other interpolation methods if you wish. Note that you will then probably have to extend the special cases for the border regions however you wish to handle that. A common method is to do linear interpolation when not enough neighboring values are available for the preferred method.
Also when the number of values starts to grow i would recommend using a binary search method to compute the starting point. This shouldn't be a problem with this few values though.
Update: Since OP is working on a limited platform, here's a version of the above using libfixmath:
将所有值放入一个数组中。然后搜索 x.. 如果您没有找到正确的值,您有一个索引和一个邻居索引,然后使用您的公式计算该值。
Put all the values in an array. Then search for x.. if you didn't find the correct value you have an index and a neighbour index, then calculate the value using your formula..