Декодирование БЧХ-кода.
Листинг кода программы:
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 |