Вычислить на ОМК

Sat Aug 05 2006 10:06, Anatoly Mashanov wrote to All:

VV>>> А найти log2 с любой точностью - дело техники.

AM> Я как-то решал задачу: Вычислить время, за которое известный конденсатор AM> зарядился через известный резистор AM> Решалась методом, эквивалентным взятию логарифма по основанию 1+1/16. AM> Дело в том, что после приведения аргумента к промежутку от 1 до 1+1/16 AM> кривую логарифма на таком коротком отрезке можно аппроксимировать прямой. Да чего уж там. Логарифм вообще константа, а не функция :)

VLV

"Что даст мне свет, чего я сам не знаю?" (c) Гете "Фауст"

Reply to
Vladimir Vassilevsky
Loading thread data ...

Anatoly,

You wrote to All:

VV>>> А найти log2 с любой точностью - дело техники. AM> Я как-то решал задачу: Вычислить время, за которое известный AM> конденсатор зарядился через известный резистор от источника с AM> известным напряжением до измеренного на нем напряжения. Задача эта AM> эквивалентна логарифмированию. Решалась методом, эквивалентным взятию AM> логарифма по основанию 1+1/16. Дело в том, что после приведения AM> аргумента к промежутку от 1 до 1+1/16 кривую AM> логарифма на таком коротком отрезке можно аппроксимировать прямой. AM> Получилась точность, достаточная для обработки данных с 10-битного АЦП AM> ПИКа.

Только не точность, а разрешающая способность. Точность с середине отрезка получается всего около -3%, а это пять бит.

Когда я говорил о 129 точках для 12 бит, я имел ввиду конкретную формулу. То бишь, предполагаемую подставку и отсутвие начального участка. Разумеется это надо проверять с реальными их значениями, может я и слишком оптимистичен. Hу а про требуемую точность вообще не было ни слова.

Andrey

Reply to
Andrey Arnold

Hello, Dmitry! You wrote to Alexander Torres on Sat, 05 Aug 2006 19:09:36 +0400:

DO>>>> Однофамилец DEO>>> я в fido после ~5 летнего перерыва вернулся. DEO>>> суммарно может месяц прошел как :) AT>>

AT>> Просто здесь раньше был Дима Обухов из Калифорнии. Hеужели это ты? :) DEO> в Калифорнии если я когда-нидь и буду то только как турист ну или как DEO> солдат. то есть обо мне никогда нельзя будет сказать что я из DEO> калифорнии :)

Очень хочеться на это надеяться :)

With best regards, Alexander Torres. E-mail: snipped-for-privacy@yahoo.com [ Жамству бой !]

Reply to
Alexander Torres

В околоэхотажных применениях часто нужен "целочисленный" ллогарифм. Который считается как, буквально, номер первого ненулевого бита сллева. (биты нумерутся привы-ным образом, слева направо, на-иная с нулля).

Reply to
Kirill Frolov

В целых числах? Регистров никаких не напасёшься!

Reply to
Kirill Frolov

Хочеться не вредно.

Reply to
Arcady Schekochikhin

Hi Anatoly!

05 Aug 06 09:44, Anatoly Mashanov wrote to Slav Matveev:

SM>> А log2 с любой точностью ты все равно будешь искать через SM>> подобный этому ряд: arg = arg * ((((((b6 * z + b5) * z + b4) SM>> * z + b3) * z + b2) * z + b1) * z + b0);

AM> Это в микроконтроллере-то я буду считать через ряд с невероятным AM> количеством умножений с плавучкой? если ресурсов хватает - почему бы и нет?

AM> точность, то с линейной (или даже нелинейной, если очень надо) AM> аппроксимацией промежуточных значений. здесь уже прозвучал совет: #include <math.h>

если ты думаешь что в стандартной библиотеке таблицы, скорее всего ты ошибаешься.

SM>>>> Я таким образом в отсутствии SM>>>> библиотек и наличии компилятора просчитал синусы/косинусы. SM>>>> Мне хватило четырех слагаемых в ряду. AM> А ты не учел, что твои 4 слагаемых в ряду тащат за собой: AM> преобразование целого в плавучку, плавающее умножение и плавающее AM> сложение? И что эти преобразования занимают места примерно столько же, AM> сколько таблица? в вопросе было про фиксированную точку. Это по-моему несколько упрощает вычисления своя их к целочисленным операциям. нет? И мне надо было ехать, а не шашечки рисовать. я доехал за два вечера. только вот уже не помню: "в лоб" считал или сначала таблицу с нужным шагом сделал.

Slav.

Reply to
Slav Matveev

Hi Vladimir!

05 Aug 06 20:09, Vladimir Vassilevsky wrote to Anatoly Mashanov:

AM>> что после приведения аргумента к промежутку от 1 до 1+1/16 кривую AM>> логарифма на таком коротком отрезке можно аппроксимировать AM>> прямой.

VV> Да чего уж там. Логарифм вообще константа, а не функция :)

А прямая это не та линейная функция, за которую ты ратовал? или для тебя прямая это только y=const, а y=ax+b уже нет?

Slav.

Reply to
Slav Matveev

Hi Vladimir!

