сети 3-4 Режимы Кодирование Качество.ppt
- Количество слайдов: 26
Лекція 3 -4 Комп’ютерні мережі КОДИРОВАНИЕ ДАННЫХ. РЕЖИМЫ ПЕРЕДАЧИ И КАЧЕСТВО СЕРВИСА 1
Кодирование данных n n n Кодирование на двух нижних уровнях определяет способ представления данных сигналами, распространяющимися по среде передачи. Естественно, что на принимающей стороне осуществляется симметричное декодирование. Логическое кодирование данных (data encoding) преобразует поток бит сформированного кадра МАС уровня в последовательность символов, подлежащих физическому кодированию для передачи по линии связи. В простейшем случае это кодирование отсутствует (его можно считать и прозрачным), тогда каждый бит входного потока отображается соответствующим битом выходного. Для логического кодирования используются разные схемы, из которых отметим следующие: 4 В/5 В — каждые 4 бита входного потока кодируются 5 битным символом При этом получается двукратная избыточность, поскольку 24 = 16 входных комбинаций представляются символами из набора в 25 = 32. Накладные расходы по количеству битовых интервалов составляют (5 4)/4 = 1/4 (25 %). Избыточность выходного кода позволяет опреде лить ряд служебных символов, используемых для поддержания синхрони зации, выделения служебных полей кадров и иных целей на физическом уровне. Применяется в FDDI, 100 Base. FX/TX. 8 В/10 В — 8 бит кодируются 10 битным символом, но уже с 4 кратной избыточностью (256 входных в 1024 выходных) при том же уровне накладных расходов (25 %). Каждое из 256 возможных значений байта может быть представлено двумя вариантами выходных символов (позитивным и негативным. Из пары вариантов выбирается тот, у которого первый бит отличается от последнего бита предыдущего переданного символа. Применяется в 1000 Base. SX/LX/CX. 8 В/6 Т — 8 бит входного цотока кодируются шестью троичными (T=ternary) цифрами ( , 0, +). Например, 00 h: + 00+-; 0 lh: 0+-+-0; . . . 0 Eh: -+0 -0+; . . . FEh: -+0+00; FFh: +0 -+00. Код имеет избыточность 36/28 = 729/256 = 2, 85, но скорость передачи символов в линию (правда, троичных) оказывается ниже битовой скорости их поступления на кодирование. Применяется в 100 Base. T 4. Вставка бит (bit stuffing) бит ориентированная схема исключения недопустимых 2 последовательностей бит.
Кодирование данных(продолжение) n Физическое, или сигнальное, кодирование (signal encoding) n n определяет правила представления дискретных символов (продуктов логического кодирования) в физические (электрические или оптические) сигналы линии. Физические сигналы могут иметь аналоговую (непрерывную) форму — в принципе бесконечное число значений, из которых выбирают допустимое распознаваемое множество. На уровне физических сигналов вместо битовой скорости (бит/с) оперируют понятием скорости изменения сигнала в линии, измеряемой в бодах (baud). Под этой скоростью подразумевается число изменений различимых состояний линии за единицу времени. В простейших случаях двухуровневого кодирования эти скорости совпадают На физическом уровне должна осуществляться синхронизация приемника и передатчика. Внешняя синхронизация — передача тактового сигнала, отмечающего битовые интервалы, практически не применяется из за дороговизны реализации. Ряд схем физического кодирования являются самосинхронизирующимися — они позволяют выделять синхросигнал из принимаемой последовательности состояний линии. Ряд схем позволяет выделять синхросигнал не для всех кодируемых символов, для таких схем логическое кодирование за счет избыточности должно исключать нежелательные комбинации. Скремблирование (scrajnbling) на физическом уровне позволяет подавить слишком сильные спектральные составляющие сигнала, «размазывая» их по некоторой полосе спектра. Слишком сильные составляющие вызывают нежелательные помехи на 3 соседние линии передачи и излучение в окружающую среду.
Физическое кодирование используются следующие термины, часть из которых применимы только для электрической передачи: n Потенциальное кодирование (potencial coding) — информативным является уровень сигнала в определенные моменты времени. n - Транзитивное кодирование (transition coding) — информативным является переход из одного состояния в другое. n Униполярное (unipolar) — сигнал одной полярности используется для представления одного значения, нулевой сигнал — для другого. n - Полярное (polar) — сигнал одной полярности используется для представления одного значения, сигнал другой полярности — для другого. При оптоволоконной передаче вместо разной полярности используются два хоро шо различимых значения амплитуды импульса. n Биполярное (bipolar), или двуполярное — использует положительное, отрицательное и нулевое значения для представления трех состояний. n Двухфазное (biphase) — в каждом битовом интервале обязательно присутствует переход из одного состояния в другое, что используется для выделения синхросигнала. Рассмотрим популярные схемы кодирования, применяемые в локальных сетях 4 и дальних коммуникациях:
Применяемые в сетях схемы кодирования 5
AMI (Alternate Mark Inversion), она же АВР (Alternate bipolar) — биполярная схема, использующая значения +V, 0 V и -V. Все нулевые биты представляются значением 0 V, единичные — чередующимися значениями +V и -V (слайд). Применяется в DSx (DS 1 -DS 4), ISDN. He является полностью самосинхронизирующейся — длинная последовательность нулей приведет к потере синхронизации. 6
Аналоги АМІ МАМІ (Modified Alternate Mark Inversion), она же ASI (Alternate Space In ersion) — модифицировандая, схема AMI: импульсами чередующейся v полярности кодируется « 0» , а « 1» — нулевым потенциалом. Применяется в ISDN (S/T интерфейсы). n B 8 ZS (Bipolar with 8 Zero Substitution) — схема, аналогичная AMI, но для синхронизации исключающая последовательности 8 и более нулей (за счет вставки бит). n - HDB 3 (High Density Bipolar 3) — схема, аналогичная AMI, но не допускающая передачи последовательности более трех нулей. Вместо цепочки из четырех нулей вставляется один из четырех биполярных кодов (bipolar violation), в зависимости от предыстории — полярности последнего импульса и предыдущей замены (табл. 1. 2). n 7
Манчестерское кодирование (manchester encoding) — двухфазное полярное (возможно, и униполярное) самосинхронизирующееся. Текущий бит определяется по направлению смены состояния в середине битового интервала: от -V к +V — « 1» , от +V к -V — « 0» (рис. Переход в начале интервала может быть, а может и не быть. Применяется в Ethernet (в первых версиях — униполярное). 8
Дифференциальное манчестерское кодирование n Дифференциальное манчестерское кодирование (differential manchester encoding) — двухфазное полярное (униполярное) самосинхронизирующееся. Текущий бит определяется по наличию перехода в начале битового интервала , например, « 0» — есть переход (вертикальный фрагмент), « 1» — нет перехода (горизонтальный фрагмент). Возможно и противоположное определение « 0» и « 1» . В середине битового интервала переход есть всегда, он используется для синхронизации. n В Token Ring применяется модификация этого метода, в которой кроме бит « 0» и « 1» определены также два отличимых от них бита «J» и «К» (рис. 1. 6, б). Здесь нет переходов в середине интервала, бит «К» имеет переход в начале интервала, а «J» — нет. 9
Код MLT-3 (Multilevel transmission) — трехуровневое кодирование со скремблированием, не самосинхронизирующееся. Является усложненным вариантом NRZI, благодаря чередованию трех уровней сужается требуемая полоса частот. Применяется в FDDI и 100 Base. TX. Изменение сигнала происходит в начале передачи бита. Если передается « 0» , то изменения нет, а если « 1» , то происходит изменение уровня сигнала на следующий (0, 1, 0, . . . ), такой сигнал генерирует меньше помех (ЕМВ). 10
RZ (Return to Zero — с возвратом к нулю) — биполярная транзитивная самосинхронизирующаяся схема. Состояние в определенный момент битового интервала всегда возвращается к нулю. Так же, как и NRZ, имеет недифференциальный вариант (рис. а) и дифференциальный (рис. б). В дифференциальном привязки « 1» и « 0» к определенному состоянию нет. 11
-NRZ (Non-Return to Zero — без возврата к нулю) — биполярная нетранзитивная схема (состояния меняются на границе), имеющая два варианта. В недифференциальном NRZ (используется в RS -232) состояние непосредственно отражает значение бита (рис. а). В дифференциальном NRZ состояние меняется в начале битового интервала для « 1» и не меняется для « 0» (рис. б), привязки « 1» и « 0» к определенному состоянию нет. - NRZI (Non-Return to Zero Inverted) — модифицированный вариант NRZ (рис. в). Здесь состояние меняется на противоположное в начале битового интервала при передаче « 0» и не меняется при передаче « 1» (возможна и обратная схема представления « 0» и « 1» ). Применяется в FDDI, 100 Base. FX. 12
Коды Код 4 В 5 В n Этот код используют в качестве приложения к другим методам кодировки, например к NRZ. В этом методе кодировки к каждым четырем битам добавляют пятый. Из 32 комбинаций 5 битового кода есть 16 информационных, некоторые служебные и запрещенные комбинации. Запрещены, например, все комбинации, в которых есть три и больше нулей (семь комбинаций). Выявление такой комбинации сигнал об ошибке. Отсутствие длинных нулевых последовательностей облегчает синхронизацию. Схема кодировки 4 В 5 В используется в 100 Base. T 4 (TP PMD). Код РАМ-5 n Кодом РАМ 5 кодируют комбинации из двух битов. Четырем возможным комбинациям (00, 01, 10, 11) отвечает определенный уровень сигнала. Пятое значение предопределяет избыточность, которую используют для выявления ошибок. Код РАМ 5 применяют в 1000 Base ТХ параллельно по четырем парам. Скорость передачи по одной из них 250 Мбит/с при тактовой частоте 125 МГц. 13
Режимы передачи и качество сервиса Режим передачи (transmission mode) определяет способ коммуникаций между двумя узлами. n Симплексный (simplex) режим позволяет передавать данные только в одном направлении, передающий узел полностью занимает канал. В n телекоммуникациях такой режим практически не используется — он не позволяет отправителю информации получать подтверждения о ее приеме, что необходимо для обеспечения нормальной связи. Полудуплексный (half duplex) режим допускает двустороннюю передачу, но в каждый момент времени только в одном направлении. Для смены направления требуется подача специального сигнала и получение подтверждения. n Полнодуплексный (full duplex) режим допускает одновременную передачу во встречных направлениях. При этом передача в одном направлении занимает только часть канала. Дуплексный режим может быть симметричным (полоса пропускания канала в обоих направлениях одинакова) и несимметричным (пропускная способность в одном направлении значительно больше, чем в противоположном). n 14
Режимы передачи и качество сервиса(продолжение) n n При асинхронной передаче приемник и передатчик не пользуются общим источником синхронизации. Передача данных может начаться в произвольный момент времени. Время прохождения между передатчиком и приемником для соседних блоков данных может быть и разным. Синхронная передача: приемник и передатчик синхронизируются от одного источника. Приемник при этом работает синхронно с передатчиком (с фазовым сдвигом, обусловленным временем распространения сигнала. Синхросигнал может либо передаваться по отдельной линии связи, либо встраиваться в основной сигнал с помощью самосинхронизирующего кодирования. В случае синхропередачи передатчик постоянно непрерывно посылает битовую последовательность если не полезных данных, то некоторого заполнителя. Изохронная (isochronous) передача отправка и доставка данных (кадров) происходит в предопределенные моменты времени (тайм слоты). Данные, поступающие с одного узла с некоторой (обычно постоянной) скоростью, будут приходить на принимающий узел с той же скоростью. Задержка между входом и выходом каждого элемента будет постоянной. Период посылки кадров может быть и переменным, но тогда он должен однозначно вычисляться из передаваемых данных. Изохронная передача необходима, например, при передаче оцифрованного звука и «живого видео» . Плезиохронная передача (plesiochronous) означает «почти синхронность» : узлы, участвующие в обмене, синхронизируются каждый от собственного источника с номинально совпадающими частотами. Реально из за отклонения частот всегда набегает расхождение, 15 которое компенсируется периодической вставкой фиктивных или отбрасыванием «лишних» данных. Термин относится к цифровой телефонии PDH.
Качество сервиса n n n Качество сервиса Qo. S (Quality of Service) сети определяется несколькими параметрами: Скорость передачи данных (bit rate), определяемая как количество бит данных, переданных за единицу времени. Задержка доставки данных (delay), определяемая как время от передачи блока информации источником до его приема получателем. Интерес представляют среднее и максимальное значения задержки. Уровень ошибок (error ratio) это либо вероятность безошибочной передачи определенной порции данных (от бита до кадра), либо среднестатистическое число ошибочных бит на общее число переданных. Например, вероятность 0, 999 соответствует 1 ошибке на 1000 бит (очень плохой канал). В локальных сетях уровень ошибок порядка 1 на 108 1012 бит. Для высших уровней (прикладной) интересны такие параметры, как время отклика (responce time) и производительность обслуживания запросов. Эти параметры определяются уже как сетью (время на транспортировку), так и серверами, обслуживающими прикладные запросы. Приложения разных классов имеют разные требования к качеству обслуживания, и современные сети на своем уровне (при передаче данных) должны уметь различать и приоритезировать передаваемый трафик. Иначе для работы некоторых приложений придется организовывать излишне мощные (и дорогие) каналы, которые в среднем окажутся недостаточно загруженными. 16
Контроль достоверности передачи При передаче данных по сложным сетям, имеющим линии связи, подверженные действиям помех, принимают такие меры для обеспечения и контроля достоверности (отсутствия ошибок). Контроль достоверности передачи требует введения некоторой избыточности в передаваемую информацию. Избыточность может вводиться как на уровне отдельных передаваемых символов или их групп, так и на уровне передаваемых кадров. В избыточные поля передатчик помещает код, вычисляемый по определенным правилам из полезной информации. Приемник сравнивает этот код с тем значением, которое он вычислил сам. Несовпадение значений свидетельствует об искажении информации, совпадение — о высокой вероятности правильной передачи. Вероятность обнаружения ошибки зависит от схемы контроля и соотношения размеров информационного и контрольного полей. Самая ненадежная схема — контроль паритета (простейшая схема). Самая неэкономичная — дублирование информации. Самое надежное обнаружение дает CRC контроль, реализация которого несколько сложнее, но накладные расходы меньше (типично 2 байта на 4 Кбайт данных). Между ними находится схема с вычислением контрольной суммы. n Дублирование информации сводится к повторению одного и того же элемента дважды. Приемник проверяет совпадение копий. Копия иногда представляется в инверсном виде. Дублирование применяют лишь для отдельных коротких элементов кадра, для которых контроль другими способами неудобен. Дублирование приводит к 100 процентным накладным расходам. Применяется, например, в байте состояния 17 кадра Token Ring.
Контроль достоверности передачи (продолжение) Контроль паритета (parity check) использует контрольный бит, дополняющий число единичных бит контролируемого элемента до четного (even parity, контроль четности) или нечетного (odd parity, контроль нечетности) значения, в зависимости от принятого соглашения. Контроль паритета позволяет обнаруживать только ошибки нечетной кратности, а искажение двух, четырех и т. д. бит контролируемой области останутся незамеченными. Контроль может быть «горизонтальным» или «вертикальным» . При горизонтальном контроле бит паритета «р» вводится в каждый передаваемый символ, этот вид контроля широко используется в последовательных интерфейсах RS 232 С и других. накладные расходы — 1 бит на каждый байт. Контрольные суммы и CRC коды применяются для контроля целого кадра (или его нескольких полей). Для них в кадре определяется специальное поле для контрольного кода, обычно 1, 2 или 4 байта. Контрольная сумма применяется для кадров длиной кратных байту (слову). Контрольная сумма (checksum) обычно вычисляется как дополнение суммы всех байт кадра до нуля (или FF — всех двоичных единиц). Суммирование выполняется по модулю, соответствующему разрядности поля контрольного кода. При этом приемник, просуммировав по тому же модулю все байты или слова кадра, включая контрольные коды, должен получить то же число (0 или FF). Контрольная сумма самый простой способ контроля кадра, вероятность обнаружения ошибок до 99, 6 %. n Избыточный циклический контроль CRC (Cyclic Redundancy Check) использует более сложный алгоритм. Выбирается порождающий полином разрядности большей, чем поле контрольного кода. Для 16 битного CRC рекомендуется Х 16+Х 12+Х 5+1 (1000000100001 b). Кадр (как длинное двоичное число) с обнуленным полем CRC делится на полином, и остаток этого деления (по модулю разрядности поля CRC) помещается в поле CRC передаваемых данных. Приемник делит принятый кадр (вместе с полем CRC) на тот же полином и сравнивает остаток от деления с некоторым эталоном (нулем или иным числом). Если они совпали, принимается решение о корректности кадра. 16 битный CRC позволяет обнаруживать ошибки (искажение группы соседних бит) с вероятностью до 99, 9984 %. 16 разрядный CRC применяется во многих сетевых протоколах. n ЕСС-контроль (Error Correction Code), позволяет не только обнаружить, но и исправлять некоторые 18 ошибки. В сетях ЕСС практически не применяется, поскольку требует большей избыточности (он применяется в устройствах хранения, где в случае ошибки «переспросить» не у кого). n
Управление потоком данных (data flow control) является средством согласования темпа передачи данных с возможностями приемника. Битовые скорости приемников и передатчиков всегда должны совпадать (иначе невозможно корректное декодирование принятых данных), но возможны ситуации, когда передатчик передает информацию в темпе, неприемлемом для приемника. При этом входной буфер приемника переполняется и часть передаваемой информации теряется. Средства управления потоком позволяют приемнику подать передатчику сигнал на приостановку или продолжение передачи. Нужен обратный канал передачи Для контроля получения информации приемником применяют квитирование (handshaking — рукопожатие — уведомление о получении кадра (пакета). На каждый принятый кадр приемник отвечает коротким кадром подтверждением. В случае принятия корректного кадра посылается положительное подтверждение АСК (ACKnowledge), в случае ошибочного — отрицательное NACK (Negative ACKnowledge). При получении NACK передатчик сразу повторно посылает кадр. При отсутствии подтверждения в течение определенного времени тайм-аута (timeout) передатчик также делает повторную передачу, но на ожидание теряется время. Такое подтверждение можно использовать и для управления потоком — посылка подтверждения является и сигналом готовности. Недостаток — темп посылки кадров ограничивается временем оборота по сети. Пакетная передача (burst transfer) передатчик посылает серию последовательных кадров, на которую должен получить общее подтверждение. Если в подтверждении есть место для списка хороших и плохих кадров, то посылать повторно можно только плохие. При этом появляется необходимость в идентификации кадров и подтверждений. Метод «скользящего окна» , является гибридом индивидуальных подтверждений и пакетной передачи. Здесь передатчик посылает серию нумерованных кадров, зная, что приход подтверждения может задерживаться относительно своего кадра на время оборота по сети. Это время предварительно определено, и ширина «окна» определяется числом кадров, которые можно послать на выбранной скорости передачи за время оборота. Подтверждения нумеруются в соответствии с кадрами, эта нумерация может быть циклической с модулем, определяемым шириной окна. Если передатчик не получает подтверждения на кадр, выходящий из окна наблюдения, он считает его потерянным и повторяет его передачу. В случае получения NACK опять таки повторная передача делается только для этого кадра. На случай повтора 19 передатчик должен держать в своем буфере все кадры окна, замещая выходящие (подтвержденные) новыми. Метод использует пропускную способность канала независимо от дальности передачи.
КОНТРОЛЬ ПЕРЕДАЧИ ИНФОРМАЦИИ И СЖАТИЕ ДАННЫХ n Самовосстанавливающиеся коды n n n Одним из средств борьбы с помехами являются самовосстанавливающиеся (корректирующие) коды, позволяющие не только обнаружить, но и исправить ошибки приеме. Пусть используется n разрядный двоичный код. Ошибка приеме кодовой комбинации состоит в том, что (под влиянием помехи) либо переданный нуль был принят, как единица, либо единица была принята, как нуль. Если в кодовой комбинации ошибка присутствует только в одном разряде, то такую ошибку будем называть одиночной, если в двух разрядах – двойной и т. д. Если при передаче в качестве информационных используются все возможные кодовые комбинации, ошибки невозможно даже обнаружить: любая ошибка преобразует кодовую комбинацию в другую допустимую кодовую комбинацию. Для распознавания ошибок необходимо часть кодовых комбинаций зарезервировать для контроля ошибок. Для того, чтобы было можно обнаружить одиночную ошибку, достаточно в качестве информационных взять такие кодовые комбинации, которые различались бы между собой не менее, чем в двух знаках. Тогда одиночная ошибка в любой информационной кодовой комбинации приводила бы к появлению запрещенной кодовой комбинации. Для исправления одиночных ошибок, можно использовать код, информационные кодовые комбинации которого различаются не менее, чем в трех знаках. Тогда одиночная ошибка даст запрещенную кодовую комбинацию, отличающуюся от исходной в одном знаке, но отличающуюся от любой другой разрешенной комбинации не менее, чем в двух знаках. Соответственно, можно будет не только обнаружить ошибку, но и найти истинную передававшуюся кодовую комбинацию. Аналогичным образом можно построить коды, обнаруживающие и исправляющие ошибки любой кратности. Для этого нужно лишь уменьшать долю информационных кодовых комбинаций среди всех возможных. При таком подходе необходимо каждую принятую кодовую комбинацию сравнивать со всеми разрешенными комбинациями и, в случае совпадения, считать, что ошибки не было, а в противном случае считать истинной разрешенную комбинацию, отличающуюся от принятой в минимальном 20 количестве разрядов. Это – довольно малоэффективный метод обнаружения и исправления ошибок.
Систематические коды Другой подход к построению кодов – разделение разрядов кода на информационные и контрольные. Такие коды называются систематическими. Пусть всего в коде n разрядов, из них k – информационных и r – контрольных разрядов (n=k+r). Такой код может передавать N = 2 k различных сообщений. Из r контрольных разрядов можно организовать 2 r различных комбинаций. Для обнаружения и исправления одиночной ошибки нужно, во первых, указать наличие/отсутствие ошибки и, во вторых, указать номер разряда, в котором произошла ошибка. n Чтобы в контрольных разрядах можно было передавать информацию для исправления одиночных ошибок, их количество должно удовлетворять неравенству 2 r≥n+1 или 2 n/(n+1) ≥N. Если достигается равенство: 2 n/(n+1) = N, то количество контрольных разрядов, приходящихся на один информационный, будет наименьшим. Например, для N=4 различных сообщений (k=2) наименьшее значение n равно пяти (24/(4+1) = 3, 2 < 4, а 25/6 ≈ 5, 3 > 4). Значит, количество контрольных разрядов, необходимое для обнаружения и исправления одиночных ошибок r = n k = 5 2 = 3. n 21
Алгоритмы сжатия данных Сжатие данных такое их преобразование, что его результат занимает меньший объем памяти. При этом (по сравнению с исходным представлением) экономится память для их хранения и сокращается время передачи сжатых данных по каналам связи. Синонимы термина “сжатие” – упаковка, компрессия, архивация. Обратный процесс (получение исходных данных по сжатым) называется распаковкой, декомпрессией, восстановлением. Качество сжатия характеризуется коэффициентом сжатия, равным отношению объема сжатых данных к объему исходных данных. n В зависимости от возможной точности восстановления исходных данных, различают сжатие без потерь (данные восстанавливаются точно в исходном виде) и сжатие с потерями (восстановленные данные не идентичны исходным, но их различиями в том контексте, в котором эти данные используются, можно пренебречь). Сжатие с потерями применяется, например, для упаковки многоцветных фотографических изображений (алгоритм JPEG), звука (алгоритм MP 3), видео (группа алгоритмов MPEG). При этом используются особенности человеческого восприятия: например, глаз человека не может различить два близких оттенка цвета, закодированных 24 битами, поэтому можно без видимых искажений уменьшить разрядность представления цвета. n Для многих разновидностей данных – текстов, исполняемых файлов и т. д. – допустимо применение только алгоритмов сжатия без потерь. Сжатие без потерь, в основном, базируется на двух группах методов: словарных и статистических. n Словарные методы используют наличие повторяемых групп данных и, например, записывают первое вхождение повторяемого участка непосредственно, а все последующие вхождения заменяют на ссылку на первое вхождение. Другие словарные методы отдельно хранят словарь в явной форме и заменяют все вхождения словарных терминов на их номер в словаре. n Статистические методы используют тот факт, что частота появления в данных различных байтов (или групп байтов) неодинакова, следовательно, часто встречающиеся байты можно закодировать более короткой битовой последовательностью, а редко встречающиеся – более длинной. Часто в 22 одном алгоритме используют и словарные, и статистические методы.
Алгоритм RLE Самый простой из словарных методов – RLE (Run Length Encoding, кодирование переменной длины) умеет сжимать данные, в которых есть последовательности повторяющихся байтов. Упакованные RLE данные состоят из управляющих байтов, за которыми следуют байты данных. n Если старший бит управляющего байта равен 0, то следующие байты (в количестве, записанном в семи младших битах управляющего байта) при упаковке не изменялись. n Если старший бит равен 1, то следующий байт нужно повторить столько раз, какое число записано в остальных разрядах управляющего байта. n Например, исходная последовательность 00000000 1100 10111111 1011 будет закодирована в следующем виде (выделены управляющие байты): 10000100 00000011 1100 10111111 1011. n А, например, данные, состоящие из сорока нулевых байтов, будут закодированы всего двумя байтами: 1010 1000 0000. n 23
Алгоритм Лемпела-Зива Наиболее широко используются словарные алгоритмы из семейства LZ, чья идея была описана Лемпелом и Зивом в 1977 году. Существует множество модификаций этого алгоритма, отличающихся способами хранения словаря, добавления слова в словарь и поиска слова в словаре. n Словом в этом алгоритме называется последовательность символов (не обязательно совпадающая со словом естественного языка). Слова хранятся в словаре, а их вхождения в исходные данные заменяются адресами (номерами) слов в словаре. Некоторые разновидности алгоритма хранят отдельно словарь и отдельно упакованные данные в виде последовательности номеров слов. Другие считают словарем весь уже накопленный результат сжатия. Например, сжатый файл может состоять из записей вида [a, l, t], где a – адрес (номер позиции), с которой начинается такая же строка длины l, что и текущая строка. Если a>0, то запись считается ссылкой на словарь и поле t (текст) в ней – пустое. Если a = 0, то в поле t записаны l символов, которые до сих пор в такой последовательности не встречались. n Алгоритм сжатия заключается в постоянном поиске в уже упакованной части данных максимальной последовательности символов, совпадающей с последовательностью, начинающейся с текущей позиции. Если такая последовательность (длины > 3) найдена, в результат записывается ее адрес и длина. Иначе в результат записывается 0, длина последовательности и сама 24 (несжатая) последовательность. n
Кодирование Шеннона-Фано Методы эффективного кодирования сообщений для передачи по дискретному каналу без помех, предложенные Шенноном и Фано, заложили основу статистических методов сжатия данных. n Код Шеннона Фано строится следующим образом: символы алфавита выписывают в таблицу в порядке убывания вероятностей. Затем их разделяют на две группы так, чтобы суммы вероятностей в каждой из групп были максимально близки (по возможности, равны). В кодах символов верхней группы первый бит устанавливается равным 0, в нижней группе – 1. Затем каждую из групп разбивают на две подгруппы с одинаковыми суммами вероятностей, и процесс назначения битов кода продолжается по аналогии с первым шагом. Кодирование завершается, когда в каждой группе останется по одному символу. n Качество кодирования по Шеннону Фано сильно зависит от выбора разбиений на подгруппы: чем больше разность сумм вероятностей подгрупп, тем более избыточным оказывается код. Для дальнейшего уменьшения избыточности, используют кодирование крупными блоками – в качестве “символов” используются комбинации исходных символов сообщения, но и этот подход имеет те же ограничения. n От указанного недостатка свободна методика кодирования Хаффмана. 25 n
Алгоритм Хаффмана гарантирует однозначное построение кода с наименьшим для данного распределения вероятностей средним числом символов кода на символ сообщения. На первом шаге подсчитываются частоты всех символов в исходных данных. На втором шаге строятся новые коды (битовые последовательности) для каждого символа, так, чтобы никакие две разные последовательности не имели общего начала, например, три последовательности 0, 110. удовлетворяют этому требованию. Хаффман предложил строить двоичное дерево символов, в корне которого находится наиболее частый символ, на расстоянии 1 от корня – следующие по частоте символы, и так далее. На основе такого дерева коды для символов получаются путем выполнения простой процедуры обхода дерева. Код представляет собой путь от корня до символа, в котором 1 означает переход по левой ветви, а 0 – по правой. Такой способ построения гарантирует нужное свойство кодов. Наконец, на последнем шаге в выходные данные записывается построенное дерево, а за ним следуют закодированные данные. n Алгоритм Хаффмана обеспечивает высокую скорость упаковки и распаковки, но степень сжатия, достигаемая при его использовании, довольно невелика. Одним из недостатков этого алгоритма является необходимость двух проходов по данным – на первом проходе подсчитываются частоты, строится дерево и формируются коды, а на втором выполняется собственно кодирование. Этого недостатка лишен 26 адаптивный алгоритма Хаффмана, пересчитывающий частоты символов (и, соответственно, изменяющий коды) по мере поступления данных. n