Как посчитать нелинейность зрения.
-
- Рядовой
- Сообщения: 77
- Зарегистрирован: 27 июн 2020, 04:22
- Откуда: World
- Имя: Agat
- Контактная информация:
Как посчитать нелинейность зрения.
Есть у меня светодиодная лента и большое желание управлять ее яркостью, причем управлять правильно. В общем то ничего сложного. Берем обычный PWM, мосфет и управляем. Но зрение нелинейно и на малой яркости изменение шим на 1 значение заметно, а на большой этого не видно. Из 1024 значения шим делаем 10 предустановок и раскидываем PWM по нелинейной зависимости. Вопрос как посчитать нелинейность зрения? Что бы каждое изменение яркости 1-10 было одинаковым и на на малой яркости и на большой. С ходу ничего нагуглить не удалось. Даже не знаю заморачивался ли кто-то этим.
- Rovki
- Полковник
- Сообщения: 5722
- Зарегистрирован: 22 апр 2016, 17:25
- Откуда: Чехов
- Имя: Анатолий
- Благодарил (а): 68 раз
- Поблагодарили: 217 раз
- Контактная информация:
Как посчитать нелинейность зрения.
тут не только нелинейность зрения ,но и самих источников света . Нужна логарифмическая шкала
Электронщик до мозга костей и не только
- Dryundel
- Полковник
- Сообщения: 2423
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Благодарил (а): 2 раза
- Поблагодарили: 29 раз
Как посчитать нелинейность зрения.
[ref]RootShell[/ref], нелинейность зрения, а точней восприятия глазом свечения понятие весьма неоднозначное. это типа как погода на яндексе. +20 ощущается как +18.
Вариант первый.
Есть такой критерий как освещенность вот оно несколько ближе к восприятию. Воспользовавшись соответствующим измерителем заносим в таблицу нелинейного масштабирования значения PWM с равным шагом по шкале освещенности. Ну и дальше понятно, я думаю.
Вариант второй.
Органолептическим способом составляем такую же таблицу и так же используем нелинейное масштабирование.
О существовании соответствующего штатного блока, думаю говорить лишнее.
Вариант первый.
Есть такой критерий как освещенность вот оно несколько ближе к восприятию. Воспользовавшись соответствующим измерителем заносим в таблицу нелинейного масштабирования значения PWM с равным шагом по шкале освещенности. Ну и дальше понятно, я думаю.
Вариант второй.
Органолептическим способом составляем такую же таблицу и так же используем нелинейное масштабирование.
О существовании соответствующего штатного блока, думаю говорить лишнее.
- Rovki
- Полковник
- Сообщения: 5722
- Зарегистрирован: 22 апр 2016, 17:25
- Откуда: Чехов
- Имя: Анатолий
- Благодарил (а): 68 раз
- Поблагодарили: 217 раз
- Контактная информация:
-
- Рядовой
- Сообщения: 77
- Зарегистрирован: 27 июн 2020, 04:22
- Откуда: World
- Имя: Agat
- Контактная информация:
Как посчитать нелинейность зрения.
Мне не нужен штатный блок я пишу на С/С++ и мне нужна только формула расчета. Органолептический способ такое себе, он неточен как погода на марсе. Измерять освещенность в люксах так же не подходит у меня не освещенность, а светимость. И к тому же у них линейная зависимость. Логарифмическая шкала идеальна, но она должна быть как то расчитана. Вот и спрашиваю как расчитать?
UPD: Огромное спасибо [ref=#ff8000]Rovki[/ref]. Это то, что нужно.
Отправлено спустя 13 минут 26 секунд:
Степенную зависимость более просто расчитать в микроконтроллере. Логарифм не лезет в прошивку, места не хватает. Хотя можно посчитать по лагорифму и сделать массив тогда и math.h не нужно подключать.
Идеальны оба решения. Расскажите, как это гуглилось? пытался решить безуспешно через синус.
Отправлено спустя 4 часа 39 минут 46 секунд:
Что то странное в формуле с логарифмом S(R)=k*ln(R)
R=1024 подбираю k = 14.427 что бы S=100 и поехал строить график.
|PWM |% |2^
|----------|----------|----------|
|1024 |100 | 10 |
|512 | 90 |9
|256 |80 |8
|128 |70 |7
|64 |60 |6
|32 |50 |5
|16 |40 |4
|8 |30 |3
|4 |20 |2
|2 |10 |1
Что то мне это напоминает? Да это же двойка в степени.
Что я делаю не так? При этом график не линейный и при пересчете на 255 шим все четко совпадает с автором статьи.
Отправлено спустя 34 минуты 3 секунды:

UPD: Огромное спасибо [ref=#ff8000]Rovki[/ref]. Это то, что нужно.
Отправлено спустя 13 минут 26 секунд:
Степенную зависимость более просто расчитать в микроконтроллере. Логарифм не лезет в прошивку, места не хватает. Хотя можно посчитать по лагорифму и сделать массив тогда и math.h не нужно подключать.
Идеальны оба решения. Расскажите, как это гуглилось? пытался решить безуспешно через синус.
Отправлено спустя 4 часа 39 минут 46 секунд:
Что то странное в формуле с логарифмом S(R)=k*ln(R)
R=1024 подбираю k = 14.427 что бы S=100 и поехал строить график.
|PWM |% |2^
|----------|----------|----------|
|1024 |100 | 10 |
|512 | 90 |9
|256 |80 |8
|128 |70 |7
|64 |60 |6
|32 |50 |5
|16 |40 |4
|8 |30 |3
|4 |20 |2
|2 |10 |1
Что то мне это напоминает? Да это же двойка в степени.

Что я делаю не так? При этом график не линейный и при пересчете на 255 шим все четко совпадает с автором статьи.
Отправлено спустя 34 минуты 3 секунды:

- Dryundel
- Полковник
- Сообщения: 2423
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Благодарил (а): 2 раза
- Поблагодарили: 29 раз
Как посчитать нелинейность зрения.
Похоже все так. Даже интересно стало. Проверил построение графиков по логарифму с коэффициентом и по двойке в степени. Действительно одинаковые графики Microsoft Mathematics нарисовал. Такой момент можно было заметить только на ШИМ 1024 и задатчике с процентной шкалой (0-100). Циферки совпали.RootShell писал(а): 08 авг 2020, 02:53 Что я делаю не так? При этом график не линейный и при пересчете на 255 шим все четко совпадает с автором статьи.

Если же к примеру брать как по умолчанию на AVR - задатчик аналоговый вход (0-1024) а шим (0-255), то думаю через логарифм с подбором коэффициента считать проще.
- Rovki
- Полковник
- Сообщения: 5722
- Зарегистрирован: 22 апр 2016, 17:25
- Откуда: Чехов
- Имя: Анатолий
- Благодарил (а): 68 раз
- Поблагодарили: 217 раз
- Контактная информация:
Как посчитать нелинейность зрения.
Вот так яндексировал-
-https://yandex.ru/search/?text=%D0%BF%D ... 0&lr=10747

Электронщик до мозга костей и не только
- Dryundel
- Полковник
- Сообщения: 2423
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Благодарил (а): 2 раза
- Поблагодарили: 29 раз
Как посчитать нелинейность зрения.
[ref]RootShell[/ref], ну прям зацепила ваша тема. Мозги размял.
В результате полторы строчки кода и блок ШИМ для правильного управления свечением LED.
Если у кого есть возможность проверить в железе - отпишитесь как работает
В настройках блока два параметра
- Максимальное значение по входу
- Максимальное значение по выходу
Коэффициент для логарифма рассчитывается автоматом, исходя из этих параметров.
. .

В результате полторы строчки кода и блок ШИМ для правильного управления свечением LED.
Если у кого есть возможность проверить в железе - отпишитесь как работает
В настройках блока два параметра
- Максимальное значение по входу
- Максимальное значение по выходу
Коэффициент для логарифма рассчитывается автоматом, исходя из этих параметров.
. .
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- Rovki
- Полковник
- Сообщения: 5722
- Зарегистрирован: 22 апр 2016, 17:25
- Откуда: Чехов
- Имя: Анатолий
- Благодарил (а): 68 раз
- Поблагодарили: 217 раз
- Контактная информация:
Как посчитать нелинейность зрения.
Так и адресные ленты можно будет регулировать ....
Электронщик до мозга костей и не только
- Dryundel
- Полковник
- Сообщения: 2423
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Благодарил (а): 2 раза
- Поблагодарили: 29 раз
Как посчитать нелинейность зрения.
Как то сомневаюсь в этом. У адресных лент свой шим на каждый канал каждого модуля которые обеспечиваются адресными чипами. Такой способ возможен только с простой светодиодной лентой, в том числе и RGB но безадресной. Той которая светится только целиком.
-
- Рядовой
- Сообщения: 77
- Зарегистрирован: 27 июн 2020, 04:22
- Откуда: World
- Имя: Agat
- Контактная информация:
Как посчитать нелинейность зрения.
в Я.Железо предлагали пересчитать таблицу серого для настройки монитора под мою разрядность.
Вот эту:
Оставлю эту запись, может когда пересчитаю.
Вот эту:

Оставлю эту запись, может когда пересчитаю.
-
- Капитан
- Сообщения: 708
- Зарегистрирован: 06 фев 2016, 11:01
- Откуда: Ярославль
- Имя: Сергей
Как посчитать нелинейность зрения.
И зря!Dryundel писал(а): 08 авг 2020, 19:36 Как то сомневаюсь в этом. У адресных лент свой шим на каждый канал каждого модуля которые обеспечиваются адресными чипами
Видимо [ref=#ff8000]Rovki[/ref], имел ввиду НЕадресные ленты на основе WS28__.
По сути тот же RGB светодиод. 4 года назад я прилично времени потратил, пытаясь на глаз подобрать эффекты плавности для таких лент. А точнее хотел получить эффект вспышки.
И ведь даже были рекламные экраны на базе таких лент. Если помнишь, был здоровенный экран над бакалейкой, который резко бил по глазам всем автомобилистам, кто ехал от московского в сторону центра, который однажды благополучно сгорел. Так вот этот экран был на базе WS2801. Все бы ничего, но он страдал диким пересветом и недосветом.
А ведь наверно можно довольно таки хорошо "причесать" световой код используя совместно такой блок и алгоритм брезенхема...
- Dryundel
- Полковник
- Сообщения: 2423
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Благодарил (а): 2 раза
- Поблагодарили: 29 раз
Как посчитать нелинейность зрения.
Может и не стоит таблицу считать. Посмотри в блоке код. Там под любую разрядность по входу и по выходу через логарифм все считается.RootShell писал(а): 08 авг 2020, 21:45 в Я.Железо предлагали пересчитать таблицу серого для настройки монитора под мою разрядность.
Еще короче код, написать сложно.

- Dryundel
- Полковник
- Сообщения: 2423
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Благодарил (а): 2 раза
- Поблагодарили: 29 раз
Как посчитать нелинейность зрения.
[ref]RootShell[/ref], К стати, если все же выбор пал на таблицы для масштабирования, блок можно использовать как калькулятор.
Ну или вот формулы для расчета:
k=Smax/ln(Rmax)
R(S)=E^(S/k)
Или если объединить:
R(S)=E^(S/(Smax/ln(Rmax)))

Отправлено спустя 1 час 22 минуты 13 секунд:
Единственный не хороший момент, который так же описан в статье:
Но и его можно обойти.
К примеру так:
R(S)=E^(S/(Smax/ln(Rmax+1)))-1
И тогда вообще все по феншую получается.
Отправлено спустя 46 минут 20 секунд:
И код еще короче
[spoiler=Код][/spoiler]
Где Amax и Pmax константы. Входной и выходной максимумы (Входная и выходная битность) соответственно.
. . Работает на ура.

Данный блок рабочий, но довольно медленный. Правильные и быстрые блоки ЗДЕСЬ.
Ну или вот формулы для расчета:
k=Smax/ln(Rmax)
R(S)=E^(S/k)
Или если объединить:
R(S)=E^(S/(Smax/ln(Rmax)))

Отправлено спустя 1 час 22 минуты 13 секунд:
Единственный не хороший момент, который так же описан в статье:
Это то, что по данной формуле, R(S) не сможет принять значение меньше единицы.
Но и его можно обойти.
К примеру так:
R(S)=E^(S/(Smax/ln(Rmax+1)))-1
И тогда вообще все по феншую получается.
Отправлено спустя 46 минут 20 секунд:
И код еще короче

[spoiler=Код]
Код: Выделить всё
void setup()
{
k = Amax / log(Pmax+1);
}
void loop()
{
P = lrint(pow(M_E, (A / k))) - 1;
}
Где Amax и Pmax константы. Входной и выходной максимумы (Входная и выходная битность) соответственно.
. . Работает на ура.

Данный блок рабочий, но довольно медленный. Правильные и быстрые блоки ЗДЕСЬ.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Dryundel 19 янв 2021, 11:48, всего редактировалось 1 раз.
-
- Рядовой
- Сообщения: 77
- Зарегистрирован: 27 июн 2020, 04:22
- Откуда: World
- Имя: Agat
- Контактная информация:
Как посчитать нелинейность зрения.
[ref]Dryundel[/ref], =) Благодарю. К сожалению я не использую flprog. В моем устройстве так и остался pwm 0-1024. Предустановки нужного значения задаются через node-red и передаются в устройство через mqtt. В общем то, эти предустановки и требовалось рассчитать. Переход между установками проходит через метод Fade - постепенное увеличение или уменьшение яркости. Сам fade принимает 2 аргумента setBrightness и speed. Так как в устройстве 2 белых ленты warm/cold и хочется ими тонко рулить - вынес управление pwm пока наружу.
R(S)=E^(S/(Smax/ln(Rmax+1)))-1
(E в степени.) Давненько не развлекался с логарифмами, не смог решить простую задачу. Считал через подбор константы. Математик еще тот из меня. Но зато голову размял, а это всегда хорошо.
FLProg не плохой проект, а очень даже замечательный. Задумка просто отличная и реализация на уровне. Просто у меня не очень сложилось с arduino ide. Основное беспокойство доставляет отсутствие темной темы, и управление линкером. Пару раз пробовал кодить визуально, но все равно потом правил код перед заливкой в микропроцессор. Впервые про этот проект услышал года 3-4 назад. От деда - радиолюбителя, все никак руки не доходили посмотреть.
R(S)=E^(S/(Smax/ln(Rmax+1)))-1

FLProg не плохой проект, а очень даже замечательный. Задумка просто отличная и реализация на уровне. Просто у меня не очень сложилось с arduino ide. Основное беспокойство доставляет отсутствие темной темы, и управление линкером. Пару раз пробовал кодить визуально, но все равно потом правил код перед заливкой в микропроцессор. Впервые про этот проект услышал года 3-4 назад. От деда - радиолюбителя, все никак руки не доходили посмотреть.
- Dryundel
- Полковник
- Сообщения: 2423
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Благодарил (а): 2 раза
- Поблагодарили: 29 раз
Как посчитать нелинейность зрения.
Не понимаю в чем проблема. Я же выложил код под любую дискретность. И голые формулы тоже. Используйте. С++ везде одинаковый.RootShell писал(а): 10 авг 2020, 17:42 К сожалению я не использую flprog. В моем устройстве так и остался pwm 0-1024
Одна коротенькая строчка заменяет таблицу из 2048 значений в вашем случае.

А то что блок выложил, так это для всех. Не гоже на этом форуме без блоков, одним кодом оперировать. Может кому то сгодится. Тема то правильная.

-
- Рядовой
- Сообщения: 77
- Зарегистрирован: 27 июн 2020, 04:22
- Откуда: World
- Имя: Agat
- Контактная информация:
Как посчитать нелинейность зрения.
За формулы низкий поклон, я их в javaScript буду использовать. Какая разница где им работать? Математика везде одинакова. В микроконтроллере каждый байт на счету.
- Dryundel
- Полковник
- Сообщения: 2423
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Благодарил (а): 2 раза
- Поблагодарили: 29 раз
Как посчитать нелинейность зрения.
ВНИМАНИЕ!
Блок коррекции из поста #14 хоть и рабочий, но довольно медленный из-за сложности формулы.
Правильные и быстрые блоки ЗДЕСЬ.
Блок коррекции из поста #14 хоть и рабочий, но довольно медленный из-за сложности формулы.
Правильные и быстрые блоки ЗДЕСЬ.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя