Как посчитать нелинейность зрения.

Здесь можно поболтать на отвлечённые темы. Реклама не допускается.
Ответить
RootShell
Рядовой
Сообщения: 77
Зарегистрирован: 27.06.2020{, 04:22}
Репутация: 18
Откуда: World
Имя: Agat
Контактная информация:

Как посчитать нелинейность зрения.

#1

Сообщение RootShell » 07.08.2020{, 20:36}

Есть у меня светодиодная лента и большое желание управлять ее яркостью, причем управлять правильно. В общем то ничего сложного. Берем обычный PWM, мосфет и управляем. Но зрение нелинейно и на малой яркости изменение шим на 1 значение заметно, а на большой этого не видно. Из 1024 значения шим делаем 10 предустановок и раскидываем PWM по нелинейной зависимости. Вопрос как посчитать нелинейность зрения? Что бы каждое изменение яркости 1-10 было одинаковым и на на малой яркости и на большой. С ходу ничего нагуглить не удалось. Даже не знаю заморачивался ли кто-то этим.

Аватара пользователя
Rovki
Полковник
Сообщения: 4872
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 269
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Как посчитать нелинейность зрения.

#2

Сообщение Rovki » 07.08.2020{, 21:07}

тут не только нелинейность зрения ,но и самих источников света . Нужна логарифмическая шкала
Электронщик до мозга костей и не только

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Как посчитать нелинейность зрения.

#3

Сообщение Dryundel » 07.08.2020{, 21:10}

RootShell, нелинейность зрения, а точней восприятия глазом свечения понятие весьма неоднозначное. это типа как погода на яндексе. +20 ощущается как +18.

Вариант первый.
Есть такой критерий как освещенность вот оно несколько ближе к восприятию. Воспользовавшись соответствующим измерителем заносим в таблицу нелинейного масштабирования значения PWM с равным шагом по шкале освещенности. Ну и дальше понятно, я думаю.

Вариант второй.
Органолептическим способом составляем такую же таблицу и так же используем нелинейное масштабирование.

О существовании соответствующего штатного блока, думаю говорить лишнее.

Аватара пользователя
Rovki
Полковник
Сообщения: 4872
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 269
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Как посчитать нелинейность зрения.

#4

Сообщение Rovki » 07.08.2020{, 21:15}

Электронщик до мозга костей и не только

RootShell
Рядовой
Сообщения: 77
Зарегистрирован: 27.06.2020{, 04:22}
Репутация: 18
Откуда: World
Имя: Agat
Контактная информация:

Как посчитать нелинейность зрения.

#5

Сообщение RootShell » 07.08.2020{, 21:26}

Мне не нужен штатный блок я пишу на С/С++ и мне нужна только формула расчета. Органолептический способ такое себе, он неточен как погода на марсе. Измерять освещенность в люксах так же не подходит у меня не освещенность, а светимость. И к тому же у них линейная зависимость. Логарифмическая шкала идеальна, но она должна быть как то расчитана. Вот и спрашиваю как расчитать?

UPD: Огромное спасибо Rovki. Это то, что нужно.

Отправлено спустя 13 минут 26 секунд:
Степенную зависимость более просто расчитать в микроконтроллере. Логарифм не лезет в прошивку, места не хватает. Хотя можно посчитать по лагорифму и сделать массив тогда и math.h не нужно подключать.

Идеальны оба решения. Расскажите, как это гуглилось? пытался решить безуспешно через синус.

Отправлено спустя 4 часа 39 минут 46 секунд:
Что то странное в формуле с логарифмом S(R)=k*ln(R)
R=1024 подбираю k = 14.427 что бы S=100 и поехал строить график.
PWM% 2^
1024100 10
512 90 9
256 80 8
128 70 7
64 60 6
32 505
16 40 4
8 30 3
4 20 2
2 10 1
Что то мне это напоминает? Да это же двойка в степени. :smile171:
Что я делаю не так? При этом график не линейный и при пересчете на 255 шим все четко совпадает с автором статьи.

Отправлено спустя 34 минуты 3 секунды:
Изображение

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Как посчитать нелинейность зрения.

