Национальный исследовательский ядерный университет «МИФИ»
Опубликован: 26.04.2005 | Доступ: свободный | Студентов: 40196 / 9098 | Оценка: 4.33 / 4.06 | Длительность: 19:58:00
ISBN: 978-5-9556-0032-1
Лекция 10:

Алгоритмы сети Ethernet/Fast Ethernet

< Лекция 9 || Лекция 10: 1234 || Лекция 11 >

Циклические коды (CRC)

Циклические коды – это семейство помехоустойчивых кодов, включающее в себя в качестве одной из разновидностей коды Хэмминга. В целом оно обеспечивает большую гибкость с точки зрения возможности реализации кодов с необходимой способностью обнаружения и исправления ошибок, определяемой параметром d0, по сравнению с кодами Хэмминга (для которых d0=3 или d0=4 ). Широкое использование циклических кодов на практике обусловлено также простотой реализации соответствующих кодеров и декодеров.

Основные свойства и само название циклических кодов связаны с тем, что все разрешенные комбинации бит в передаваемом сообщении (кодовые слова) могут быть получены путем операции циклического сдвига некоторого исходного кодового слова:

(a0a1…an-2an-1);

(an-1a0a1…an-2);

……………………….

Циклические коды задаются с помощью так называемых порождающих полиномов (многочленов) g(x) или их корней. Порождающий полином имеет вид

G(x)=gr xr + gr-1 xr-1 + … + g0

где gi={0,1}, x=2. Кроме того, вводятся полином исходного cообщения

u(x) = uk-1 xk-1 + uk-2 xk-2 + … +u0

и кодированного сообщения

A(x) = an-1 xn-1 + an-2 xn-2 + … + a0

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

Последовательность кодирования на примере циклического кода (7,4,3), имеющего g(x) = x3 + x + 1, следующая:

1) информационная часть сообщения записывается в виде полинома:

u(x) = uk-1 xk-1 + uk-2 xk-2 + … +u0

В рассматриваемом примере k=4 и для сообщения 0111 получается

u(x) = x2 + x + 1

2) u(x) умножается xr, что соответствует циклическому сдвигу исходного сообщения на r разрядов влево:

u(x) x3 = (x2 + x + 1) x3 = x5 + x4 + x3

3) полученный многочлен делится на g(x):

u(x)•x^{r}/g(x) = c(x) \oplus  R(x)/g(x)

где c(x) – полином-частное с максимальной степенью (k—1) ;

R(x) – полином-остаток с максимальной степенью (r-1) ;

\oplus – обозначение поразрядной операции суммирования по модулю 2 (исключающее ИЛИ). Кодированное сообщение представляется в виде

A(x)=u(x)x^{r} \oplus  R(x)

Таким образом, в этом случае


A(x) = (x^{5} + x^{4} + x^{3}) \oplus  x = x^{5} + x^{4} + x^{3} + x

Передаваемое кодированное сообщение в обычной двоичной форме имеет вид

0111       010
\\
  \leftrightarrow          \leftrightarrow 
\\
k \ – \ бит  \  r \ – \ бит

Один из возможных вариантов аппаратурной реализации кодера для рассматриваемого примера изображен на рис. 10.4 вместе с последовательностью сигналов, подтверждающей получение тех же проверочных разрядов ( 010 ) на восьмом такте ( r + k + 1=8 ). Кодер представляет собой сдвиговый регистр с обратными связями, организуемыми с помощью элементов М2 (исключающее ИЛИ, сумматор по модулю 2). Структура обратных связей полностью определяется ненулевыми коэффициентами порождающего полинома g(x). На первых восьми тактах ключ Кл. находится в верхнем положении, формируются проверочные разряды. Затем ключ Кл устанавливается в нижнее положение, что соответствует разрыву цепей обратных связей и передаче непосредственно в канал связи или на

Пример формирования циклического кода (сигнал обратной связи отличен от нуля на 5-м и 6-м тактах)

