Практикум на ЭВМ (317)/2013/Коды БЧХ
Материал из MachineLearning.
(Различия между версиями)
												
			
			 (→Оформление задания)  | 
				|||
| Строка 4: | Строка 4: | ||
__NOTOC__  | __NOTOC__  | ||
| - | '''Начало выполнения задания''':   | + | '''Начало выполнения задания''': 8 мая 2013 г.<br>  | 
'''Срок сдачи''': {{важно|19 мая 2013 г. (воскресенье), 23:59.}}  | '''Срок сдачи''': {{важно|19 мая 2013 г. (воскресенье), 23:59.}}  | ||
Программная среда для выполнения задания — MATLAB. Неэффективная реализация кода может негативно отразиться на оценке.  | Программная среда для выполнения задания — MATLAB. Неэффективная реализация кода может негативно отразиться на оценке.  | ||
| - | ==   | + | == Необходимая теория ==  | 
| + | === Кодирование с помощью (n,k,d)-блоковых линейных циклических кодов ===  | ||
| + | |||
| + | === Коды БЧХ: кодирование и декодирование ===  | ||
| + | |||
| + | === Укороченные коды ===  | ||
== Формулировка задания ==  | == Формулировка задания ==  | ||
| - | # Реализовать основные операции в поле <tex>GF(2^l)</tex>: сложение, умножение, деление, решение СЛАУ, вычисление значения многочлена для заданного элемента поля  | + | В задании выдается список всех примитивных многочленов степени <tex>l</tex> для поля <tex>GF(2^l)</tex> для всех <tex>l=1,2,\dots,16</tex>.  | 
| + | |||
| + | # Реализовать основные операции в поле <tex>GF(2^l)</tex>: сложение, умножение, деление, решение СЛАУ, поиск примитивных элементов, вычисление значения многочлена из <tex>GF(2^l)[x]</tex> для заданного элемента поля. Реализовать поиск минимального многочлена из <tex>GF(2)[x]</tex> для заданного набора корней из поля <tex>GF(2^l)</tex> двумя способами: с помощью решения СЛАУ и с помощью построения циклотомических классов смежности. Провести временные замеры скорости работы для этих двух способов.  | ||
# Реализовать процедуру систематического кодирования для циклического кода, заданного своим порождающим многочленом;  | # Реализовать процедуру систематического кодирования для циклического кода, заданного своим порождающим многочленом;  | ||
| - | # Реализовать процедуру построения порождающего многочлена для БЧХ-кода   | + | # Реализовать процедуру построения порождающего многочлена для БЧХ-кода при заданных <tex>n</tex> и <tex>d</tex> с одновременным выбором нулей кода таким образом, чтобы значение <tex>k</tex> было максимальным. С помощью экспериментов определить, как сильно может меняться <tex>k</tex> в зависимости от выбора примитивного элемента - первого нуля кода для различных значений <tex>l,n,d</tex>;   | 
| - | # Реализовать процедуру декодирования БЧХ-кода   | + | # Реализовать процедуру декодирования БЧХ-кода с помощью метода PGZ;  | 
| + | # '''[Бонус]''' Реализовать процедуру декодирования БЧХ-кода с помощью алгоритма Берлекемпа-Мэсси (BMA). Провести сравнение методов BMA и PGZ по времени работы;  | ||
# Провести экспериментальное исследование БЧХ-кода на модельных данных;  | # Провести экспериментальное исследование БЧХ-кода на модельных данных;  | ||
# Составить отчет в формате PDF обо всех проведенных исследованиях.  | # Составить отчет в формате PDF обо всех проведенных исследованиях.  | ||
| Строка 102: | Строка 110: | ||
 |-  |  |-  | ||
 |x — решение СЛАУ, вектор-столбец из элементов поля, в случае вырожденности <tex>A</tex> равен NaN.  |  |x — решение СЛАУ, вектор-столбец из элементов поля, в случае вырожденности <tex>A</tex> равен NaN.  | ||
| + |  |}  | ||
| + | |||
| + |    | ||
| + | |||
| + | {|class="standard"  | ||
| + |  !''Поиск всех примитивных элементов поля <tex>GF(2^l)</tex>''  | ||
| + |  |-  | ||
| + |  |alpha = '''gf_primel'''(pm)  | ||
| + |  |-  | ||
| + |  |ВХОД  | ||
| + |  |-  | ||
| + |  |pm — матрица соответствия между десятичным и степенным представлением в поле <tex>GF(2^l)</tex>;  | ||
| + |  |-  | ||
| + |  |ВЫХОД  | ||
| + |  |-  | ||
| + |  |alpha — найденные примитивные элементы, вектор-столбец десятичных чисел.  | ||
 |}  |  |}  | ||
