【问题标题】:How to find offset in a sine lookup table (LUT) using fixed point arithmetic如何使用定点算法在正弦查找表 (LUT) 中查找偏移量
【发布时间】:2015-02-09 09:31:59
【问题描述】:

我正在生成一个将 0-2PI 划分为 512 个片段的 LUT,然后找到这些值的正弦并将它们存储为 Q1.31 值。

例子:

LUT[0] = 0

LUT[1] = sin((1/512) * 2*PI) * (2^31)
..
..

LUT[511] = sin((511/512) * 2*PI) * (2^31)

我的输入也是 Q1.31 格式的值。

我的问题是如何使用 LUT,即当我得到一个随机值作为输入来计算正弦值时,在表中找到偏移值的算法是什么

例子:

int sample_input = 0.125 * (2^31) //0.125radians in Q31 format = 268435456

【问题讨论】:

    标签: algorithm embedded lookup-tables fixed-point


    【解决方案1】:

    注意0.125radians * (2^31) 方法不适用于> 1 弧度的角度。可能,你想标准化角度 (0.125radians/2Pi) * (2^31)
    无论如何,您需要将 2^31 范围映射到 2^9 - 所以只需除以 2^22。 示例:

    Angle = 0.125 radians.
    0.125 /(2*Pi) * 2^31 = 42 722 829
    42 722 829 / 2^22 = 10
    Result = Lut[10] = 262 874 923
    

    【讨论】:

    • 能否请您详细说明您的答案,并举例说明?
    • 我的输入是 Q31 格式,就像我在问题中提到的那样。所以 0.125 是 268435456。我假设输入存在小于 1rad 的条件。那么算法将如何变化?
    • 我认为规范化是在代码的后期完成的。
    • 查看编辑(结果相同)。如果输入值限制为 1 弧度,则最好使用此范围填充 LUT 以获得更高的精度。
    猜你喜欢
    • 1970-01-01
    • 2015-03-12
    • 2010-11-25
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    相关资源
    最近更新 更多