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

1. clear2. clc3. m=4;4. p=2 5. n=p^m-1; 6. t=3;7. k=5;8. [z,t]=bchgenpoly(n,k);9. zv=z.x; 10.%Генераторная матрица 11.G=zeros(k,n);12.for i=1:k13.G(i,i:n-k+i)= zv;14.end 15.B=G(:,n-k+1:n); 16.G=mod(mod(inv(B),2)*G,2);17.%Формирование поля(GF(p^m)18.field = gftuple([-1:p^m-2]',m,p);19.alpha=field; 20.[cbpsk,r,d,e,mes,c]=kodmodbch(n,G,k) 21.%%%%%%%%%%%%%%%%%%%%%%Вектор ошибок e22.er=zeros(1,n);23.er(3)=1;24.%er(5)=1; %er(14)=1;% er(7)=1; er(8)=1; 25.%%%%%%%%%%%%%%%% Принимаемый вектор r 26.r=fliplr(mod(c+er,2));27.%r=c;28.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%29.%Вычисление синдрома 30.s=sndrmbch(t,n,r,alpha,m,p) 31.tic% Начало оценки сложности32.%%%%Алгоритм Берлекампа-Месси33.lmd=BMbch(s,t,n,m,p,alpha)34.%%%%%%%%%%% Алгоритм Ченя 35.e=ChienDCH(lmd,n,m,p,t,alpha,e) 36.%%%Коррекция ошибок37.d=fliplr(mod(r+e,2));38.%%%%% Выделение информационной части39.dmes=d(:,n-k+1:n); 40.%%%%% Проверка правильности декодирования 41.erc=abs(sum(dmes-mes))42.%%%%%% Окончания оценки сложности43.toc

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

Количество Ошибок 1 2 3 4 5
Elapsed time 1 0.007072 0.008531 0.005962 0.008444 0.007332
Elapsed time 2 0.002074 0.002121 0.005075 0.002937 0.005314
Elapsed time 3 0.006154 0.002785 0.004849 0.007655 0.003242
Elapsed time 4 0.005308 0.003570 0.002882 0.005458 0.002854
Elapsed time 5 0.003075 0.005445 0.006894 0.005937 0.007522
Среднее Elapsed time 1 0.004736 00.44904 0.005132 0.006086 0.005228

 

 

Исследование помехоустойчивости БЧХ-КОДА при 2-ФМН (BPSK).

1. clear all,clc,format long2. m=4;3. p=2;4. n=p^m-1; 5. t=3; 6. k=5;7. [z,t]=bchgenpoly(n,k);8. zv=z.x;9. %Генераторная матрица 10.G=zeros(k,n); 11.for i=1:k12.G(i,i:n-k+i)= zv;13.end14.B=G(:,n-k+1:n); 15.G=mod(mod(inv(B),2)*G,2); 16.%Формирование поля GF17.alpha=zeros(n+1,m);18.alpha(2:m+1,:)=eye(m);19.for i=m+2:n+1 20.alpha(i,:)=mod(alpha(i-m,:)+alpha(i-m+1,:),2); 21.end22.field = gftuple([-1:p^m-2]',m,p);23.alpha=field;24.zd=bi2de(field); 25.%Декодирование и вычисление Pe 26.ind=1;L=3e4;27.for SNR=0:828.Pe(ind)=0;29.for l=1:L 30.r=zeros(1,n);d=zeros(1,n);cbpsk=zeros(1,n); 31.e=zeros(1,n);32.mes=round(rand(1,k));33.c=mod(mes*G,2);34.for j=1:n 35.if c(j)==0 36. cbpsk(j)=-1;37.else38.cbpsk(j)=1;39.end 40.end 41.%%%%%%%%%%%%%%%%%Канал42.uvar=10^(-SNR/10)/2;43.cvar=uvar*n/k;44.Gn=sqrt(cvar)* randn(1,n); 45.cn=fliplr(cbpsk)+Gn; 46.for j=1:n47.if cn(j)<048.r(j)=0;49.else 50.r(j)=1; 51.end52.end53.% Количество ошибок в канале54.erc=sum(fliplr(r)-c); 55.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 56.%Вычисление синдрома57.S=zeros(2*t,m);s=zeros(1,2*t);58.for i=1:2*t59.for j=1:n 60.if r(j)==0 61.S(i,:)=S(i,:);62.else63.S(i,:)=mod(S(i,:)+alpha(rem(i*j-i,n)+2,:),2);64.end 65.end 66.s(i)=index3(S(i,:))-1;67.end68.%Декодирование. Алгоритм Берлекэмпа-Месси69.lmd=zeros(1,t);T=zeros(1,t); 70.lmd(1)=s(1); 71.if s(1)==-172.T(1)=-1;T(2)=0;73.else74.T(1)=mod(n-s(1),n); 75.end 76.for v=1:t-177. deltar=alpha(rem(s(2*v+1),n)+2,:);78.for j=1:v79.if lmd(j)==-1 | s(2*v+1-j)==-1 80.deltar=deltar; 81.else82.deltar=mod(deltar+alpha(rem(lmd(j)+s(2*v+1-j),n)+2,:),2);83.end84.end 85.%delta=index2(deltar)-1; 86.delta=index3(deltar,n,m,p)-1;87.V=lmd;88.if delta==-1 | T(v)==-189.lmd(v+1)=-1; 90.else 91.lmd(v+1)=rem(delta+T(v),n);92.end93.for i=2:v94.if delta==-1 | T(i-1)==-1 95.lmdr=alpha(rem(lmd(i),n)+2,:); 96.else97.lmdr=mod(alpha(rem(lmd(i),n)+2,:)+alpha(rem(T(i-1)+delta,n)+2,:),2);98.end99.%lmd(i)=index2(lmdr)-1; 100. lmd(i)=index3(lmdr,n,m,p)-1; 101. end102. if delta~=-1103. T(1)=mod(n-delta,n);104. for i=2:v+1 105. T(i)=mod(V(i-1)-delta,n); 106. end107. else108. T(v+2)=T(v);109. for j=1:v+1 110. T(j)=0; 111. end112. end113. end114. %Локализация ошибок Алгоритм Ченя 115. for i=0:n-1 116. xx=zeros(1,m);117. for j=1:t118. if lmd(j)==-1119.     xx=xx; 120. else 121. xx=mod(xx+alpha(rem(lmd(j)+j*i,n)+2,:),2);122. end123. end124. if index3(xx,n,m,p)==1 125. e(mod(n-i,n)+1)=1; 126. end127. end128. %Исправление ошибок129. d=mod(r+e,2); 130. dmes=fliplr(d(:,n-k+1:n)); 131. %Вычисление Pe для моделирования132. for i=1:k133. if dmes(i)~=mes(i)134. Pe(ind)=Pe(ind)+1; 135. end 136. end137. end138. Pe(ind)=Pe(ind)/(k*L);139. ind=ind+1; 140. end 141. SNR=0:8;142. semilogy(SNR,0.5*erfc(sqrt(10.^(SNR/10))),'--');143. hold144. semilogy(SNR,Pe)


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



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