| Строка 167: | Строка 191: | ||
{|class="standard"  | {|class="standard"  | ||
| - |  !''Поиск порождающего многочлена для БЧХ-кода''  | + |  !''Поиск порождающего многочлена для БЧХ-кода с максимизацией <tex>k</tex>''  | 
 |-  |  |-  | ||
| - |  |g = '''bch_genpoly'''(n, d)  | + |  |[g, R, pm] = '''bch_genpoly'''(n, d)  | 
 |-  |  |-  | ||
 |ВХОД  |  |ВХОД  | ||
| Строка 179: | Строка 203: | ||
 |ВЫХОД  |  |ВЫХОД  | ||
 |-  |  |-  | ||
| - |  |g — порождающий полином кода, число.  | + |  |g — порождающий полином кода, число;  | 
| + |  |-  | ||
| + |  |R — нули кода, вектор-столбец чисел;  | ||
| + |  |-  | ||
| + |  |pm — матрица соответствия между десятичным и степенным представлением в поле <tex>GF(2^l)</tex>.  | ||
| + |  |}  | ||
| + | |||
| + |    | ||
| + | |||
| + | {|class="standard"  | ||
| + |  !''Декодирование БЧХ-кода''  | ||
| + |  |-  | ||
| + |  |V = '''bch_decoding'''(W, R, pm, method)  | ||
| + |  |-  | ||
| + |  |ВХОД  | ||
| + |  |-  | ||
| + |  |W — набор принятых сообщений, вектор-столбец элементов из <tex>GF(2^l)</tex>;  | ||
| + |  |-  | ||
| + |  |R — нули кода, вектор-столбец элементов из <tex>GF(2^l)</tex>;  | ||
| + |  |-  | ||
| + |  |pm — матрица соответствия между десятичным и степенным представлением в поле <tex>GF(2^l)</tex>;  | ||
| + |  |-  | ||
| + |  |method — (необязательный параметр) метод декодирования, строка, возможные значения 'pgz' и 'bma', по умолчанию = 'bma';  | ||
| + |  |-  | ||
| + |  |ВЫХОД  | ||
| + |  |-  | ||
| + |  |V — декодированные сообщения, вектор-столбец чисел, в случае отказа от декодирования соответствующий элемент равен NaN.  | ||
 |}  |  |}  | ||
Версия 23:25, 7 мая 2013
|   | Формулировка задания находится в стадии разработки. Убедительная просьба не приступать к выполнению задания до тех пор, пока это предупреждение не будет удалено. | 
Начало выполнения задания: 8 мая 2013 г.
Срок сдачи: 19 мая 2013 г. (воскресенье), 23:59.
Программная среда для выполнения задания — MATLAB. Неэффективная реализация кода может негативно отразиться на оценке.
Необходимая теория
Кодирование с помощью (n,k,d)-блоковых линейных циклических кодов
Коды БЧХ: кодирование и декодирование
Укороченные коды
Формулировка задания
В задании выдается список всех примитивных многочленов степени  для поля 
 для всех 
.
-  Реализовать основные операции в поле 
: сложение, умножение, деление, решение СЛАУ, поиск примитивных элементов, вычисление значения многочлена из
для заданного элемента поля. Реализовать поиск минимального многочлена из
для заданного набора корней из поля
двумя способами: с помощью решения СЛАУ и с помощью построения циклотомических классов смежности. Провести временные замеры скорости работы для этих двух способов.
 - Реализовать процедуру систематического кодирования для циклического кода, заданного своим порождающим многочленом;
 -  Реализовать процедуру построения порождающего многочлена для БЧХ-кода при заданных 
и
с одновременным выбором нулей кода таким образом, чтобы значение
было максимальным. С помощью экспериментов определить, как сильно может меняться
в зависимости от выбора примитивного элемента - первого нуля кода для различных значений
;
 - Реализовать процедуру декодирования БЧХ-кода с помощью метода PGZ;
 - [Бонус] Реализовать процедуру декодирования БЧХ-кода с помощью алгоритма Берлекемпа-Мэсси (BMA). Провести сравнение методов BMA и PGZ по времени работы;
 - Провести экспериментальное исследование БЧХ-кода на модельных данных;
 - Составить отчет в формате PDF обо всех проведенных исследованиях.
 