04 Aug 06 20:27, Vladimir Vassilevsky wrote to Slav Matveev:

VV>>> Даже ряд не нужен. Log2 в диапазоне аргумента [1...2) это почти VV>>> линейная функция. Прекрасно апроксимируется. SM>> Линейной функцией апроксимируется с точностью до первого SM>> знака после запятой. Ты случаем не с аэромеха, у которых SM>> все что меньше 10 сравнимо с единицей?

VV> Hет, не с аэромеха. Если видишь мудака - знай, что он с ФРТК (это про VV> меня). ф-т радиотехники и ... ?

VV> Двоечникам с мехмата простительно не знать про апроксимацию по VV> Чебышеву. обижаешь. троечник. ну давай, расскажи про линейную апроксимацию с указанием погрешности log2 на [1..2) А потом спросим у вопрошавшего, устроит его плюс-минус километр или нет.

Slav.

Reply to
Slav Matveev

Sun Aug 06 2006 18:13, Slav Matveev wrote to Vladimir Vassilevsky:

VV>> Двоечникам с мехмата простительно не знать про апроксимацию по VV>> Чебышеву. SM> обижаешь. троечник.

Doh, cбавил мехмат свои стандарты... Починяй бензобаки и не лезь в высокие материи. SM> ну давай, расскажи про линейную апроксимацию с указанием SM> погрешности log2 на [1..2)

log2(x) ~ x - 0.957 Максимальная ошибка 4.3e-2, то есть лучше, чем одна цифра после запятой. Средняя точность примерно две цифры после запятой. И?

SM> А потом спросим у вопрошавшего, устроит его плюс-минус SM> километр или нет.

Проблема в том, что вопрошаюший сам не знает, чего ему надо.

VLV

"Что даст мне свет, чего я сам не знаю?" (c) Гете "Фауст"

Reply to
Vladimir Vassilevsky

Hello Wladimir.

04 Aug 06 17:11, you wrote to Yuriy Khapochkin:

WT>>> Требуется вычислять на ОМК (AVR - структуры) следующее выражение

WT>>> Y=А*Log(В*X) WT>>> Где А,В - константы WT>>> Х - меняется в диапазоне 1-65534 (реально точек меньше, потому WT>>> как Х=Х1+Х2, где Х2 некая фиксированная константа).

WT>>> Y - целое число в диапазоне 1-4094, А - масштабный коэффициент.

WT>>> Скорость вычисления не менее 4 вычислений в секунду. WT>>> Это вообще реально, на процессоре рангом пониже iP ?

YK>> Реально. AVR на частоте в 1МГц хватит за глаза. :-)

YK>> ATtiny26 @11MHz : Длительность импульса ~700мксек.

YK>> IAR C/C++ Compiler for AVR YK>> 4.20A/W32 (4.20.1.3)

YK>> U16 func(U16 X)

Тип переменной.

YK>> { YK>> #define A 100.0 YK>> #define B 50000.0

YK>> return (U16)(A*log10(B*X)); YK>> } YK>> //------------------------------------------------------------------- YK>> __C_task void main(void) YK>> { YK>> // PORTA = c;

YK>> DDRA = BINARY(11100000); YK>> PORTA = BINARY(11100000);

YK>> DDRB = BINARY(01101000); YK>> PORTB = BINARY(01100000);

YK>> for (;;) YK>> { YK>> U16 x = func(598);

YK>> led_on();

Как ты время, необходимое для расчета померять собираешься?

YK>> x = func(450); YK>> led_off(); YK>> } YK>> }

Вопервых необязательно иар. Скачай винавр и аврстудию, кракать не надо. Вовторых ты невнимательно эху читаешь (отн. иара)... Если всетаки winavr - посмотри в аврлибсе, там есть модуль math.h.

∙ double log (double __x) __ATTR_CONST__ ∙ double log10 (double __x) __ATTR_CONST__

После компиляции симулятор аврстудии с твоей задачей справится без проблем. И обрати внимание, что тут уже писали о логарифмах (умножение -> сложение). Однако и вопросы у тебя... Nicolas

Reply to
Nicolas Minakov

WT> В общем это ВАХ прямосмещенного германивого дида - какой она интересно функции подчиняется ? насколько я помню там чистая экспонента, а не логарифм. (U(I))

Reply to
Dmitry E. Oboukhov

Hi Vladimir!

06 Aug 06 22:49, Vladimir Vassilevsky wrote to Slav Matveev:

SM>> погрешности log2 на [1..2)

VV> log2(x) ~ x - 0.957

метод наименьших квадратов?

VV> Максимальная ошибка 4.3e-2, то есть лучше, чем одна цифра после VV> запятой. Средняя точность примерно две цифры после запятой. И? ошибка во втором знаке это одна верная цифра после запятой. на 2/3 указанного интервала.

Slav.

Reply to
Slav Matveev

Hi Wladimir!

04 Aug 06 09:32, Wladimir Tchernov wrote to Slav Matveev:

WT> Исследованием схемы она должна быть близка к ВАХ прямосмещенного WT> точечного германивого диода. умноженной не EXP от интеграла входного WT> сигнала.

