Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.
Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.
Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.
Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.
Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.
Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.
BCH коды
> restart:
with(linalg):
Warning, the protected names norm and trace have been redefined and unprotected
Если F(q) поля по основанию q и p(x) полином степени m с коэффициентами из поля F(q), но неприводимый в этом поле, то можно получить поле из q^m символов используя аддитивный корень p.
Рассмотрим слкчай, когда p=2.
> p:=2;
определим alpha - корень полинома p(z) = Z^6+Z+1, m=6.
> alias(alpha=RootOf(Z^6+Z+1) mod p):
> m:=6;
> Q:=p^m;
> powers:=vector(Q-1);
Формирование элементов поля через степени alpha^(i-1)
> for i to Q-1 do powers[i]:=evala(alpha^(i-1)) mod p od:
> print(powers);
> inverse:=vector(Q-1);
Формирование обратных элементов поля 1/powers[i]
> for i to Q-1 do inverse[i]:=evala(1/powers[i])mod p od:
> print(inverse);
Найдем генераторный полином БЧХ кода. Предварительно определим минимальный полином заданного поля. Предположим, что циклический код формируется по модулю x^63+1, т.е. кодовое слово имеет длину 63. Код поддерживает расширенное поле GF(2^m)
Проведем факторизацию полинома x^63+1
Вычисление минимальных полиномов через циклотомические классы
Чтение оператора, вычисляющего циклотомический класс s, для n и p
> read "CyclotomicCoset.m";
Пример s=1,n=63,p=2
> CyclotomicCoset(1,63,2);
>
> read "AllCyclotomicCosets.m";
Чтение оператора, вычисляющего все циклотомические классы
> AllCyclotomicCosets(63,2);
Формирование минимальных многочленов через степени alpha^i, i - числа циклотомического класса
> mn1:=simplify((x+alpha)*(x+alpha^2)*(x+alpha^4)*(x+alpha^8)*(x+alpha^16)*(x+alpha^32)) mod 2;
> mn3:=simplify((x+alpha^3)*(x+alpha^6)*(x+alpha^12)*(x+alpha^24)*(x+alpha^48)*(x+alpha^33)) mod 2;
> mn5:=simplify((x+alpha^5)*(x+alpha^10)*(x+alpha^20)*(x+alpha^40)*(x+alpha^17)*(x+alpha^34)) mod 2;
> mn7:=simplify((x+alpha^7)*(x+alpha^14)*(x+alpha^28)*(x+alpha^56)*(x+alpha^49)*(x+alpha^35)) mod 2;
> mn9:=simplify((x+alpha^9)*(x+alpha^18)*(x+alpha^36)) mod 2;
Формирование минимальных многочленов через факторизацию полинома (x^n-1)
.
> Factor(x^63+1) mod 2;
Выделим первый полином
> m1:=x^6+x+1;
> m3:=x^6+x^4+x^2+x+1;
> m5 := 1+x+x^6+x^2+x^5;
Сформируем полином, исправляющий 3 ошибки
> g3:=expand(mn1*mn7*mn9*mn3*mn5) mod 2;
> g3:=sort(g3,x);
Кодирование
Сформируем информационный вектор
> a:= 1+x+ x^7;
Несистематический код c(x)=a(x)g(x)
> с:=sort(expand(simplify(g5*a))) mod 2;
Систематический код
1. words:=a(x)x^(n-k)
> words:=sort(expand(x^18*a));
Вычисление остатка ww:= rem{a(x)x^(n-k)/g(x))
> ww:=Rem(words,g3,x) mod 2;
Формирование кодового слова
> c:=words+ww mod 2;
Модель канала - через полином ошибок err(x)
> err:= x^4+x^8+x^12+x^16+x^20;
Аддитивная смесь кода и ошибок
> rws:=sort(c+err mod 2);
Принимаемый сигнал
> y:=sort(c+err mod 2);
Значения синдрома вычисляются путем подстановки в полином y(x) значения соответствующего элемента поля
> s1:=Eval(y,x=alpha) mod 2;
> s2:=Eval(y,x=alpha^2) mod 2;
> s3:=Eval(y,x=alpha^3) mod 2;
> s4:=Eval(y,x=alpha^4) mod 2;
> s5:=Eval(y,x=alpha^5) mod 2;
> s6:=Eval(y,x=alpha^6) mod 2;
Составление матрицы сдвигов синдромов
> A:=matrix(3,3,[s1,s1^2,s3,s1^2,s3,s1^4,s3,s1^4,s5]);
Задание вектора значений синдрома для правой части системы уравнений
> hs:=vector(3,[s1^4,s5,s3^2]);
Решение системы линейных уравнений
> co:=Linsolve(A,hs) mod 2;
Задание полинома локаторов ошибок sig
> sig:=z^3+co[3]*z^2+co[2]*z+co[1];
Факторизация полинома sig для нахождения его корней
> Factor(sig) mod 2;
Нахождение корней полинома локаторов ошибок
> erp:=vector(3);
> ro:=Roots(sig) mod 2;
Пересчет значений корней полинома локаторов ошибок в локаторы ошибок или позиции ошибок
> for i from 1 to 3 do
for j from 1 to 63 do
if (ro[i,1]=powers[j]) then erp[i]:=j-1 fi;
od;od;
Вывод значений позиций ошибок
> print(erp);
>
>
>
>
>
Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.
Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.
Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.
Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.
Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.
Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.