Автор работы: Пользователь скрыл имя, 28 Ноября 2011 в 19:18, контрольная работа
Код ,в котором кодовая комбинация, полученная путем циклического сдвига
разрешенной кодовой комбинации является также разрешенной кодовой
комбинацией называется циклическим ( полиномиальным, кодом с циклическими
избыточными проверками-ЦИП).
Введение
............................................................................
............... 6
2. Постановка задачи
..........................................................................
7
3. Операции над циклическими кодами
............................................. 8
4. Принцип построения циклических кодов
....................................... 9
4.1. Получение кодовой комбинации добавлением остатка R(x) ...... 11
4.2. Получение кодовой комбинации умножением на образующий
полином
............................................................................
.............. 14
5. Разработка схемы алгоритма
........................................................... 15
6. Разработка текста программы
......................................................... 16
7. Результаты работы программы
....................................................... 21
----------------------------------------------------------------------------
------------------------
минимального кодового расстояния d0 =3. Исходя из
этого образуюший полином P(x) равен :
P(x)= x5 + x4 +x3 +x 2 +1 = 111101.
6. Определим остаток R(x) от деления G(x)(x m на образующий по-
лином P(x)
x7+ x5
10100000 111101
x7 + x6 +x5 +x 4 +x2 x2 +x +1 111101
111
x6 + x4 +x2
101010
x6 + x5 +x4 +x 3 +x
x5 + x3 +x2 +x
101110
x5 + x4 +x3 +x 2 +1
111101
10011
Остаток R(x)= x4+x+1 =10011.
7. Строим передаваемый кодовый пролином F(x) :
F(x)=xm G(x)(R(x)= x7+ x5+
x4+x+1 =
8. Пусть в принятом сообщении произошла ошибка в тридцать первом
разряде,при зтом принятое кодовое сообщение имеет вид :
F((x)=F(x)
( E(x)= 100000000000000000000001011001
9. Разделим многочлен F1(x) соотвествующий полученной кодовой ком-бинации
на образующий полином, при этом вес остатка (количество единиц в коде
остатка) должен быть меньше или равен количеству ошибок W (S
100000000000000000000001011001
111101
111010
111101
111000
111101
101000
111101
101010
111101
101110
111101
100110
111101
110110
111101
101100
111101
100010
111101
Сравниваем вес полученного остатка w с числом исправляемых ошибок
w>s .
10. Производим циклический
сдвиг принятой кодовой
разряд влево
и повторяем п.9 пока w ( s.
a) 000000000000000000000010110011
Складываем по модулю 2 последнее делимое с последним остатком:
000000000000000000000010110011
(
000000000000000000000010110011
Осуществляем обратный сдвиг на 1 разряд полученной комбинации
000000000000000000000001011001
Отбросив контрольные
разряды , получаем переданное информацинное
слово.
§ 4.2 Построение кодовой комбинации путем умножения
на образующий полином
Построить циклический код для передачи 31 разрядной кодовой
комбинации с исправлением однократной ошибки ( n=31, s=1) путем умножения
образующего многочлена на многочлен полного 31 разрядного кода.
Решение.
1. Строим информационный
полином,сответствующий
слову длиной k-бит:
G(x)=
2. Строим передаваемый кодовый полином
00000000000000000000000101
00000000000000000000000101
00000000000000000000000101
00000000000000000000000101
00000000000000000000000101
00000000000000000000000101
000000000000000000000001100100
3. Процесс
исправления однократной
в § 4.1.
( 5. Разработка схемы алгоритма
нет
нет
( 6. Разработка текста программы
Для представления информационного слова в памяти используется
массив. В состав
программы входит основная
реализующие алгоритм кодирования и декодирования информационных слов и
диалога с пользователем соответственно.
Program Cyclic_Code;
Uses
Crt,_CC31,_Serv;
Var
m,mm:Move_code;
p:Polinom;
r:Rest;
i,Mainflag,From,Error:integer;
Switch:byte;
Key:boolean;
begin
Repeat
Key:=true;
TextColor(11);
TextBackGround(7);
Clrscr;
SetWindow(24,10,45,14,2,' Главное меню ');
Switch:=GetMainMenuChoice;
case Switch of
1:begin
About;
Readln;
Key:=False;
end;
2: begin
TextColor(0);
ClrScr;
SetWindow(25,10,40,13,1,' Образовать ');
Switch:=GetSubMenuChoice;
case Switch of
1:begin
TextBackGround(0);
TextColor(15);
ClrScr;
SetWindow(1,1,79,24,2,' Демонстрация');
TextColor(14);
GotoXY(2,2);
Init(m,p,r,MainFlag);
Write(‘Информационный полином
TextColor(2);
for i:=n downto 0 do
begin
if(i0) do
begin
for i:=n downto 1 do
m6[i]:=m6[i-1];
dec(k);
end;
for i:=n1-1 downto 0 do
m6[i]:=0;
end;
Procedure Divizion(var m2:Move_code;var r2:Rest;
p2:Polinom;var flag:integer);
label
RETURN;
var
i,j,i1,kol,Countzero:integer;
begin
j:=n;
RETURN:while((j>=0)and(m2[j]=
if(j>n1)
then begin
for i:=n1 downto 0 do
begin
r2[i]:=m2[j];
dec(j);
end;
while(j>=0)do
begin
for i:=n1 downto 0 do
r2[i]:=r2[i] xor p2[i];
i1:=n1;
while((i1>=0)and(r2[i1]=0))do dec(i1);
if(i1=-1)then goto RETURN;
Kol:=n1-i1;
while(Kol>0)do
begin
for i:=n1 downto 1 do
r2[i]:=r2[i-1];
dec(Kol);
end;
Kol:=n1-i1;
while((Kol>0)and(j>=0))do
begin
r2[Kol-1]:=m2[j];
dec(Kol);
dec(j);
end;
if((j=-1)and(Kol=0))
then begin
for i:=n1 downto 0 do
r2[i]:=r2[i] xor p2[i];
end
else flag:=Kol;
end;
end
else if(n1=j)
then begin
for i:=n1 downto 0 do
begin
r2[i]:=m2[j];
dec(j);
end;
for i:=n1 downto 0 do
r2[i]:=r2[i] xor p2[i]
end
else if(j0)then
begin
k:=n1-flag;
for i:=n1 downto flag do
begin
m3[k]:=r3[i];
dec(k);
end;
end
else begin
for i:=n1-1 downto 0 do
m3[i]:=r3[i];
end;
end;
Procedure MakeError(var m4:Move_code;var err:integer);
begin