Основная проблема, как я понимаю, заключается в преобразовании 12-разрядного значения в 8-разрядное.
Range of 12-bit value = 0 - 4095 (4096 values)
Range of 8-bit value = 0 - 255 ( 256 values)
Я бы попытался преобразовать 12-разрядное значение x
в8-битное значение y
- Сначала уменьшите сначала до диапазона 0-1, а затем
- Затем увеличьте до диапазона 0-256.
Некоторый код C-ish:
uint16_t x = some_value;
uint8_t y = (uint8_t) ((double) x/4096 ) * 256;
Обновление
Благодаря комментарию Kriss я понял, что яоставил без внимания скорость вопроса.Вышеупомянутое решение из-за операций с плавающей запятой может быть медленнее, чем операции с целыми числами.
Затем я начал рассматривать другое решение.Как насчет построения y
с 8
старшими значащими битами x
?Другими словами, обрезая 4
младшие значащие биты.
y = x >> 4;
Будет ли это работать?