Как найти смещение в таблице поиска синуса (LUT), используя арифметику с фиксированной точкой

Я генерирую 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, т. Е. Каков алгоритм поиска значений смещения в таблице, когда я получаю случайное значение в качестве входных данных для вычисления значения синуса

Пример:

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

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
Другие вопросы по тегам