реклама на сайте
подробности

 
 
> Табличное предстваление нелинейной функции - проблема точности
syoma
сообщение Jan 22 2014, 11:41
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368



Народ - примитивный вопрос - вроде как в универе учил, а забыл как делается.

В общем есть такая функция:
y = (pi-0.5*((2.6829)*u.^(1/3)+0.1984*u+0.2602*u.^(5/3)))*(180/pi)
Для значений аргумента u от 0 до 1 она дает угол y от 180° до 90°. График данной функции представлен на рисунке.
Прикрепленное изображение

Так как вычислят нужно в ПЛИС и быстро - хотим сделать таблицу значений. Но проблема в том, что точность результата должна быть в пределах 0,1°, а как видно из графика в начале функции маленькие значения аргумента вызывают значительное изменение результата. В реале это 1/(2^29) для начальных значений. Ессно лепить таблицу с таким количеством записей нерентабельно и ессно при больших значениях аргумента точность будет избыточной. С другой стороны можно было бы сделать обратную таблицу с 900 записями и 29 битами входного параметра. Но тогда нужно сравнивать аргумент с каждым значением, а это в худшем случае 900 итераций. А хотелось бы одну.

Я думаю есть более простые алгоритмы вычисления. Подскажите.


Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Fat Robot
сообщение Jan 22 2014, 11:57
Сообщение #2


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



варианты:
- старшие биты аргумента указывают на таблицу, а младшие на позицию значения в таблице
- log2(аргумента) или log2(старших бит аргумента) указывает на таблицу, а младшие биты на позицию значения в таблице (для вашей функции я бы предпочел этот вариант)

вместо таблицы можно взять коэффициенты интерполятора. самое простое - линейного

отдаленный аналог: PCM u-law или A-law

log2 в данном случае - это позиция msb

И да, у вас функция монотонная на заданном интервале, т.е. обратная функуция, которая более пригодна для работы, на этом интервале существует. имея таблицу обратных значений, можно найти аргумент методом дихотомии/бисекции или более быстрым последовательным приближением (золотое сечение, например). Для дихотомии будет ~10 итераций для вашего размера таблицы
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th June 2025 - 03:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.0135 секунд с 7
ELECTRONIX ©2004-2016