6. Защита результатов, отчет по лабораторной работе
Результаты работы программы DECODER должны быть продемонстрированы преподавателю. Отчет должен содержать краткое изложение постановки задачи, требуемые параметры выходного кода, граф-схему алгоритма работы основного декодирующего модуля с комментариями, объем и результаты тестового декодирования (например, в табличной форме) с подробными комментариями.
7. Быстрый кодер / декодер для циклических кодов
Применение быстрого алгоритма в лабораторной работе не является обязательным для всех. Он может быть использован по желанию студентов или по прямому указанию преподавателя.
Выше говорилось, что при циклическом кодировании основной операцией алгоритмов кодирования входной последовательности А(х) и декодирования выходной является операция деления выражения А(х) х(n-k) на порождающий многочлен с целью нахождения остатка, который суммируется с А(х) х(n-k) по mod2.
Трудность программной реализации кодирующих и декодирующих модулей для циклических кодов состоит в том, что алгоритмы, обычно, предусматривают процедуру многократно повторяемого «битового деления». Время кодирования /декодирования часто оказывается неприемлемым. Далее излагается математическая суть алгоритма деления двоичных последовательностей, позволяющего выполнять деление по частям. «Крупностью» частей в известных пределах можно варьировать, добиваясь оптимизации процедуры в конкретных условиях.
7.1 Алгоритм деления по частямРазобьем k‑битовую последовательность А, выраженную многочленом А(х), на ℓ‑битовые отрезки (блоки). Так как в общем случае k не обязано быть кратным ℓ, входная последовательность будет поделена на s блоков, из которых последний имеет длину m0<ℓ. Выполняется условие: k=ℓ (s‑1)+m0.
Шаг 1Выделим в последовательности А левые ℓ бит. Пусть в символике многочленов они выражаются многочленом А1(х), а оставшуюся (справа) часть обозначим А`1(х).
Тогда входную последовательность А(х) можно представить в форме:
А(х)=А1(х) х(k-ℓ) +А`1(х). (1)
(Здесь и далее суммирование двоичных многочленов и векторов ведется по mod2).
Делимое А(х) х(n-k) в алгоритме кодирования запишем как
А(х) х(n-k) =(А1(х) х(k-ℓ) +А`1(х)) х(n-k) (2)
Векторная иллюстрация к шагу 1.
При ℓ=4, k=11 (одиннадцать) пусть А=1101 1000 110. Здесь m0 =3, А1=1101.
А1(х) х(k-ℓ) в векторной форме выглядит как 1101 0000000, так как умножение на х(k-ℓ) эквивалентно приписыванию справа (k-ℓ) нулей. А`1=1000 110. Сумма А1(х) х(k-ℓ) +А`1 =А(х) выглядит как
1101 0000000
1000110 Å
1101 1000110
В выражении (2) первый член суммы в круглых скобках умножим и разделим на порождающий многочлен и произведем умножение обоих членов на х(n-k). Получим:
(3)
Дробь представим как меньшую целую часть (частное) Q1(х), которое в конечном итоге нас не интересует, плюс остаток от деления R1(х). С учетом этого перепишем (3).
Получим:
А(х) х(n-k) =Q1(х) G(x) х(k-ℓ) +R1(x) х(k-ℓ)+А`1(х) х(n-k) (4)
Старшая степень многочлена не превосходит (ℓ-1), т. к. такую степень по соглашению имеет А1(х), а G(x) имеет фиксированную степень (n-k) по определению (вывернутые полускобки символизируют ближайшее меньшее целое от дроби, т.е. частное). Тогда получается, что первое слагаемое в (4) имеет старшую возможную степень (n‑1), что соответствует вектору длины n.
Старшая степень остатка R1(x) не превосходит величины (n-k‑1), а всего второго слагаемого в (4) – величины (n-ℓ-1). Такую же степень имеет и третье слагаемое А`1(х) х(n-k). Сложим эти два последних члена, сумму обозначим F1(х). Перепишем (4) в следующем виде:
А(х) х(n-k) =Q1(х) G(x) х(k-ℓ) +F1(х) (5)
Рис. 1 иллюстрирует формирование последовательности F1 в векторной интерпретации всех участвующих величин. Обратим внимание на длину последовательности F1, на то обстоятельство, что при суммировании векторы R1 и A`1 «выровнены» со стороны старших разрядов, а F1 имеет справа (n-k) нулевых бит.
Рис. 1. Формирование последовательности F1 при векторном представлении величин
На этом первый шаг алгоритма деления по частям закончен. Получен F1(х), куда вошел первый промежуточный остаток R1(x), контролирующий деление первого блока из ℓ левых бит входной последовательности А(х).
Шаг 2
Очередной шаг алгоритма заключается в том, что в F1(х) выделяем ℓ левых бит. Этот отрезок должен быть обозначен А2(х). Оставшаяся правая часть F1(х) – это А`2(х). В соответствии с (3), (4) находим выражение остатка R2(x) и последовательности F2(х).
Рис. 2. Формирование последовательности F2 при векторном представлении величин
На рис. 2 проиллюстрировано получение F2. Предпринята попытка масштабно отобразить изменение участвующих в деле векторов. Здесь показано, что после второго шага F2 все еще имеет справа (n-k) нулей. Это эквивалентно допущению, что деление входного вектора А на отрезки длины ℓ двумя шагами не исчерпывается.
Делимое (в его стартовом понимании) после второго шага имеет вид:
(6)
В общем случае, пока (k-iℓ)≥(n-k) вектор Fi должен будет иметь справа (n-k) нулей. Это, как известно, место контрольных бит в словах циклического кодового слова. Они пока не сформированы.
Шаг s‑1
В процессе выполнения (s‑1) – го шага мы оперируем векторами длины (n-k+m0) (см. рис. 3). К этому времени все отрезки длины ℓ в составе входного вектора будут исчерпаны и (если в общем случае k не делится нацело на ℓ) у нас остаётся от входной последовательности вычисленный остаток Rs-1 и «правый» отрезок A`s-1 длины m0<ℓ.
В соответствии с выражениями (4) и (5) получим «выходной продукт» данного шага – многочлен Fs-1(х) = Rs-1(x) x(k-(s-1)ℓ) + A`s-1 (х) х(n-k) =Rs-1(x) x(m0) + A`s-1 (х) х(n-k), т. к. k=(s‑1)ℓ+m0 по определению этих величин.
Рис. 3. Формирование последовательности Fs-1 при векторном представлении величин
Обозначим последние формирующиеся (n-k) бит Y(х). Как мы видели до (s‑1) – го шага Y(х)=0. Следовательно, Y(х) можно ввести в (6) как нулевое слагаемое, если пределы суммирования ограничить величиной (s-u‑1). После шага s можно записать
(7)
Здесь т.е. является проверочными битами кодового слова.
... , если его длина n=qm-1 над GF(q). Если длина кода меньше длины примитивного кода, то код называется укороченным или непримитивным. Общее свойство кодовых слов циклического кода - это их делимость без остатка на некоторый многочлен g(x), называемый порождающим. Результатом деления двучлена xn+1 на многочлен g(x) является проверочный многочлен h(x). При декодировании циклических кодов используются ...
... также невысока и обычно составляет около 100 кбайт/с. НКМЛ могут использовать локальные интерфейсы SCSI. Лекция 3. Программное обеспечение ПЭВМ 3.1 Общая характеристика и состав программного обеспечения 3.1.1 Состав и назначение программного обеспечения Процесс взаимодействия человека с компьютером организуется устройством управления в соответствии с той программой, которую пользователь ...
... информация должна поступать в декодер при восстановлении звукового сигнала. Декодер преобразует серию сжатых мгновенных спектров сигнала в обычную цифровую волновую форму. Audio MPEG - группа методов сжатия звука, стандартизованная MPEG (Moving Pictures Experts Group - экспертной группой по обработке движущихся изображений). Методы Audio MPEG существуют в виде нескольких типов - MPEG-1, MPEG-2 и ...
... приложении 1. Кодер позволяет получить контрольные символы по информационным. Схема составлена в полном соответствии с выражениями (9) и матрицей (10). Декодер соответствует матрице (11). В приложении 2 приведена схема всей системы передачи данных. Исходный код (11 байт) подаётся на регистр REG1. Это можно сделать, например, трёхкратной передачей по 32 разряда (4 байта). Регистр может быть также ...
0 комментариев