Основы программирования на rubyEvgeny SmirnovРассказывается об основах программирования на ruby: переменные, типы переменных, операции и пр. В конце приводятся блок-схема решения линейного уравнения.
Урок 17. Паттерн 9. Смешанная арифметикаTatyanazaxarovaНадеемся, вы уже успели отдохнуть от 13 урока и теперь сможете рассмотреть еще один важный паттерн ошибок, связанный с арифметическими выражениями, в которых участвуют типы различной размерности.
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...Iosif ItkinExpanding the Meta-Generation of Correctness Conditions by Means of Semantic Markup
Dmitry Kondratyev, A.P. Ershov Institute of Informatics Systems, Novosibirsk
12 - 14 November 2015
Tools and Methods of Program Analysis in St. Petersburg
Основы программирования на rubyEvgeny SmirnovРассказывается об основах программирования на ruby: переменные, типы переменных, операции и пр. В конце приводятся блок-схема решения линейного уравнения.
Урок 17. Паттерн 9. Смешанная арифметикаTatyanazaxarovaНадеемся, вы уже успели отдохнуть от 13 урока и теперь сможете рассмотреть еще один важный паттерн ошибок, связанный с арифметическими выражениями, в которых участвуют типы различной размерности.
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...Iosif ItkinExpanding the Meta-Generation of Correctness Conditions by Means of Semantic Markup
Dmitry Kondratyev, A.P. Ershov Institute of Informatics Systems, Novosibirsk
12 - 14 November 2015
Tools and Methods of Program Analysis in St. Petersburg
Линейные кодыAlex DainiakЛинейные коды. Определения. Порождающая и проверочная матрицы. Связь кодового расстояния с проверочной матрицей. Граница Варшамова—Гилберта. Систематическое кодирование. Декодирование по синдрому. Коды Хемминга.
Остаточный код. Граница Грайсмера—Соломона—Штиффлера.
Урок 9. Паттерн 1. Магические числаTatyanazaxarovaВ некачественном коде часто встречаются магические числовые константы, наличие которых опасно само по себе. При миграции кода на 64-битную платформу эти константы могут сделать код неработоспособным, если участвуют в операциях вычисления адреса, размера объектов или в битовых операциях.
Циклические коды. Граница БЧХAlex DainiakЦиклические коды. Проверочный и порождающий многочлены, критерий существования кода с заданным порождающим многочленом. Вид порождающей и проверочной матриц. Систематическое кодирование.
Граница Боуза—Чоудхури—Хоквингема.
2. Коды для обнаружения ошибок
Код с проверкой на четность. Такой код образуется путем
добавления к передаваемой комбинации, состоящей из k
информационных символов, одного контрольного символа (0 или 1),
так, чтобы общее число единиц в передаваемой комбинации было
четным.
Код с постоянным весом. Этот код содержит постоянное число
единиц и нулей.
Корреляционный код (код с удвоением). Элементы данного кода
заменяются двумя символами: 1 преобразуется в 10, а 0 – в 01
Инверсный код. К исходной комбинации добавляется такая же
комбинация по длине. В линию посылается удвоенное число
символов. Если в исходной комбинации четное число единиц, то
добавляемая комбинация повторяет исходную комбинацию, если
нечетное – то добавляемая комбинация является инверсной
относительно исходной.
Код Грея. Для перевода двоичного числа AnAn-1…A0 в код Грея anan-
1…a0 используются правила:
an= An,
ai= Ai, если Ai+1 = 0,
ai= Ai ⊕ 1, если Ai+1 = 1.
3. Корректирующие коды
Корректирующими называются коды
позволяющие обнаруживать и исправлять ошибки.
Для построения корректирующих кодов
используется кодовое расстояние − минимальное
число элементов, в которых одна кодовая
комбинация отличается от другой. Для определения
кодового расстояния достаточно сложить две
кодовые комбинации по модулю 2 и подсчитать
число единиц в сумме.
Требуемое кодовое расстояние между двумя
различными комбинациями корректирующего кода
определяется по формуле d = t + l + 1, где t – число
исправляемых ошибок, l – число обнаруживаемых
ошибок (обычно l > t).
4. Циклические коды
Циклическими кодами называют
специальную группу кодов, для построения
которых могут быть использованы циклические
свойства квадратных матриц, а также коды,
которые описываются неприводимыми,
образующими (порождающими) многочленами
(полиномами).
Циклические коды относятся к
систематическим (n,k)-кодам, в которых
контрольные r и информационные k разряды
расположены на строго определенных местах (n
= k + r).
5. Полиномиальное представление
кодовой комбинации
P(x) = anxn
+ an-1xn-1
+ an-2xn-2
+ …+ a2x2
+ a1x + a0x,
где an, an-1, an-2, …, a2, a1, a0 – значения разрядов
кодовой комбинации с номерами
n, n–1, n–2, …, 2, 1, 0.
Например, P(x) = x5
+ x3
+ x2
+ 1 –
полиномиальное представление кодовой
комбинации 101101.
6. Построение циклических кодов
Кодовые комбинации при построении циклических
кодов рассматриваются как многочлены. Действия
над ними производятся также, как в обычной
алгебре, с заменой сложения и вычитания
операцией сложения по модулю 2.
Циклический (n,k)-код получают следующим
образом:
1. заданный многочлен h(х) умножается на одночлен
хn-k,
2. полученный многочлен делится на образующий
многочлен g(х),
3. полученный остаток суммируется с произведением
h(х)хn-k.
7. Построение циклических кодов
Для построения циклических кодов можно использовать
образующую (порождающую) матрицу Gk×n:
,
где
Rk×(n–k) – матрица остатков ri от деления полинома x2(n–k)–
i–1
на образующий многочлен g(x) для всех строк с
номерами i = 1, 2, …, k.
( ))( knkknk RIG −×× =
9. Порядок выполнения лабораторной работы
1. Ознакомиться с основными сведениями по
помехоустойчивому кодированию.
2. Получить задание на выполнение лабораторной
работы.
3. Выполнить необходимые расчеты для выполнения
задания с помощью программы Microsoft Excel.
4. Написать и отладить программы для выполнения
задания на языке C++ в среде Microsoft Visual Studio.
5. Сделать выводы по результатам выполнения
лабораторной работы.
6. Оформить отчет о выполнении лабораторной работы.
7. Ответить на контрольные вопросы.
10. Контрольные вопросы
1. Назначение помехоустойчивых кодов?
2. Как строятся коды с проверкой на четность, с
удвоением, с постоянным весом, инверсные, Грея?
3. Какие коды называются корректирующими?
4. Что определяет минимальное кодовое расстояние?
5. Как определяются линейные коды?
6. Как определяются циклические коды?
7. Как выбирается образующий многочлен?
8. Как построить образующую и проверочную матрицы
циклического кода?
9. Как выполняются кодирование и декодирование
циклического кода?
10.Как выявляется и исправляется ошибка в циклическом
коде?
11. Задания на лабораторную работу
1. Определить исходные кодовые комбинации,
соответствующие заданному неприводимому
полиному из таблицы 2.
2. Построить циклические коды, соответствующие
исходным кодовым комбинациям.
3. Выполнить декодирование циклических кодов.
4. Внести ошибку в одну из кодовых комбинаций
циклического кода.
5. Выполнить декодирование циклического кода с
ошибкой.
6. Построить коды с проверкой на четность, с
удвоением, с постоянным весом, инверсные, Грея
для исходных кодовых комбинаций.