
- •Корректирующие коды
- •Введение
- •Принципы обнаружения и исправления искаженных символов в комбинациях.
- •Основные характеристики блоковых корректирующих кодов
- •Корректирующие коды, обнаруживающие ошибки код с проверкой на четность
- •Код с повторением без инверсии
- •Код с повторением и инверсией
- •Корреляционный код - код с удвоением элементов
- •Код с постоянным весом
- •Линейные (n,k)-коды
- •Линейный систематический код
- •Линейный не систематичекий код
- •Описание стендов
- •Стенд №1
- •Описание передней панели стенда
- •Стенд №2
- •6. Исправление одиночной ошибки
- •Порядок выполения работы, с использованием стенда №1
- •Построение корректирующих кодов.
- •Код с проверкой на четность
- •Нахождение хэмминговых и кодовых расстояний.
- •Обнаружение и исправление ошибок Нахождение синдромов.
- •Нахождение синдрома ошибки
- •1.Операция деления
- •2.Операция умножения
- •3.Формирование корректирующего кода
- •4. Обнаружение ошибки
- •5. Исправление ошибок
- •Библиографический список
- •Корректирующие коды
- •119454, Москва, пр. Вернадского, 78
Стенд №2
Стенд позволяет изучать корректирующий код на основе многочленов. Структурная схема стенда приведена на рис. 10. Передняя панель стенда приведена на рис. 11Основой устройства обеспечивающего изучение кодов на основе многочленов и входящего в стенд №2 является однокристальный 8-разрядный микроконтроллер компании Microchip PIC 16 F 877. Так как количество портов у микроконтроллера меньше, чем требуется для ввода и вывода данных, то для их увеличения используется устройство ввода и устройство вывода. Микроконтроллер задает устройству ввода адрес требуемого набора кнопок: 1- ввод данных, 2 - установки многочленов, делителей, множителей,
Рис. 10. Структурная схема лабораторного стенда №2 |

Рис. 11. Передняя панель стенда №2 |

