Как найти смещение в таблице поиска синуса (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