Quantization / quantisation

Quantization / quantisation

Не сжатие, но полезная штука. Мы ее в каждую статью пихали.

В общем виде этим занимается signal processing ( https://en.wikipedia.org/wiki/Quantization_(signal_processing) ).

Допустим, нам нужно хранить вещественные числа — результат вычислений или поток от точных сенсоров.

Если в double (и даже float) нам дорого, а fixed point библиотека нас не устраивает, используем квантизацию.

1) Линейная — отображаем множество значений (вероятно, бесконечное) на конечное множество нужного размера — например, 256.

Конвертируем линейной функцией — пара инструкций.

2) “раздаем” 256 значений не униформно как в (1), а согласно плотности распределения.

А где его взять? Как говорил Жеглов, для этого есть 3-й подход.

3) Согласно domain knowledge. Проще пояснить на примере.

Пусть у нас сенсор температуры снимает точные показания из нутра бойлера.

Отоброжать отрицательные значения и значения больше точки кипения не нужно — underflow/overflow для нас saturation.

0 – 5, записываем как 0. Если вода в бойлере замерзает, тут уже не до точности.

95 – 100 как 255. Все равно сейчас взорвется.

Изучаем рабочий диапазон бойлера в разные сезоны.

Для каждого сезона выделяем под основной сегмент много бит, чтобы получить нужную резолюцию,

а для остальных температур используем приближение военного времени.

4) Гибрид — разбиваем множество на несколько сегментов и в каждом сегменте используем линейную функций с опр. коэфициентом.

Бонус — квант. значения сжимаются куда лучше float/double.

2 thoughts on “Quantization / quantisation

Leave a comment