
- •Белорусский государственный университет информатики
- •Теоретическая часть Линейные коды.
- •Метрики Хэмминга и Ли.
- •Описание линейных кодов при помощи матриц.
- •Эквивалентность линейных кодов.
- •Декодирование линейных кодов.
- •Синдромное декодирование.
- •Коды Хэмминга.
- •Коды Рида-Маллера.
- •Коды, получаемые с помощью матриц Адамара.
- •Треугольный код
- •Практическая часть
- •Заключение
- •Приложение Листинг программы
Практическая часть
В результате выполнения контрольной работы мы должны получить процедуру, выполняющую линейное кодирование по методу треугольника. Интерфейс программы значения не имеет, поэтому мы реализуем нашу программу в виде консольного приложения, в которое пользователь должен ввести кодируемую последовательность и получить на экране консоли кодовое слово, закодированное по методу треугольника. Программу напишем на языке Си. Используем компилятор Borland C++ version 3.1.
Для простоты будем использовать кодовое слово длинной 10 бит, из которых 6 информационных и 4 проверочных, которые являются зависимыми от информационных. Кодовое слово получается из информационного сообщения по схеме, изображенной на рисунке 2.
Рисунок 2 Схема
получения кодового слова
В таблице 4х4 размещаем информационные символы выше побочной диагонали матрицы, соответствующей нашей таблице. Информационные биты изображены сплошными точками. Тогда проверочные биты будут находится на побочной диагонали, и будут изображаться полыми точками. Каждый проверочный бит является двоичной суммой информационных битов, расположенных в одной строке с данным проверочным битом, и битов, расположенных с ним в одном столбце.
Т.к. ввод информации в нашей программе будет происходить с консоли пользователем в текстовой форме, то для хранения каждого бита нашего кода будем использовать тип char, который занимает один байт. Для практического декодирования, возможно, это нецелесообразно, но для нашего случая вполне оправданно. Т.к. было бы еще более нецелесообразно создавать процедуру побитового ввода каждого символа. А если производить ввод и вывод в виде десятичных чисел, программа потеряет наглядность.
Таким образом, ввод информационного сообщения из шести символов будем производить с консоли в виде текста. Внутренним представлением этого слова в программе будет массив из 6 переменных типа char. Кодовое слово будет храниться в глобальной переменной-массиве из 10 символов. Искомая процедура сначала распределяет информационные символы из введенного пользователем сообщения по соответствующим позициям в кодовом слове. А затем по информационным позициям кодового слова, вычисляет избыточные символы. При этом вычисления происходят согласно схеме, изображенной на рисунке 2. Т.е.
3-й элемент равен сумме 0-го, 1-го и 2-го;
6-й – сумме 2-го, 4-го и 5-го;
8-й – сумме 1-го, 5-го и 7-го;
9-й – сумме 0-го, 4-го и 7-го.
Результат выводится на экран в виде строки символов.
Заключение
В результате выполнения данной контрольной работы была получена процедура составления кодового слова (10,6) – треугольного кода, по передаваемому информационному сообщению, состоящему из 6 бит.
Приложение Листинг программы
#include <stdio.h>
#include <conio.h>
char mas[10]; //Массив, в котором будет хранится кодовое слово
int treugolnik(char *s) //Искомая процедура получения кодового слова по
{ //адресу сообщения
mas[0]=s[0]-0x30; //Заносим элементы сообщения в соответствующие элементы
mas[1]=s[1]-0x30; //информационной части кода
mas[2]=s[2]-0x30; //Приводим тип char к целому типу отнимая 48
mas[4]=s[3]-0x30;
mas[5]=s[4]-0x30;
mas[7]=s[5]-0x30;
mas[3]=(mas[0]+mas[1]+mas[2])%2; //Вычисляем избыточные компоненты кода
mas[6]=(mas[2]+mas[4]+mas[5])%2;
mas[8]=(mas[1]+mas[5]+mas[7])%2;
mas[9]=(mas[0]+mas[4]+mas[7])%2;
for(int i=0; i<10; i++) mas[i]+=0x30; //Преобразуем элементы кода из целого
//типа в char
return 0;
}
main()
{
char s[6]; //Массив символов, хранящий кодируемое сообщение
puts("Введите кодируемую последовательность (6 двоичных цифер):");
scanf("%s", &s);
treugolnik(s); //Вызываем искомую процедуру кодирования
puts("Кодовое слово будет:");
printf("%s", mas); //Выводим клодвое слова на экрана
getch();
clrscr();
return 0;
}