Исследования сложности алгоритма PGZ декодирования кода БЧХ

Декодирование БЧХ-кода.

Листинг кода программы:

1. %1) Зададим параметры кода m, n, p, t, k

2. m=4;

3. p=2;

4. n=p^m-1;

5. t=1;

6. k=11;

7.

8. %2)Сформируем поле GF(p^m)

9. field = gftuple([-1:p^m-2]',m,p);

10.alpha=field;

11.

12.

13.%3)Формирование генераторного полинома

14. %Полином формируется алгоритмов формирования генераторного полинома

15. %БЧХ-кода

16.

17.%4)Формирование генераторной матрицы систематического

18. %циклического кода БЧХ

19.

20.%Генераторная матрица

21.G=[ [1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 ],

22. [0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 ],

23. [0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 ],

24. [0 0 0 1 0 0 0 0 0 0 0 1 1 0 1 ],

25. [0 0 0 0 1 0 0 0 0 0 0 1 0 1 0 ],

26. [0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 ],

27. [0 0 0 0 0 0 1 0 0 0 0 1 1 1 0 ],

28. [0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 ],

29. [0 0 0 0 0 0 0 0 1 0 0 1 1 1 1 ],

30. [0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 ],

31. [0 0 0 0 0 0 0 0 0 0 1 1 0 0 1]];

32.

33.%5) Построение модели канала

34.[cbpsk,r,d,e,mes,c]=kodmodbch(n,G,k);

35.

36.%6)Модель канала с аддитивным нормальным шумом randn

37.SNR=3; %отношение сигнал/шум

38.

39.%нормировка SNR

40.uvar=10^(-SNR/10)/2;

41.cvar=uvar*n/k;

42.Gn=sqrt(cvar)*randn(1,n);

43.

44.%Формирование аддитивной смеси сигнала и шума

45.cn=fliplr(cbpsk)+Gn;

46.

47.%Модель демодулятора, вычисляющего знак принимаемого символа

48.for j=1:n

49. if cn(j)<0

50.   r(j)=0;

51. else

52.   r(j)=1;

53. end

54.end

55.%На вход декодера подается вектор знаковых различий, отображенных в

56.% логические символы 0 и 1

57.

58.%7) Схема вычисления синдрома

59.[s]=sndrmbch(t,n,r,alpha,m,p);

60.

61.%8)Вычисление полинома локаторов ошибок по алгоритму

62.%Берлекемпа-Месси

63.[lmd]=BMbch(s,t,n,m,p,alpha);

64.%Программа возвращает полином локаторов ошибки lmd

65.%-------------------------------------------------------------------

66.

67.%9) Процедура Ченя.

68.%Вычисляет корни полинома локаторов ошибки и определяет

69.%местоположение ошибок по индексам обратных корней полинома

70.[e]=ChienDCH(lmd,n,m,p,t,alpha,e);

71.%----------------------------------------------------

72.%10)Коррекция ошибок

73.d=flip(mod(r+e,2)); % Коррекция принимаемого вектора r

74.dmes=(d(:,n-k+1:n)); % Выделение информационной части

75.erc=abs(sum(dmes-mes));% Сравнение оценки сообщения dmes

76.%и переданного сообщения mes

77.%----------------------------------------------------

Результат работы программы:

Передаваемое сообщение:

00010101011

Кодовое слово:

000101010111101

Сигнал подаваемый на демодулятор:

00111010001100

Синдром:

5  10

 

Полином локаторов ошибок:

5

Вектор оценки ошибок:

000001000000000

Полученное сообщение после коррекции ошибок:

00010011001

 

Исследования сложности алгоритма PGZ декодирования кода БЧХ

1. clear all2. clc3. %%%%% Параметры БЧХ-кода (из таблицы)4. p=2; m=5; 5. n=31; k=11; d=11; 6. b=1;7. %%% Формирование примитивного неприводимого полинома поля GF(p^m)8. pol=gfprimfd(m,'min',2)9. %%%%%%%%%%%%%%%%%%%%%%%%%Формирование поля GF(p^m) 10.[pold,alpha,field]=gfpoleBCH(m,n,d,pol) 11.%%%%%%Формирование генераторного полинома БЧХ-кода в поле GF12.[z,t2]=bchgenpoly(n,k);%13.%%%%%%%%%%%% Выделение двоичной формы генераторного полинома g14.zv=double(z.x); 15.g=fliplr(zv);% 16.% %%%%%%%%% Формирование вектора сообщения mes17.mes=round(rand(1,k));18.%%%%%% Кодирование сообщения циклическим кодом g19.c= rgfb(n,k,g,mes) 20.%%%%%%% Вектор ошибок e 21.2822.e=zeros(1,n);23.% Задание местоположения ошибок e(i)24.e(3)=1; 25.%e(5)=1; e(14)=1; e(7)=1; e(8)=1; 26.%%%%% Принимаемый вектор -> сумма кодового слова и вектора ошибок27.rec=mod(c+e,2);28.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%29.% ----------------------------------------------------------------------- 30.% Полиномиальная форма принимаемого сигнала 31.% -----------------------------------------------------------------------32.rec_pol=gf(rec,m,pold);33.%%%%%%% Вычисление синдрома34.s=syndrBCH(m,n,k,d,pold,alpha,b,rec_pol); 35.tic % Начало отсчета сложности декодирования 36.%%%%%%%%%%%%%%%%%%Алгоритм декодирования PGZ37.[sigma,est_error,est_code_pol]=pgzbch(d,m,n,pold,rec_pol,s,b,alpha);38.% Результат декодирования в формате DOUBLE39.vec_est_code=double(est_code_pol.x); 40.%Проверка декодирования: при совпадении C и VEC_EST_CODE -> SUM=0 41.Z=sum(fliplr(c)-vec_est_code)42.if sum(fliplr(c)-vec_est_code)~=043.fprintf('STOP Error > t ')44.end 45.%%%%%%% 46.toc %%Окончание оценки сложности алгоритма декодирования

Результат работы программы:

Время выполнения исследуемого алгоритма

 

2.1 Оценка сложности правильного декодирования БЧХ-кода при различном количестве ошибок

Количество Ошибок 1 2 3 4 5
Elapsed time 1 0.1797 0.1938 0.2299 0.2545 0.2805
Elapsed time 2 0.1540 0.2125 0.2271 0.2627 0.2838
Elapsed time 3 0,1458 0.1948 0.2285 0.2525 0.2792
Elapsed time 4 0.1399 0.1924 0.2252 0.2545 0.2750
Elapsed time 5 0.1605 0.1937 0.2265 0.2638 0.2799
Среднее Elapsed time 1 0.1559 0.1974 0.2274 0.2576 0.2796

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: