Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции / Лекции по ИСТ.doc
Скачиваний:
190
Добавлен:
13.02.2014
Размер:
2.15 Mб
Скачать

Приложение Дельта модуляция

Данный алгоритм достаточно эффективен при сжатии относительно медленно изменяющихся данных, являющихся например, результатом работы АЦП. К тому же он очень прост в реализации.

Пусть поток данных имеет примерно такой вид:

55H 57H 53H 50H 4EH...

Видно, что каждый последующий байт отличается от предыдущего незначительно. Такой поток плохо сжимается обычными архиваторами (степень сжатия до 30%. Кстати, хваленый RAR 3.3 сжимает такие данные максимум на 35 %). Что можно предпринять?

Заменим абсолютные значения на величины приращения относительно предыдущего значения:

55H +2 -4 -3 -2

Теперь для представления каждого приращения (кроме самого первого) потребуется уже всего 4 бита (старший разряд знаковый). Если данные меняются еще медленнее, можно для представления приращений использовать 3 или 2 бита. При увеличении скорости изменения сигнала следует увеличивать разрядность данных.

Ниже приведено описание алгоритма.

Поток данных состоит из слов переменной длины. Для определенности будем считать, что начальная длина слова равна 8 бит. В процессе упаковки данных длина слова будет меняться: увеличиваться, если скорость измерения сигнала увеличивается, или уменьшаться, если скорость изменения сигнала уменьшается. Таким образом длина слова адаптируется к потоку данных. Данный алгоритм хорош тем, что в процессе упаковки (и распаковки) не требуется промежуточная буферизация данных, что позволяет использовать этот алгоритм при написании программ для микроконтроллеров с ограниченным объемом ОЗУ.

Каждый раз, когда нужно увеличить разрядность слова, разрядность увеличивается на величину AddLenw, а когда разрядность нужно уменьшить, она уменьшается на величину SubLenw. Эти значения могут быть как константными, так и переменными величинами (в зависимости от реализации). Разрядность данных имеет свой минимальный (MinLenw) и максимальный (MaxLenw) размер.

В реализации для PIC-контроллера размер неупакованного слова равен 10 бит (разрядность АЦП), а размер упакованного слова может быть от 2-х до 10-ти бит. Старший бит является знаковым. Например, слово 011101B представляет собой положительное смещение текущего значения +1DH, а слово 10011B - отрицательное смещение -3.

Блок-схема упаковки одного слова показана на рисунке:

Пример программы на языке С можно взять здесь. Данная программа написана с учетом возможной модификации для PIC-контроллера. В частности в программе не используются знаковые переменные.

Эффективность упаковки данных оценивалась на файлах с низкой степенью повторяемости данных (т.е. практически нет идущих подряд повторений) и с высокой степенью повторяемости. (См. графики ниже.) Кстати, обычные архиваторы плохо сжимают первый тип файлов и хорошо - второй тип.

Эффективность сильно зависит от структуры упаковываемых данных и от величин MinLenw (минимальное значение длины слова), MaxLenw (максимальное значение длины слова), AddLenw (величина приращения длины слова), SubLenw (величина уменьшения длины слова). Наиболее оптимальные результаты получаются при SubLenw = 1, поэтому значение SubLenw на графиках не присутствует.

Соседние файлы в папке лекции