Baser 5 19 марта, 2021 Опубликовано 19 марта, 2021 · Жалоба 23 часа назад, whale сказал: Господа. есть входной поток данным с макс размером скажем 1000, его нужно ужать в один байт те 255, причем основная инфа в потоке содержится в первой половине размера, те <=500, при >500 инфа тоже интересна но менее важна, в итоге самое простое это взять логарифм но он слишком долго считает даже по таблице, тк обработка идет на stm32 m0. Может есть какие то еще быстрые функции для такого преобразования ? Если памяти на таблицу жалко можно сделать кусочно-линейную функцию, типа такой: if (x < 112) y = x; // 0...111 else if (x < 368) y = x>>2 + 84; // 112...176 else if (x < 1001) y = x>>3 + 130; // 176...255 else y = 255; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
whale 1 19 марта, 2021 Опубликовано 19 марта, 2021 · Жалоба Память нашел, пока вполне устраивает, к тому же желательно гладкую функцию, идеально логарифм. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 30 19 марта, 2021 Опубликовано 19 марта, 2021 · Жалоба При ошибочном входном значении (большем 1000) будет возвращаться 0 - не лучшее решение. Само собой ;-) 255 возвращать надо - честная насыщение-"полочка", а не "обрыв" в ноль (с какого?), будет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ivan24190 0 20 марта, 2021 Опубликовано 20 марта, 2021 · Жалоба 9 часов назад, whale сказал: Память нашел, пока вполне устраивает, к тому же желательно гладкую функцию, идеально логарифм. А почему нельзя воспользоваться такой формулой: Если x > 1000, то y = 255 Иначе y = x * 100 / 392. Считать всё в целых числах. Например y = 1000*100/392=255. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bve 1 23 марта, 2021 Опубликовано 23 марта, 2021 · Жалоба Очень похожи методы μ-Law и А-Law Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться