ESP32. Библиотека сжатия массива данных в памяти

Не вижу связи.

И, повторюсь: универсальное решение никакого интереса не представляет по одной простой причине: нет и не может быть алгоритма, который на любых данных обеспечивал коэффициент сжатия хотя бы просто больше единицы.

ну, то есть, перестать заниматься ерундой

1 лайк

В 90% случаев меня устраивает gzip с дефолтовым коэффициентом сжатия.
Не на графике, конечно. Она, как правило, уже сжата
Так что вполне себе бывают универсальные архиваторы.
Если добью библиотечку MINIZ, то думаю здесь тоже останусь довольным результатом.

Точно. Ну его эту работу. Лучше пойти бухнуть

1 лайк

Это правильно. Надо за это выпить.

Ну так об этом сказал Ваш скромный слуга:

Ну вот, оказалось что скорость не необходимость, а хотелка. Если бы была необходимость, то нашли бы другое решение, но уж точно не сжатие.

это сам ИР сенсор выдает. Но у него диапазон -40 + 300, с точностью 0.1, то есть уже всего 3400 значений. 12 бит по умолчанию достаточно. Но ты до 8 сжал - отлично!

LZW алгоритм, на базе которого работают все архиваторы, тебе не очень подойдет. Он же словарь строит. А у тебя аналог картинки, пусть и в инфраред. Тебе Андриано правильно говорит: напиши простейший алгоритм с заменой значения на отличие от среднего. Можно так: разбей 32х24 на 8х8 блоков по 4х3. В каждом блоке передавай одно точное значение - среднее или угловое - пофиг, а остальные заменяй на разницу и передавай четырьмя, к примеру, битами. с возможностью (ежели появится, паче чаянья) указать “длинное” число с каким-то префиксом.
Будет отлично! Почти вдвое и без потерь.

врятли это поможет но вот

#include <Arduino.h>

// Определяем символы и их бинарные представления
const char* symbols[] = {"A",   "B",   "C",   "D",   "E",   "C"};
const char* codes[] = {  "00",  "01",  "100", "101", "111", "110"};
const int numSymbols = 6;

// Функция для кодирования строки
String encode(const String& input) {
String encoded = "";
for (int i = 0; i < input.length(); i++) {
char currentChar = input.charAt(i);
for (int j = 0; j < numSymbols; j++) {
if (currentChar == symbols[j][0]) { // Сравниваем с первым символом в массиве
encoded += codes[j]; break; }
}
}
return encoded;
}

// Функция для декодирования строки
String decode(const String& input) {
String decoded = ""; String temp = "";
for (int i = 0; i < input.length(); i++) {
temp += input.charAt(i);
for (int j = 0; j < numSymbols; j++) {
if (temp == codes[j]) {
decoded += symbols[j][0]; // Добавляем символ
temp = ""; // Сбрасываем временную строку
break; }
}
}
return decoded;
}

void setup() {
Serial.begin(9600);
Serial.println("Введите строку для кодирования (A, B, C, D, E, F) или декодирования (0 и 1):");
}

void loop() {
if (Serial.available() > 0) {
String input = Serial.readStringUntil('\n'); // Читаем строку до символа новой строки
input.trim(); // Убираем лишние пробелы
// Проверяем, состоит ли строка из 0 и 1
if (input.indexOf('0') != -1 || input.indexOf('1') != -1) {
// Проверяем, состоит ли строка только из 0 и 1
bool isBinary = true;
for (int i = 0; i < input.length(); i++) {
if (input.charAt(i) != '0' && input.charAt(i) != '1') {
isBinary = false; break; }
}
if (isBinary) {
String decoded = decode(input);
Serial.print("Decoded: "); Serial.println(decoded);
} else { Serial.println("Ошибка: строка должна содержать только 0 и 1 для декодирования."); }
} else {
// Кодируем строку
String encoded = encode(input);
Serial.print("Encoded: ");
Serial.println(encoded);
}
}
}// данные отправлять через ком порт, при символе A и B, если часто встречаются, то сэкономить можно... но время на преобразование обратно нужно ... так что скорее это то что трафик экономит)))

алгоритм хаффмана))) без постройки дерева… но в ручную если что наверное можете и сами добавить… может пригодится…
P.S. все еще не сдаюсь написать алгоритм вечного сжатия, даже если нечего не выйдет)))) уже готово 20+ кодировок сообщений которые не прочитать при перехвате))) а эта ненавистная физика не дает мне обратимый хешитель написать…

ты здоров там?

1 лайк

отправляем ABABBCDECABABABCD
получаем 0001000101100101111100000100010001100101
итог меньше бит передавать… только набор символов для уменьшения всего 6)))
83346064_8fb77654e25d33f85cb51c62f42faa6d_800
думал опять накосячил и не тот код выложил)))
спорить не буду, не искушайте!))) все вводится через монитор порта…
кстати выложили бы вы и другие хоть какие то свои коды, иногда хочется что то почитать, поанализировать… а почитать нечего…

А санитары разрешат?

2 лайка

а мы ведь им не скажем ?))) пока решаю эту задачу есть чем заняться, и есть мотивация сидеть с кодом, без нее как то скучно…

так епта, осталось это сжать в 2 бита и дело в шляпе!

1 лайк

да и все нули повыкинуть, они ничего не значат же.

2 лайка

и назвать BABOфман))

3 лайка

да я только за, но вот кто то физику запрограммировал мешать мне…
пока что приходится довольствоваться 39 битами в место 136…

и тут я согласен, но надо написать формулу по которой их будем запоминать, а потом при восстановлении вновь дописывать, (сдувать шарик) только вот не знаю как)))

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

3 лайка

кажется не осилю))) но проверю не раньше чем люди мне дадут денег на 3 коллайдера, но если есть идеи, которые все же боле менее реальные, то предлагайте))) а эта задача по крайней мере мне дает интерес упражняться с кодом…

помню к нам пришел, в году так в 2008, один чудик, говорит я изобрел не инвазивный способ определения сахара/глюкозы в крови, выкладывает коробку с платами, что то наподобие двух зажимов/клипс и за щеки себе пихает, на LCD 2002 какие то цифры поползли, я спиной сижу пока с ним шеф разговаривает…
тут мне, Леш, повернись, глянь.
я поворачиваюсь… о боже… UNO на самодельной плате и два “крокодила” во рту))
я шефу подал наш “фирменный” знак, и через пять минут “ученый” удалился со словами - у меня там люди сидят, мне их кормить надо, а вы тут ничего не понимаете, так и издеваться еще пытаетесь.
никогда не забуду…

Мне дедок вечный двигатель демонстрировал!! Доска с магнитами, чета там крутится если ее покачать… Давайте типа сделаем модель, чуть-чуть осталось…

вот и @BABOS недалеко от заслуженного…
не понимает, я ему лучшее предлагаю - НОБЕЛЕВКУ!