Доброго времени суток тебе Dmitry!
03 Авг 06 11:41, Dmitry E. Oboukhov -> Wladimir Tchernov:
WT>> Требуется вычислять на ОМК (AVR - структуры) следующее выражение WT>>
WT>> Y=А*Log(В*X) WT>>
WT>> Где А,В - константы WT>>
WT>> Х - меняется в диапазоне 1-65534 (реально точек меньше, потому как WT>> Х=Х1+Х2, где Х2 некая фиксированная константа). WT>>
WT>> Положение запятой фиксировано. WT>>
WT>> Y - целое число в диапазоне 1-4094, А - масштабный коэффициент. WT>>
WT>> Скорость вычисления не менее 4 вычислений в секунду. WT>>
WT>> Это вообще реально, на процессоре рангом пониже iP ? WT>>
DO> вычислить реально DO> просто функцию log взять из любого libc и реализовать
А чуть по точнее ?
А главное сколь она ресурсозатратна.
Да по результатам прикидок нужно вычислять логарифм по основанию 2.
WT>> Вариант с таблицей я уже рассмотрел и он мне не понравился - WT>> потому как в программе и так таблица для более сложного WT>> преобразования в 65536 значений по 2 байта каждое (128 к) WT>>
WT>> Или можно как-то сократить эти таблицы. WT>>
DO> сократить таблицы можно когда разные участки одной функции отличаются DO> друг от друга одинаково.
DO> например возьмем f=K/x (специально не беру твой логарифм, чтобы ты сам DO> подумал;) ), где К - постоянный коэффициент DO> строим для него таблицу для диапазона DO> x=[a, 2a) (или x=(a, 2a] - не важно)
DO> далее на входе в твою функцию смотрим попадает ли x в твой диапазон DO> если да - возвращаем результат, если нет, то делим или умножаем x на 2 DO> до тех пор пока не попадет в диапазон, а потом умножаем или делим DO> выборку из таблицы на два чтобы отмасштабировать результат.
Хорошая идея - надо вспоминать свойства логарифмов.
DO> я такую реализацию функций как-то применял. надо просто помнить, что DO> результат получается с определенной точностью,
Hасчет точности я пока не могу определиться, так-как не могу никак определить с какой достоверность микроконтроллерная система будет приближаться к заменяемой аналоговой.
Вчера снивал ВАХ и АЧХ одного из узлов. Измение нпряжения питания на 20 мВ изменяет выходной результат вдвое. Б..н
DO> и размер таблицы и DO> величина a выбирается исходя из требуемой точности для всего диапазона DO> x. DO> для моего примера можно сказать что чем величина a больше тем точность DO> выше. DO> на точность так же влияет шаг в таблице (ну это и ёжику понятно ;) )
ЗЫ Получил более менее точную формулу для рассчета
Y=8*Log (1,5*X) . 9
Пошел снова АЧХ снимать.
В общем это ВАХ прямосмещенного германивого дида - какой она интересно функции подчиняется ?
Будь счастлив(а) Dmitry... С уважением Wladimir.