3 – управление «Пуск», «Стоп», 4 – установка операций, 5 – выбор режимов. Приняв адрес, устройство ввода считывает состояние соответствующего набора кнопок и передает его микроконтроллеру.
Таким образом, микроконтроллер поочередно считывает состояния всех наборов кнопок.
Далее микроконтроллер переходит к обработке считанных данных.
Определение выбранной операции.
Определение режима.
Обработка считанных данных по алгоритму согласно с выбранной операцией и режимом.
Формирование и вывод на индикацию данных.
Вывод данных на индикацию происходит следующим образом.
Микроконтроллер передает данные и адрес блока индикации устройству вывода. Устройство вывода записывает принятые данные в выходные защелки с заданным адресом. К устройству вывода подключены светодиоды, которые отображают состояние портов.
Таким образом, микроконтроллер производит вывод данных во все блоки индикации.
ОПИСАНИЕ ПЕРЕДНЕЙ ПАНЕЛИ СТЕНДА № 2.
Передняя панель стенда показана на рис. 11.
Состав передней панели.
1. Основное поле (таблица).
1.1. Максимальное число тактов – 13 (строк)
1.2. Число граф – 10
1.2.1 графа 1 – номер по порядку, номер такта, номер строки.
1.2.2 графа 2 – «ввод многочленов, ручное тактирование» - кнопки и индикаторы тактирования, кнопки ввода кодовых комбинаций.
1.2.3 графы 3,4,5 – «индикация ввода и формирование многочленов» - индикация многочленов первичных корректирующих кодов, делимого, множимого (3), векторов ошибки, промежуточных результатов (4), сформированных комбинаций искаженного кода, комбинации корректирующего кода, результат исправления ошибки (промежуточные, окончательный)(5).
1.2.4 поле 6,7,8,9 на 14ти строках – «состояние ячеек регистра при операциях умножения, деления» - индикация промежуточных результатов операций деления и умножения в ячейках регистра х0, х1, х2, х3
1.2.5. графа 10 – «результаты умножения, деления» - индикация частного или произведения
2. Поле управления и индикации.
2.1. Переключатель установки операции.
2.2. Переключатель режима тактирования и ввода комбинации в графы 3 и 4.
2.3. Кнопка Пуск – кнопка включения и индикатор начала процессов, выполняемых контроллером.
2.4. Кнопка Сброс и индикатор окончания процессов, выполняемых контроллером.
2.5. Поле установки порождающих многочленов, делителей, множителей – совокупность кнопок и индикаторов.
2.6. Поле индикации процессов
2.6.1 Установки в графу 3,4 комбинации первичного кода, множимого, делимого, комбинации корректирующего кода.
2.6.2. Установки порождающего многочлена, делителя.
2.6.3. Установки множителя.
2.6.4. Операции деления.
2.6.5. Операции умножения.
2.6.6. Операции сложения кодов.
2.6.7. Установки вектора ошибки.
2.6.8. Формирования искаженного кода.
2.6.9. Сдвига влево.
2.6.10. Сдвига вправо.
3. Поле индикации результатов.
3.1. Индикация остатка, индикация синдрома ошибки, осуществляется линейкой из четырех индикаторов.
3.2. Индикация числа сдвигов искаженной кодовой комбинации при исправлении ошибки -осуществляется цифровым индикатором числа сдвигов.
3.3. Индикация результатов при делении, умножении осуществляется индикаторами в графе 10 основного поля. Индикация сдвинутых искаженных комбинаций и их сложения с остатком осуществляется индикаторами в графе 5 основного поля.
В стенде предусмотрен тумблер с индикацией Включ./Выключ.
Состояние индикаторов - активное (включено, введена 1, выполняется такт, возбуждена ячейка регистра, выполняется заданный процесс и т.п.) – горит красный цвет. Пассивное (отключено, значение символа 0, ячейка регистра не возбуждена и т.п. – индикатор не горит).
1. Стенд обеспечивает выполнение операции деления много-члена на многочлен. Делимое – любой многочлен степени не ниже 7, не выше 11. В качестве делителя выступают порождающие многочлены:
2. Стенд обеспечивает умножение многочлена на многочлен. Множимое – многочлен степени не выше 7, множитель – порождающие многочлены:
и одночлен: xr, где r = 1÷4.
При выполнении операций деления и умножения стенд должен обеспечить выполнение двух режимов: ручного и автоматического тактирования.
3. Стенд обеспечивает формирование в соответствии с правилами, указанными выше, следующих корректирующих кодов на основе многочленов:
1) (7,6)-код, порождающий многочлен g1(x) = x+1
2) (7,4)-код, порождающий многочлен g 2(x) = x3 + x + 1
3) (7,4)-код, порождающий многочлен g 3(x) = x3 + x2 + 1
4) (7,3)-код, порождающий многочлен g 4(x) = x4 +x3 + x2 + 1
5) (7,3)-код, порождающий многочлен g 5(x) = x4 + x2 + x + 1.
4. Стенд обеспечивает нахождение синдрома ошибки для любых, указанных в пункте 3 кодов. Вектор ошибки весом от 1 до n (w=1÷n). Правила нахождения синдрома ошибки указаны выше.
5. Стенд должен обеспечивать исправление одиночной ошибки по одному из принятых в практике алгоритмов (описание алгоритма дано ниже).
6. На панель стенда выведено основное поле для иллюстрации выполняемых операций, переключатели установки операции и установки режима тактирования, поле установки многочлена, поле индикации операций, синдрома сдвига.
ОПЕРАЦИИ, ВЫПОЛНЯЕМЫЕ НА СТЕНДЕ № 2
СЛОЖЕНИЕ МНОГОЧЛЕНОВ
Сложение многочленов производится по правилам сложения по модулю 2. Например, сложить комбинацию корректирующего кода Vi = 1001011, многочлен F1(x)=x6+x3+x+1 и вектор ошибки ei=00110001 многочлен F2(x)=x4+x3, Vi*=Viei
F3(x)= F1(x)+ F2(x)
Сложение по модулю 2 x3+x3 дает 0.
ДЕЛЕНИЕ МНОГОЧЛЕНОВ
В качестве делимого берутся многочлены степени не выше 11 и не ниже 7. В качестве делителя используются порождающие многочлены g1(x), g2(x), g3(x), g4(x), и g5(x). Алгоритмы деления описаны выше.
Процесс деления многочлена на многочлен на стенде осуществляется в следующем порядке.
Переключатель Установки операций устанавливается в положение 1 («Деление»).
Переключатель Тактирования и ввода устанавливается в положение 1 («Ввод в графу 3»). С помощью кнопок графы 2 вводится делимое в графу 3. Введенное делимое отображается индикаторами. После этого переключатель Тактирования и ввода устанавливается в положение 3 («Ручное тактирование») или в положение 4 («Автоматическое тактирование»). С помощью кнопок поля «Установки порождающих многочленов» устанавливается делитель. Его установку указывает индикатор 2 поля «Индикации процесса». Предварительный этап завершен. Процесс деления начинается после нажатия кнопки Пуск, что отображается индикатором 4 операции деления. При ручном тактировании поочередно нажимаются кнопки тактов от 1 до n. При автоматическом тактировании деление происходит автоматически. Результат деления – частное в графе 10 основного поля, остаток – ячейки индикации остатков. Производятся все необходимые записи, нажимается кнопка Стоп. Производится обнуление всех ячеек и индикаторов. Далее осуществляется процесс деления при других исходных данных.
УМНОЖЕНИЕ МНОГОЧЛЕНОВ
В качестве множимого берутся многочлены степени не выше 7. В качестве множителя – многочлены и одночлены степени не выше 4. Алгоритмы умножения приведены выше.
Процесс умножения многочлена на многочлен осуществляется в следующем порядке.
Переключатель Установки операции устанавливается в положение 2 («Умножение»). Переключатель Тактирования и ввода устанавливается в положение 1 («Ввод в графу 3»). С помощью кнопок графы 2 вводится множимое в графу 3. Введенное множимое отображается индикаторами. После этого переключатель Ввода и тактирования устанавливается в положение 3 («Ручное тактирование») или в положение 4 («Автоматическое тактирование»). С помощью кнопок поля «Установки порождающих многочленов» устанавливается множитель. Его установку указывает индикатор 2 поля «Индикации процессов». Предварительный этап завершен. Процесс умножения начинается после нажатия кнопки Пуск, что отображается индикатором 5 операции умножения. При ручном тактировании поочередно нажимаются кнопки тактов от 1 до n. При автоматическом тактировании умножение происходит автоматически. Результат умножения – произведение в графе 10 основного поля, остаток – в ячейках индикации остатка. Производятся все необходимые записи, нажимается кнопка Стоп. Производится обнуление всех ячеек и индикаторов. Далее осуществляется процесс умножения при других исходных данных.
ФОРМИРОВАНИЕ КОРРЕКТИРУЮЩЕГО КОДА
Для того чтобы сформировать комбинации корректирующего кода, необходимо многочлен Q(X), отображающий комбинацию первичного кода, умножить на xr, где r-степень порождающего многочлена. Затем, полученный в результате этой операции многочлен A(X) = Q(X)·xr разделить на порождающий многочлен g(x). В результате деления имеем частное F(X)и остаток R(X). Сложив многочлен A(X) и R(X), получаем исходную комбинацию корректирующего кода.
В качестве примера возьмем комбинации первичного кода 1001 и порождающий многочлен g3(x) = x3 + x2 + 1. Умножив многочлен первого кода – X3+1 на x3 , получим A(X) = Q(X) ·x3 = (x3+1)·x3=x6+x3 Разделив A(X) на g3(x) получим остаток R(X)=x+1. Искомая комбинация корректирующего кода равна A(X) + R(X) = x6 + x3 + x + 1. Искомая двоичная комбинация 1001011.
Процесс формирования комбинаций корректирующего кода осуществляется в следующем порядке.
Переключатель Установки операции устанавливается в положение «Формирование». Переключатель Тактирования и ввода уславливается в положение 1 («Ввод в графу 3») с помощью кнопок графы 2, в графу 3 вводится первичный код.
После этого переключатель Тактирования и ввода устанавливается в положение 4 («Автоматическое тактирование»). С помощью кнопок поля «Установки порождающих многочленов» устанавливается соответствующий порождающий многочлен степени xr и множитель xr. Их установку указывает поля «Установки порождающих многочленов» и поля «Индикация процессов» 2 и 3. Предварительный этап завершен. Процесс формирования начинается после нажатия кнопки Пуск. Выполняется процесс умножения первичного кода на одночлен xr , что фиксируется индикатором умножения 5 поля «Индикации процессов». Результат умножения устанавливается в графе 4 Основного поля. Далее вновь нажимается кнопка Пуск. Идет процесс деления полученного в результате умножения многочлена (комбинации) на выбранный порождающий многочлен. Горит индикатор деления 4 поля «Индикации процессов». Результат деления записывается – частное в графе 10 основного поля, остаток фиксируется в ячейке Индикации остатка. Далее опять нажимается кнопка Пуск. Идет процесс сложения делимого (многочлена в графе 4 с полученным остатком), (процесс сложения отображается индикатором 6 поля «Индикации процессов»), результат сложения фиксируется в графе 5 Основного поля – это есть сформированная комбинация корректирующего кода.
Окончательные и промежуточные результаты, полученные в процессе формирования комбинации корректирующего кода записываются в протокол. Нажимается кнопка Сброс. Происходит обнуление всех ячеек и индикаторов. Далее последовательно осуществляется формирование других комбинаций корректирующего кода.
ОБНАРУЖЕНИЕ ОШИБОК
При обнаружении
ошибки используется операция сложения
многочленов по модулю 2. Складываются
многочлены соответствующие исходной
кодовой комбинации корректирующего
кода
и векторы ошибок
.
- искаженная
кодовая комбинация корректирующего
кода.
Далее полученный
в результате сложения многочлен
делится на порождающий многочленg(x).
Остаток от деления R(X)
указывает на наличие ошибки. Если R(X)
равно 0 (соответствует нулевой комбинации
длины r),
то ошибки нет или ошибка есть, но не
обнаруживается. Если R(X)
представляет собой любой многочлен
степень которого не выше (r-1),
то ошибка есть и она обнаруживается.
Пример. Возьмем
комбинацию корректирующего кода
Vi=1001011
и вектор ошибки ei=0011000.
Vi
(X)
=x6+x3+x+1,
ei(X)=x4+x3,
=
=
,
Разделим
на порождающий многочленg3(x)
= x3
+ x2
+ 1
Получаем остаток R(X)=x, что соответствует комбинации 010. Вывод: ошибка есть и она обнаруживается. Процесс обнаружения ошибки осуществляется в следующем порядке.
Переключатель Установки операции устанавливается в обнаружение ошибки для других исходных положение «Обнаружение ошибки». Переключатель Тактирования и ввода устанавливается в положение 1 («Ввод комбинаций корректирующего кода» в графу 3). С помощью кнопок графы 2 вводится комбинация корректирующего кода в графу 3. Затем, переключатель Тактирования и ввода устанавливается в положение 2 («Ввод в графу 4»). С помощью кнопок графы 2 в графу 4 вводится вектор ошибок. Индикация введенных кодовых комбинаций осуществляется соответствующими индикаторами граф 3 и 4. Далее переключатель Тактирования и ввода устанавливается в положение 4 «Автоматического тактирования» Кнопкой поля «Установки порождающих многочленов» устанавливается порождающий многочлен, его установка фиксируется индикатором 2 процесса индикации установки порождающего многочлена. Предварительный этап завершен. Нажимается кнопка Пуск, осуществляется сложение по mod 2 установленной комбинации корректирующего кода (графа 3) и вектора ошибки (графа 4). Выполнение процесса фиксируется индикатором 6 поля «Индикации процессов». Результат сложения записывается в графе 5 основного поля. Затем снова нажимается кнопка Пуск и осуществляется деление искаженной кодовой комбинации на порождающий многочлен. Процесс фиксируется индикатором 4 поля «Индикации процессов». Результат деления отражается: частное – графа 10 Основного поля и остаток – в ячейках индикаторов «Индикация остатка и синдром ошибки».
Синдром ошибки указывает на наличие или отсутствие ошибки. Если синдром ошибки S=S2 … S2S1 = 000 … 0 – то ошибки нет или она имеется, но не обнаруживается. Если синдром ошибки S=Sr … S2S1 = 00 … 01 (11….11) - то ошибка есть и она обнаруживается
Промежуточные и окончательные результаты, полученные в процессе обнаружения, записывают в протокол. Нажимается кнопка Сброс. Происходит обнуление всех ячеек и индикаторов. Далее осуществляется обнаружение ошибки для других исходных данных.