Скачать 96.06 Kb.
|
ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ Государственное образовательное учреждение высшего профессионального образования Московский государственный институт электроники и математики (Технический университет) Кафедра ИКТ ОТЧЕТ К КУРСОВОЙ РАБОТЕ «Циклический код в матричном виде» Выполнил: Клюев А.А., группа С-65 Проверила: Гоманилова Н.Б. Москва 2011 ОглавлениеОглавление..........................................................................................................................................2 Теоретическая часть...........................................................................................................................3 Пример кода........................................................................................................................................4 Пример работы программы.............................................................................................................10 Инструкция по использованию.......................................................................................................12 Вывод.................................................................................................................................................13 Список литературы...........................................................................................................................14 ^ Могут быть построены различными способами: 1) В основе циклических кодов лежит положение о том, что любая разрешённая комбинация этого кода всегда должна делиться на порождающий полином без остатка. Исходя из этого положения получить все разрешённые комбинации циклического кода зная информационную часть очень просто. А именно: надо каждую информационную часть умножить на порождающий полином. При этом мы получим все разрешённые кодовые комбинации. К сожалению полученный таким способом код не является систематическим т.е. в комбинации этого кода нельзя выделить информационные и контрольные разряды. При декодировании в таком коде необходимо производить дополнительную операцию деления на P(x), чтобы выделить информационную часть. В этом заключается основной недостаток данного способа построения. 2) Разрешённые комбинации кода можно легко получить используя вышерассмотренное выражение для кодирования: ![]() 3) Как и большинство кодов циклические коды могут быть представлены в матричном виде: Порождающая матрица циклического кода как и для других кодов состоит из единичной матрицы (подматрицы) и контрольной подматрицы Ckm . В циклических кодах в качестве информационной части принято использовать единичную транспонированную матрицу E_m^T (хотя это и не обязательно). В единичной транспонированной матрице единицы расположены не по основной, а по побочной диагонали. Необходимо правильно строить подматрицу Ckm . Рассмотрим способ построения контрольной подматрицы Ckm, который я использовал для написания программы: Строку контрольной подматрицы ![]() ![]() ![]() ^ Файл index.php Циклический код в матричном виде с обнаружением одиночных ошибок.$word = $_POST["word"];// слово $word_len= strlen($word); // длина слова $word_string = (string)$word; $fail = $_POST["fail"];// слово $fail_string = (string)$fail; echo ("Информационая комбинация: ".$word." "); if($word_len < 1) { echo "Информационная комбинация не введена! "; return 0; } if($word_len > 32) { echo "Информационная комбинация должна быть короче 32 разрядов! "; return 0; } for($i = 0; $i < $word_len; $i++) { if($word_string[$i] != 1 and $word_string[$i] != 0) { echo " Информационная часть слова должна быть введена в двоичном виде! "; return 0; } } echo ("Количество информационных разрядов m = ".$word_len." "); $m = $word_len; // также длина слова echo "Номер искажённого младшего разряда равен: ".$fail; $k = 1; while(POW(2,$k) < $k+($word_len+1)) $k++; echo " Найдём количество контрольных разрядов k: "; ?> 2k >= m + k + 1 k = ? 2 >= + 1 = ".($m + $k + 1) ?> k = ! $n = $k + $m; echo (" Количество контрольных разрядов k = ".$k); switch($k) { case "2": $polinom = 111; break; case "3": $polinom = 1011; break; case "4": $polinom = 10011; break; case "5": $polinom = 100101; break; case "6": $polinom = 1000011; break; } $a; //$n = $k + $m; $polinom_len= strlen($polinom); echo (" Порождающий полином P = ".$polinom." "); $polinom_string = (string)$polinom; $result_string = (string)$a; // Делимое for($kk = 0; $kk <= $m-1; $kk++) { $result_len = $k + $kk + 1; $result_string[0] = 1; echo " Делим "; echo $result_string[0]; for($i = 1; $i < ($polinom_len + $kk); $i++) { $result_string[$i] = 0; echo $result_string[$i]; } echo " на порождающий полином ".$polinom; while($result_len > $k) { echo (" Сложение по модулю 2 равно "); for($i = 0; $i < $result_len; $i++) { if(($result_string[$i] == 1) and ($polinom_string[$i] == 1)) $result_string[$i] = 0; elseif(($result_string[$i] == 0) and ($polinom_string[$i] == 0)) $result_string[$i] = 0; else $result_string[$i] = 1; echo $result_string[$i]; } echo " Сдвиг... "; while($result_string[0] == 0 and $result_len > $k) { for($i = 0; $i < $result_len; $i++) { $result_string[$i] = $result_string[$i+1]; echo $result_string[$i]; } $result_len--; echo "--"; } } echo (" Остаток от деления равен: "); for($i = 0; $i < $result_len; $i++) echo $result_string[$i]; for($ii = 0; $ii < $result_len; $ii++) $e[$kk][$m+$ii] = $result_string[$ii]; echo " "; } echo " Составим матрицу: "; $mm=$m - 1; for ($i = 0; $i < $m; $i++) { for ($j = 0; $j < $m; $j++) { if ($j == $mm) { $e[$i][$j] = 1; echo $e[$i][$j]; } else { $e[$i][$j] = 0; echo $e[$i][$j]; } } echo "|"; for($ii = 0; $k > $ii; $ii++) echo $e[$i][$m+$ii]; $mm--; echo " "; } $mm=$m; echo " Транспонируем матрицу: "; for($j = 0; $j < $k; $j++) { for($i = 0; $i < $m; $i++) { $x[$j][$i] = $e[$i][$j+$m]; echo $x[$j][$i]; } echo "|"; for ($i = 0; $i < $k; $i++) { if ($i == $j) { echo "1"; } else { echo "0"; } } echo " "; } echo " Найдём контрольные разряды: "; $xx; for($i = 0; $i < $k; $i++) { $xx = 0; echo ("e(".($i+1).") = "); for($j = 0; $j < $m; $j++) { if($x[$i][$j] == 1) $xx++; } for($j = 0, $jj = 0; $j < $m; $j++) { if($x[$i][$m-$j-1] == 1) { echo ("a(".($j+1).")"); $jj++; if($xx == $jj) echo " = "; else echo " + "; } } for($j = 0, $jj = 0; $j < $m; $j++) { if($x[$i][$m-$j-1] == 1) { echo ($word_string[$j]); $jj++; if($xx != $jj) echo " + "; } } echo " "; } for($i = 0; $i < $k; $i++) { for($j = 0; $j < $m; $j++) { if($x[$i][$m-$j-1] == 1) $x[$i][$m-$j-1] = $word_string[$j]; } } for($i = 0; $i < $k; $i++) { $len = 0; for($j = 0; $j < $m; $j++) { if($x[$i][$j] == 1) $len++; } echo ("e(".($i+1).") = "); if($len == 0 or $len == 2 or $len == 4 or $len == 6 or $len == 8 or $len == 10) { echo "0"; $word_string[$i+$m] = 0; } if($len == 1 or $len == 3 or $len == 5 or $len == 7 or $len == 9 or $len == 11) { echo "1"; $word_string[$i+$m] = 1; } echo " "; } echo " Закодированная кодовая комбинация: "; for($i = 0; $i < $m+$k; $i++) echo $word_string[$i]; echo " Проверим на наличие ошибок: "; ?>
echo " Делим закодированную кодовую комбинацию "; for($i = 0; $i < $n; $i++) { $result_string[$i] = $word_string[$i]; echo $result_string[$i]; } echo (" на полином ".$polinom); while($n > $k) { echo (" Сложение по модулю 2 равно: "); for($i = 0; $i < $n; $i++) { if(($result_string[$i] == 1) and ($polinom_string[$i] == 1)) $result_string[$i] = 0; elseif(($result_string[$i] == 0) and ($polinom_string[$i] == 0)) $result_string[$i] = 0; else $result_string[$i] = 1; echo $result_string[$i]; } echo " Сдвиг влево... "; while($result_string[0] == 0 and $n > $k) { for($i = 0; $i < $n; $i++) { $result_string[$i] = $result_string[$i+1]; echo $result_string[$i]; } $n--; echo "--"; } } echo (" Остаток от деления равен: "); for($i = 0; $i < $n; $i++) echo $result_string[$i]; $cnt = 0; for($i = 0; $i < $n; $i++) { if($result_string[$i] == 1) $cnt++; } if($cnt > 0) echo " Обнаружена одиночная ошибка!"; $count = 0; for($i = 0; $i < $n; $i++) { if($result_string[$i] == 0) $count++; if($count == $n) echo " Ошибок не обнаружено!"; } ?> |
![]() | К сожалению полученный таким способом код не является систематическим т е в комбинации этого кода нельзя выделить информационные... | ![]() | В данной курсовой работе проводится логическое моделирование цифрового устройства с последующим анализом правильности его функционирования.... |
![]() | Цель данной курсовой работы является разработать структурные автоматы в базисе трандъюсеров | ![]() | Цель данной курсовой работы является разработать структурные автоматы в базисе трандъюсеров ┐ |
![]() | В данной курсовой работе разработан усилитель низких частот на основе цифро-аналогового преобразователя и операционного усилителя,... | ![]() | Цель данной работы — построить устройство, поддерживающее температуру жала паяльника на заданном уровне |
![]() | В курсовой работе разработан многоканальный коммутатор аналоговых сигналов, на 32 аналоговых сигнала. Разработана принципиальная... | ![]() | Исследуется система, описываемая математической моделью в виде передаточной функции |
![]() | Известно множество подобных сервисов, например icq, irc, aim, msn, Google talk и многие другие. Такие средства связи могут очень... | ![]() | Постановка задачи: построить потенциальный рельеф при перетаскивании межузельного атома в треугольной решетке на расстояние порядка... |