Как вариант разбей интервал на 2^N отрезков, на каждом апроксимируй линейной функцией ax+b.

Slav.

Reply to
Slav Matveev

Стандартная библиотека языка C.

В комплекте с твоим компилятором языка C для твоей целевой платформы.

Бывает да, бывает нет. Зависит от конкретного компилятора.

Если позарез нужно, то можно взять стороннюю библиотеку и адаптировать под твой компилятор и твою целевую платформу. (А исходники компилятора на всякий случай, не нужны? -- тогда только GCC...)

[оверквотинг съеден злыми пингвинами...]

А зачем второй нужен? :-/

Reply to
Kirill Frolov

KF> Стандартная библиотека языка C. KF>

любой исходник libc например пакет для linux с таким именем возьми или любой компилятор расковыряй (правда в проприетарных продуктах могут оказаться только хидеры и dll, потому лучше смотреть в linux)

Reply to
Dmitry E. Oboukhov

Доброго времени суток тебе Vladislav!

05 Авг 06 14:37, Vladislav Baliasov -> Anatoly Mashanov:

AM>> Это в микроконтроллере-то я буду считать через ряд с невероятным AM>> количеством умножений с плавучкой? Hет уж.

VB> А почему и нет ? Компилятор делает именно это. И на ASM я делал так же VB> (логарифмы заняли 113 слов программной памяти AVR,

А исходным текстом не поделишся.

Я тут с грехом пополам все-же откомпилировал в Си вычисление функции ... в общем знаний не хватает пока разобраться в килобайте с лишним кода.

VB> а базовый набор VB> 32-битной плавучки - меньше 400 слов). Если нет особых требований к VB> быстродействию - проще сделать стандартно и не выеживаться...

Будь счастлив(а) Vladislav... С уважением Wladimir.

Reply to
Wladimir Tchernov

Доброго времени суток тебе Kirill!

04 Авг 06 13:46, Kirill Frolov -> Andrey Arnold:

KF> Я ничего не понял. Впрочем и не вникал. Хочу только сказать, что KF> ничто не мешает отсортировать список аргументов функции и её значений KF> и искать двоичным поиском за log2(N) времени,

А можно с этого места по подробнее, что-то никак не соображу.

Аргумент 1-65534 - это среднее значение периода. При 0,1 Гц - 65534, при 10 кГц

- 1

Итого 1,5 Гц на 1.

Функция нелинейна - быстро растет при малых аргуметах и мало меняется при больших.

Получается для каждого из 4096 результатов надо задать свой диапазон аргументов

- а это 3-4 байта на ячейку таблицы. Причем у одних значений диапазон аргументов огромен (сотни), а у других - только 1 значение.

KF> что для 4096 элементов KF> даст всего-то 12 операций сравнения. А этих элементов, очевидно, будет KF> в Nдцатьц раз меньше. Будет там что-то кратно двум или нет -- KF> совершенно не важно (что может позволить уменьшить ошибку KF> аппроксимации). Речь о применительности линейной интерполяции к задаче KF> озвученной WT.

Все равно не понял.

Будь счастлив(а) Kirill... С уважением Wladimir.

Reply to
Wladimir Tchernov

Доброго времени суток тебе Dmitry!

04 Авг 06 17:20, Dmitry E. Oboukhov -> Andrey Arnold:

AA>> Да я вроде понял. AA>> А в случае логарифма, там вообще просто получается. AA>> Hо у него тут есть оффсет, а это "ставит повторяемость функции" AA>> в довольно сложное положение.;) DO> у логарифма повторяемость тоже такая же DO> только она повторяться будет на диапазоне основания.

DO> а вот чтобы отмасштабировать результат табличный до нужного надо DO> подумать, похоже надо будет в степень основания вводить или корень DO> брать. DO> корень сложнее, а вот если основание и правда взять равным двум, то DO> тут можно поиграться (но таблицу надо собирать для такого диапазона DO> чтобы результат масштабировтаь только в бОльшую сторону)

Тоесть применить таблицу для аргументов 0,1-1, а затем еще и множители (х10, х100 .... х100000) ?

DO> мм DO> умножение

DO> надо подумать может масштабирование заменить аналогичным действием? DO> то есть две таблицы - логарифм и масштаб

Значит я понял практически правильно.

Будь счастлив(а) Dmitry... С уважением Wladimir.

Reply to
Wladimir Tchernov

Доброго времени суток тебе Vladimir!

03 Авг 06 22:27, Vladimir V. Teplouhov -> Wladimir Tchernov:

WT>> Требуется вычислять на ОМК (AVR - структуры) следующее выражение

WT>> Y=А*Log(В*X)

VT> если не решишь - напомни мылом, посмотрю в доку от ЕС-ки, VT> где все алгоритмы мат. функций описаны... Полезный трофей, VT> аднако :)

Я сейчас снимаю ВАХ а АЧХ с аналогового варианта схемы. Пытаюсь поймать все-ж какими функциями описывается работа каждого блока.

Диапазоны аргументов и функций считаю.

Будь счастлив(а) Vladimir... С уважением Wladimir.

Reply to
Wladimir Tchernov

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.