如何使用定点算法在正弦查找 table (LUT) 中查找偏移量

How to find offset in a sine lookup table (LUT) using fixed point arithmetic

我正在生成一个 LUT,将 0-2PI 分成 512 个片段,然后找到这些值的正弦并将它们存储为 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,即当我得到一个随机值作为输入来计算正弦值时,在 table 中找到偏移值的算法是什么

示例:

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

请注意,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