Рекомендации по выполнению задания
Оформление задания
Выполненное задание с отчетом и всеми исходными кодами необходимо прислать преподавателю. Большая просьба строго следовать указанным ниже прототипам реализуемых функций.
| Построение матрицы соответствия между десятичным и степенным представлением для всех элементов поля  | 
|---|
| pm = gf_gen_pow_matrix(pp) | 
| ВХОД | 
| pp — примитивный многочлен в поле  | 
| ВЫХОД | 
| pm — матрица соответствия между десятичным представлением и степенным представлением по стандартному примитивному элементу  | 
| Суммирование в  | 
|---|
| res = gf_sum(X, Y) — поэлементное суммирование двух матриц | 
| res = gf_sum(X, [], dim) — суммирование по заданной размерности | 
| ВХОД | 
| X, Y — матрица из элементов поля  | 
| dim — (необязательный параметр) номер размерности для суммирования, по умолчанию = 1; | 
| ВЫХОД | 
| res — результат суммирования. | 
| Умножение/деление в поле  | 
|---|
| res = gf_prod(X, Y, pm) — поэлементное умножение двух матриц | 
| res = gf_divide(X, Y, pm) — поэлементное деление двух матриц | 
| ВХОД | 
| X, Y — матрица из элементов поля  | 
| pm — матрица соответствия между десятичным и степенным представлением в поле  | 
| ВЫХОД | 
| res — результат операции, при делении на ноль соответствующий элемент равен NaN. | 
| Решение СЛАУ  | 
|---|
| x = gf_linsolve(A, b, pm) | 
| ВХОД | 
| A — квадратная матрица из элементов поля  | 
| b — вектор-столбец из элементов поля  | 
| pm — матрица соответствия между десятичным и степенным представлением в поле  | 
| ВЫХОД | 
| x — решение СЛАУ, вектор-столбец из элементов поля, в случае вырожденности  | 
| Поиск всех примитивных элементов поля  | 
|---|
| alpha = gf_primel(pm) | 
| ВХОД | 
| pm — матрица соответствия между десятичным и степенным представлением в поле  | 
| ВЫХОД | 
| alpha — найденные примитивные элементы, вектор-столбец десятичных чисел. | 
| Поиск минимального полинома в  | 
|---|
| p = gf_minpoly(x, pm, method) | 
| ВХОД | 
| x — вектор-столбец из элементов поля  | 
| pm — матрица соответствия между десятичным и степенным представлением в поле  | 
| method — (необязательный параметр) метод поиска, строка, возможные значения 'ls' (с помощью решения СЛАУ) и 'cosets' (с помощью построения циклотомических классов смежности), по умолчанию = 'cosets'; | 
| ВЫХОД | 
| p — найденный полином, десятичное число. | 
| Значение полинома из  | 
|---|
| res = gf_polyval(p, X, pm) | 
| ВХОД | 
| p — полином из  | 
| X — матрица из элементов поля  | 
| pm — матрица соответствия между десятичным и степенным представлением в поле  | 
| ВЫХОД | 
| res — значение полинома для всех элементов X. | 
| Систематическое кодирование циклическим кодом с заданным порождающим многочленом | 
|---|
| V = cyclic_coding(U, g, n) | 
| ВХОД | 
| U — исходные сообщения для кодирования, вектор-столбец десятичных чисел; | 
| g — порождающий полином кода, десятичное число; | 
| n — длина кода, десятичное число; | 
| ВЫХОД | 
| V — закодированные сообщения, вектор-столбец десятичных чисел. | 
| Поиск порождающего многочлена для БЧХ-кода с максимизацией  | 
|---|
| [g, R, pm] = bch_genpoly(n, d) | 
| ВХОД | 
| n — длина кода, число вида  | 
| d — минимальное расстояние кода, число; | 
| ВЫХОД | 
| g — порождающий полином кода, число; | 
| R — нули кода, вектор-столбец чисел; | 
| pm — матрица соответствия между десятичным и степенным представлением в поле  | 
| Декодирование БЧХ-кода | 
|---|
| V = bch_decoding(W, R, pm, method) | 
| ВХОД | 
| W — набор принятых сообщений, вектор-столбец элементов из  | 
| R — нули кода, вектор-столбец элементов из  | 
| pm — матрица соответствия между десятичным и степенным представлением в поле  | 
| method — (необязательный параметр) метод декодирования, строка, возможные значения 'pgz' и 'bma', по умолчанию = 'bma'; | 
| ВЫХОД | 
| V — декодированные сообщения, вектор-столбец чисел, в случае отказа от декодирования соответствующий элемент равен NaN. | 