Рис. 10.4. Пример формирования циклического кода (сигнал обратной связи отличен от нуля на 5-м и 6-м тактах)

модулятор проверочных разрядов. Для временного хранения информационной части сообщения с целью последующей ее передачи вместе с проверочными разрядами кодер, очевидно, должен быть дополнен сдвиговым регистром длиной в k разрядов, ключами и соответствующими цепями управления. Однако в целом аппаратурные затраты при реализации кодеров в случае циклических кодов невелики – общее число триггеров и элементов М2 (исключая регистр временного хранения информационной части сообщения) не превышает 2r и не зависит от длины информационной части сообщения.

Двухвходовый элемент М2, на один из входов которого подается в последовательной форме сообщение, на выходе формирует бит четности или нечетности (в зависимости от значения сигнала на втором входе элемента М2-0 или 1) для этого сообщения. В схеме кодера (рис. 10.4) элементы М2 включены между отдельными триггерами сдвигового регистра,причем сигналы обратной связи, поступающие на "свободные" входы элементов М2 (не связанные с передачей собственно сообщения через сдвиговый регистр), зависят как от предшествующих разрядов сообщения, так и от структуры обратных связей, принятой в кодере. В результате циклический код, формируемый таким кодером, можно считать совокупностью обобщенных бит четности и нечетности, тип которых (четность или нечетность) не определен заранее и может динамически меняться от такта к такту.

Порождающие полиномы, представляющие собой так называемые неприводимые многочлены (делятся лишь на единицу и на самих себя), табулированы для разных значений n, k и d0. Практически в компьютерных сетях используются циклические коды длиною в 2 или 4 байта (16 или 32 бита), а параметры n, k и d0 в явном виде не указываются. Это связано с возможностью выбора различной длины поля данных в пакете на этапе установления и выбора параметров соединения при неизменной длине поля циклического кода. Теоретическая вероятность ошибки при приеме в случае использования циклического кода не хуже p_{ош} \approx  1/2^{r}, так что для выполнения условия стандарта p_{ош} \approx  10^{-6} необходимое число проверочных разрядов r \geqslant  log_{2}10^{6} \approx  20. Кроме случайно распределенных, циклический код позволяет обнаруживать подряд следующие ошибки (так называемые пакеты ошибок) длиною l = r или меньше. Это особенно важно в связи с возможностью возникновения продолжительных во времени помех, действующих на протяженные линии передачи в компьютерных сетях.

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

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

Следует сделать два замечания относительно сложившейся терминологии. Понятие "циклические коды" достаточно широкое, тем не менее на практике его обычно используют для обозначения только одной разновидности, описанной выше и имеющей в англоязычной литературе название CRC (Cyclic Redundancy Check – циклическая избыточная проверка). Более того, поле пакета или кадра, фактически содержащее код CRC,часто называется "контрольной суммой" (FCS – контрольная сумма кадра), что в принципе не верно, так как контрольная сумма формируется иначе. Однако именно этот термин получил широкое распространение.

Перспективными с точки зрения аппаратурной реализации представляются коды БЧХ (коды Боуза – Чаудхури – Хоквингема), так же, как и коды Хэмминга, входящие в семейство циклических кодов. Коды БЧХ не слишком большой длины (примерно до n=1023) оптимальны или близки к оптимальным кодам, то есть обеспечивают максимальное значение d0 при минимальной избыточности. Эти коды уже нашли практическое применение в цифровых системах записи звука (речи, музыки), причем в варианте, предусматривающем исправление обнаруженных ошибок. Относительно невысокие частоты дискретизации звуковых сигналов (48 или 96 кГц) не препятствуют проведению дополнительных вычислений так жестко, как в случае высокоскоростных сетей.

< Лекция 9 || Лекция 10: 1234 || Лекция 11 >
Алексей Подсадников
Алексей Подсадников

Могу ли я получить сертификат о повышении квалификации если записывался на курс, не как на повышение квалификации.

Курс пройден.

И сколько действуют результаты курса?

Валерий Умаев
Валерий Умаев