Поддерживает ли сжатие данных LZSS декомпрессию на лету на встроенной стороне?

Сценарий: Данные (изображения fpga — файлы .bin) сжимаются на хосте, отправляются на fpga (встроенная сторона) пакетами по 62 байта и распаковываются там. Моя цель — свести к минимуму использование памяти и стоимость процессора на встроенной стороне.

Вопрос. Использование метода сжатия данных LZSS с большим размером блока: на встроенной стороне я предполагаю, что размер блока представляет собой фрагмент данных до сжатия. Если мы выберем размер блока 2048 и сожмем его, скажем, до 1000 байт… нужно ли нам одновременно иметь все 1000 байт на встроенной стороне, чтобы иметь возможность распаковать его? Или мы можем взять эти 1000 байт и распаковать их на лету, когда мы будем передавать 62 байта за раз?


person Santosh Nikhil Kumar    schedule 06.06.2013    source источник
comment
Нашли ли вы решение для этого, реализовали ли вы алгоритм LZSS на каком языке?   -  person The Beast    schedule 17.02.2016


Ответы (1)


Цитирование Википедии LZ77 и LZ78:

Чтобы обнаружить совпадения, кодировщик должен отслеживать некоторое количество самых последних данных, например, последние 2 КБ, 4 КБ или 32 КБ. Структура, в которой хранятся эти данные, называется скользящим окном, поэтому LZ77 иногда называют сжатием скользящего окна. Кодировщик должен хранить эти данные для поиска совпадений, а декодер должен хранить эти данные для интерпретации совпадений, на которые ссылается кодировщик. Чем больше скользящее окно, тем дольше кодировщик может искать для создания ссылок.

Поэтому вам нужно правильно настроить размер скользящего окна во время сжатия, чтобы он составлял ‹= 62 байта. В противном случае вам нужно будет сохранить ваши старые сжатые пакеты на случай, если на них будут ссылаться, это усложнит реализацию.

На мой взгляд, проще просто сжимать по 62 байта за раз. Это приведет к снижению эффективности сжатия, но к более быстрой реализации.

person Akhil    schedule 10.06.2013
comment
у меня та же проблема, но я использую CAN-шину (кадр может содержать данные, ограниченные 8 байтами) для отправки моих сжатых данных ... на хост (MCP5748: у которого всего 768 КБ ОЗУ), поэтому, когда данные в хосте, как это сделать, чтобы распаковать его, потребовалось бы много времени, чтобы распаковать каждые 8 ​​байтов, возможно, я должен объединить байты, чтобы сформировать буфер данных, прежде чем прошивать его !!! - person The Beast; 17.02.2016