#6

Сообщение Dryundel » 08.08.2020{, 10:55}

RootShell писал(а):
08.08.2020{, 02:53}
Что я делаю не так? При этом график не линейный и при пересчете на 255 шим все четко совпадает с автором статьи.
Похоже все так. Даже интересно стало. Проверил построение графиков по логарифму с коэффициентом и по двойке в степени. Действительно одинаковые графики Microsoft Mathematics нарисовал. Такой момент можно было заметить только на ШИМ 1024 и задатчике с процентной шкалой (0-100). Циферки совпали. :)
Если же к примеру брать как по умолчанию на AVR - задатчик аналоговый вход (0-1024) а шим (0-255), то думаю через логарифм с подбором коэффициента считать проще.

Аватара пользователя
Rovki
Полковник
Сообщения: 4872
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 269
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Как посчитать нелинейность зрения.

#7

Сообщение Rovki » 08.08.2020{, 12:38}

Вот так яндексировал- :D -https://yandex.ru/search/?text=%D0%BF%D ... 0&lr=10747
Электронщик до мозга костей и не только

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Как посчитать нелинейность зрения.

#8

Сообщение Dryundel » 08.08.2020{, 15:58}

RootShell, ну прям зацепила ваша тема. Мозги размял. :)

В результате полторы строчки кода и блок ШИМ для правильного управления свечением LED.
Если у кого есть возможность проверить в железе - отпишитесь как работает

В настройках блока два параметра
- Максимальное значение по входу
- Максимальное значение по выходу

Коэффициент для логарифма рассчитывается автоматом, исходя из этих параметров.
.
PWM_LED_1.jpg
PWM_LED_1.jpg (7.52 КБ) 1013 просмотров
.
PWM_LED_1.flp
(41.68 КБ) 35 скачиваний

Аватара пользователя
Rovki
Полковник
Сообщения: 4872
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 269
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Как посчитать нелинейность зрения.

#9

Сообщение Rovki » 08.08.2020{, 17:51}

Так и адресные ленты можно будет регулировать ....
Электронщик до мозга костей и не только

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Как посчитать нелинейность зрения.

#10

Сообщение Dryundel » 08.08.2020{, 19:36}

Rovki писал(а):
08.08.2020{, 17:51}
Так и адресные ленты можно будет регулировать ....
Как то сомневаюсь в этом. У адресных лент свой шим на каждый канал каждого модуля которые обеспечиваются адресными чипами. Такой способ возможен только с простой светодиодной лентой, в том числе и RGB но безадресной. Той которая светится только целиком.

RootShell
Рядовой
Сообщения: 77
Зарегистрирован: 27.06.2020{, 04:22}
Репутация: 18
Откуда: World
Имя: Agat
Контактная информация:

Как посчитать нелинейность зрения.

#11

Сообщение RootShell » 08.08.2020{, 21:45}

в Я.Железо предлагали пересчитать таблицу серого для настройки монитора под мою разрядность.
Вот эту:
Изображение
Оставлю эту запись, может когда пересчитаю.

SSSergeich
Капитан
Сообщения: 708
Зарегистрирован: 06.02.2016{, 11:01}
Репутация: 37
Откуда: Ярославль
Имя: Сергей

Как посчитать нелинейность зрения.

#12

Сообщение SSSergeich » 08.08.2020{, 21:48}

Dryundel писал(а):
08.08.2020{, 19:36}
Как то сомневаюсь в этом. У адресных лент свой шим на каждый канал каждого модуля которые обеспечиваются адресными чипами
И зря!
Видимо Rovki, имел ввиду НЕадресные ленты на основе WS28__.
По сути тот же RGB светодиод. 4 года назад я прилично времени потратил, пытаясь на глаз подобрать эффекты плавности для таких лент. А точнее хотел получить эффект вспышки.

И ведь даже были рекламные экраны на базе таких лент. Если помнишь, был здоровенный экран над бакалейкой, который резко бил по глазам всем автомобилистам, кто ехал от московского в сторону центра, который однажды благополучно сгорел. Так вот этот экран был на базе WS2801. Все бы ничего, но он страдал диким пересветом и недосветом.
А ведь наверно можно довольно таки хорошо "причесать" световой код используя совместно такой блок и алгоритм брезенхема...

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Как посчитать нелинейность зрения.

#13

Сообщение Dryundel » 08.08.2020{, 22:30}

RootShell писал(а):
08.08.2020{, 21:45}
в Я.Железо предлагали пересчитать таблицу серого для настройки монитора под мою разрядность.
Может и не стоит таблицу считать. Посмотри в блоке код. Там под любую разрядность по входу и по выходу через логарифм все считается.
Еще короче код, написать сложно. :) Есть конечно опасения, что эти вычисления возьмут чуть больше времени, но за то меньше памяти съедят.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Как посчитать нелинейность зрения.

#14

Сообщение Dryundel » 10.08.2020{, 13:38}

RootShell, К стати, если все же выбор пал на таблицы для масштабирования, блок можно использовать как калькулятор.
Ну или вот формулы для расчета:

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 секунд:
И код еще короче :)
КодПоказать

Код: Выделить всё

void setup()
{
    k = Amax / log(Pmax+1);
}
void loop()
{
    P = lrint(pow(M_E, (A / k))) - 1;
}
Где Amax и Pmax константы. Входной и выходной максимумы (Входная и выходная битность) соответственно.
.
PWM_LED_2.jpg
PWM_LED_2.jpg (3.11 КБ) 856 просмотров
.
PWM_LED_2.flp
(26.02 КБ) 42 скачивания
Работает на ура.
:)
Данный блок рабочий, но довольно медленный. Правильные и быстрые блоки ЗДЕСЬ.
Последний раз редактировалось Dryundel 19.01.2021{, 11:48}, всего редактировалось 1 раз.

RootShell
Рядовой
Сообщения: 77
Зарегистрирован: 27.06.2020{, 04:22}
Репутация: 18
Откуда: World
Имя: Agat
Контактная информация:

Как посчитать нелинейность зрения.

#15

Сообщение RootShell » 10.08.2020{, 17:42}

Dryundel, =) Благодарю. К сожалению я не использую 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 :smile427: (E в степени.) Давненько не развлекался с логарифмами, не смог решить простую задачу. Считал через подбор константы. Математик еще тот из меня. Но зато голову размял, а это всегда хорошо.

FLProg не плохой проект, а очень даже замечательный. Задумка просто отличная и реализация на уровне. Просто у меня не очень сложилось с arduino ide. Основное беспокойство доставляет отсутствие темной темы, и управление линкером. Пару раз пробовал кодить визуально, но все равно потом правил код перед заливкой в микропроцессор. Впервые про этот проект услышал года 3-4 назад. От деда - радиолюбителя, все никак руки не доходили посмотреть.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Как посчитать нелинейность зрения.

#16

Сообщение Dryundel » 10.08.2020{, 22:12}

RootShell писал(а):
10.08.2020{, 17:42}
К сожалению я не использую flprog. В моем устройстве так и остался pwm 0-1024
Не понимаю в чем проблема. Я же выложил код под любую дискретность. И голые формулы тоже. Используйте. С++ везде одинаковый.
Одна коротенькая строчка заменяет таблицу из 2048 значений в вашем случае. :)

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

RootShell
Рядовой
Сообщения: 77
Зарегистрирован: 27.06.2020{, 04:22}
Репутация: 18
Откуда: World
Имя: Agat
Контактная информация:

Как посчитать нелинейность зрения.

#17

Сообщение RootShell » 10.08.2020{, 23:57}

За формулы низкий поклон, я их в javaScript буду использовать. Какая разница где им работать? Математика везде одинакова. В микроконтроллере каждый байт на счету.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Как посчитать нелинейность зрения.

#18

Сообщение Dryundel » 19.01.2021{, 11:46}

ВНИМАНИЕ!
Блок коррекции из поста #14 хоть и рабочий, но довольно медленный из-за сложности формулы.

Правильные и быстрые блоки ЗДЕСЬ.

Ответить

Вернуться в «Просто поболтать (На свободную тему)»