Практикум на ЭВМ (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 — решение СЛАУ, вектор-столбец из элементов поля, в случае вырожденности равен NaN. |
Поиск всех примитивных элементов поля |
---|
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. |