9.4 MATLAB Files

9.4.1 CEBus PL Chirp

 
 f=[0:359]/359*1.75e5+0.75e5; %f=4e5; t=[0:359]/359*1e-4; chirp1=sin(2*pi*f.*t); chirp=3.5*[chirp1(131:360) chirp1(1:130)]; figure(1) plot(t,chirp) xlabel('Time (Sec.)') ylabel('Magnitude') F=fft(chirp); figure(2) py=10*log10((abs(F(1:100))).^2/360/10/0.001/3.6e6*2); plot([1:100]/360*3.6e6, py) grid xlabel('Frequency (Hz)') ylabel('PSD (dBm/Hz)') 

9.4.2 GF Representation Calculation

 
 %Primitive Polynomial %pp=[1 0 1 1]; %pp=[1 0 0 1 1]; %pp=[1 0 0 1 0 1]; %pp=[1 0 0 0 0 1 1]; %pp=[1 0 0 0 1 0 0 1]; pp=[1 0 0 0 1 1 1 0 1]; m=length(pp)-1; bpr=zeros(2^m,m+1); %Binary presentation %Up to mth power for i=2:m+1     bpr(i,m+3-i)=1; end %Larger than mth power for i=m+2:2^m     for j=1:m         bpr(i,j)=bpr(i-1,j+1);     end     bpr(i,m+1)=0;     if bpr(i,1)==1         bpr(i,:)=xor(bpr(i,:),pp);     end end %Binary to decimal b2d=zeros(2^m,1); for i=1:2^m     for j=1:m     b2d(i)=b2d(i)+bpr(i,j+1)*2^(m-j);     end end %Log table [xx,ppr]=sort(b2d(2:2^m)); ppr=ppr-1; %Inverse log table dpr=b2d(3:2^m); 

9.4.3 RS Generator Polynomial Calculation

 
 %Generator Polynomial %Initialize ppr and dpr tables rsprp %GF size n=8; %Polynomial order m=16; %Initialization gp=-1*ones(1,m+1); %Set up for m=1 gp(1)=0; gp(2)=1; %Multiplication loop for i=2:m     gpp=gp;     for j=1:i         co1=p2bin(gpp(j+1),n,bpr);         co2=p2bin(gpp(j)+i,n,bpr);         gp(j+1)=b2pw(xor(co1,co2),n,ppr);     end end function b=p2bin(p,n,bpr); if p>-1;     p=mod(p,2^n-1); end b=bpr(p+2,:); function p=b2pw(b,n,ppr); d=0; for i=2:n+1     d=d+b(i)*2^(n-i+1) end if d==0;     p=-1 else     p=ppr(d) end 

9.4.4 RS Encoder

 
 %GF size n=8; %Random bits mx=ceil(rand(8,239)-0.5); %Initialize code words cw=zeros(8,16); %Get generator polynomial gpoly %Encoding for i=1:239     %Calculate register feedback value     rf=xor(cw(:,1),mx(:,i));     if sum(rf)>0         %Power representation         prf=b2pw8(rf,n,ppr);         for j=1:15             cw(:,j)=xor(p2bin8(gp(j+1)+prf,n,bpr),cw(:,j+1));         end         cw(:,16)=p2bin8(gp(17)+prf,n,bpr);     else         for j=1:15             cw(:,j)=cw(:,j+1);         end         cw(:,16)=zeros(8,1);     end end %Find the power form for i=1:239     mxp(i)=b2pw8(mx(:,i),8,ppr); end for i=1:16     cwp(i)=b2pw8(cw(:,i),8,ppr); end function p=b2pw8(b,n,ppr); b=[0 b']'; p=b2pw(b,n,ppr); function b=p2bin8(p,n,bpr); b=p2bin(p,n,bpr); b=b(2:9)'; 

9.4.5 RS Decoder

 
 %Received word rc=[mx cw]; %Calculate Syndrom synd=zeros(8,16); for i=1:16     for j=1:255         if sum(rc(:,j))~=0             pp=b2pw8(rc(:,j),8,ppr)+i*(255-j);             bpp=p2bin8(pp,8,bpr);             synd(:,i)=xor(synd(:,i),bpp);         end     end end clear rts clear txp %Check if there is error to run the rest of the decoding algorithm if sum(sum(synd))~=0 %Find the error locator polynomial tx=zeros(8,2); tx(8,2)=1; L=0; cnp=zeros(8,1); cnp(8,1)=1; delt=synd(:,1); if sum(delt)~=0     cnp=[[0 0 0 0 0 0 0 1]' delt];     L=1;     tx=p2bin8(255-b2pw8(delt,8,ppr),8,bpr); end tx=[zeros(8,1) tx]; for i=2:m     delt=synd(:,i);     for j=1:L         cnpp=b2pw8(cnp(:,j+1),8,ppr);         syndp=b2pw8(synd(:,i-j),8,ppr);         cnpsynd=p2bin8(cnpp+syndp,8,bpr);         delt=xor(delt,cnpsynd);     end     if sum(delt)~=0         deltp=b2pw8(delt,8,ppr);         [txa,txb]=size(tx);         deltmtx=zeros(txa,txb);         for k=1:txb             txp(k)=b2pw8(tx(:,k),8,ppr);             if txp(k)~=-1                 deltmtx(:,k)=p2bin8(deltp+txp(k),8,bpr);             end         end         cnppr=cnp;         [cnpa,cnpb]=size(cnp);         if cnpb<txb             cnpe=[cnp zeros(8,txb-cnpb)];         else             cnpe=cnp;         end         cnp=xor(cnpe,deltmtx);         if 2*L<i             L=i-L;             clear tx             for k=1:cnpb                 cnpprp=b2pw8(cnppr(:,k),8,ppr);                 cnpddelt=cnpprp-deltp;                 if cnpddelt<0                     cnpddelt=cnpddelt+255;                 end                 tx(:,k)=p2bin8(cnpddelt,8,bpr);             end         end     end     tx=[zeros(8,1) tx]; end %Find roots and error locators [cnpa,cnpb]=size(cnp); for i=1:cnpb     cnpw(i)=b2pw8(cnp(:,i),8,ppr); end rtcnt=0; for i=0:254     cns=[0 0 0 0 0 0 0 1]';     for j=2:cnpb         cns=xor(cns,p2bin8(cnpw(j)+i*(j-1),8,bpr));     end     if sum(cns)==0         rtcnt=rtcnt+1;         rts(rtcnt)=i;     end end %Form the z(x) polynomial zx=[0 0 0 0 0 0 0 1]'; for i=1:length(rts)     zcoe=xor(synd(:,i),cnp(:,i+1));     for j=2:i         pcnsy=b2pw8(synd(:,j-1),8,ppr)+b2pw8(cnp(:,i-j+2),8,ppr);         zcoe=xor(zcoe,p2bin8(pcnsy,8,bpr));     end     zx=[zx zcoe]; end clear zxp [zxa,zxb]=size(zx); for i=1:zxb     zxp(i)=b2pw8(zx(:,i),8,ppr); end %Find Error values clear er for i=1:length(rts)     zxb=[0 0 0 0 0 0 0 1]';     for j=1:length(zxp)-1         zxc=zxp(j+1)+rts(i)*j;         zxcb=p2bin8(zxc,8,bpr);         zxb=xor(zxb,zxcb);     end     zxbp=b2pw8(zxb,8,ppr);     pbb=0;     for j=1:length(rts)         if j~=i             rtsrtsm=rts(i)-rts(j);             if rtsrtsm<0                 rtsrtsm=rtsrtsm+255;             end             blr=xor([0 0 0 0 0 0 0 1]',p2bin8(rtsrtsm,8,bpr));             pbb=pbb+b2pw8(blr,8,ppr);         end     end     er(i)=zxbp-pbb;     for j=1:3         if er(i)<0             er(i)=er(i)+255;         end     end end rts er end 

9.4.6 Convolution Encoder

 
 %Random bits mx=ceil(rand(1,500)-0.5); %Initialize delay line dline=zeros(1,7); for i=1:500     dline(2:7)=dline(1:6);     dline(1)=mx(i);     xy((i-1)*2+1)=xor(xor(xor(dline(1),dline(2)),xor(dline(3),dline(4))),dline(7)); xy(i*2)=xor(xor(xor(dline(1),dline(3)),xor(dline(4),dline(6))),dline(7)); end %Punctuation for i=1:166     xyp((i-1)*4+1)=xy((i-1)*6+1);     xyp((i-1)*4+2)=xy((i-1)*6+2);     xyp((i-1)*4+3)=xy((i-1)*6+4);     xyp(i*4)=xy((i-1)*6+5); end 

9.4.7 Viterbi Decoder

 
 %Generating a lookup table for i=1:64     bn=dec2bin(i-1,6);     zb(2:6)=bn(1:5);     zb(1)='0';     ob(2:6)=bn(1:5);     ob(1)='1';     for j=1:6         bnd(j)=bin2dec(bn(j));     end     obd=1;     zb1=xor(xor(bnd(1),xor(bnd(2),bnd(3))),bnd(6));     zb2=xor(xor(bnd(2),xor(bnd(3),bnd(5))),bnd(6));     tbl(1,i)=zb1*2+zb2;     tbl(2,i)=bin2dec(zb);     ob1=xor(xor(xor(obd,bnd(1)),xor(bnd(2),bnd(3))),bnd(6));     ob2=xor(xor(xor(obd,bnd(2)),xor(bnd(3),bnd(5))),bnd(6));     tbl(3,i)=ob1*2+ob2;     tbl(4,i)=bin2dec(ob); end %Decoding psta=zeros(1,4); psum=zeros(1,4); blenth=2; %Start with zero state to form 4 paths %First stage in1=xy(1); in2=xy(2); zout=tbl(1,1); znxtst=tbl(2,1); oout=tbl(3,1); onxtst=tbl(4,1); zoutb=dec2bin(zout,2); zout1=bin2dec(zoutb(1)); zout2=bin2dec(zoutb(2)); ooutb=dec2bin(oout,2); oout1=bin2dec(ooutb(1)); oout2=bin2dec(ooutb(2)); weiz=xor(zout1,in1)+xor(zout2,in2); weio=xor(oout1,in1)+xor(oout2,in2); psta(1)=znxtst; psta(2)=znxtst; psta(3)=onxtst; psta(4)=onxtst; psum(1)=weiz; psum(2)=weiz; psum(3)=weio; psum(4)=weio; pbits(1,1)=0; pbits(1,2)=0; pbits(1,3)=1; pbits(1,4)=1; %Second stage in1=xy(3); in2=xy(4); zout=tbl(1,psta(1)+1); znxtst=tbl(2,psta(1)+1); oout=tbl(3,psta(1)+1); onxtst=tbl(4,psta(1)+1); zoutb=dec2bin(zout,2); zout1=bin2dec(zoutb(1)); zout2=bin2dec(zoutb(2)); ooutb=dec2bin(oout,2); oout1=bin2dec(ooutb(1)); oout2=bin2dec(ooutb(2)); weiz=xor(zout1,in1)+xor(zout2,in2); weio=xor(oout1,in1)+xor(oout2,in2); psta(1)=znxtst; psta(2)=onxtst; psum(1)=psum(1)+weiz; psum(2)=psum(2)+weio; pbits(2,1)=0; pbits(2,2)=1; zout=tbl(1,psta(3)+1); znxtst=tbl(2,psta(3)+1); oout=tbl(3,psta(3)+1); onxtst=tbl(4,psta(3)+1); zoutb=dec2bin(zout,2); zout1=bin2dec(zoutb(1)); zout2=bin2dec(zoutb(2)); ooutb=dec2bin(oout,2); oout1=bin2dec(ooutb(1)); oout2=bin2dec(ooutb(2)); weiz=xor(zout1,in1)+xor(zout2,in2); weio=xor(oout1,in1)+xor(oout2,in2); psta(3)=znxtst; psta(4)=onxtst; psum(3)=psum(3)+weiz; psum(4)=psum(4)+weio; pbits(2,3)=0; pbits(2,4)=1; %Rest stages for i=3:500     in1=xy((i-1)*2+1);     in2=xy(i*2);     for j=1:4         zout=tbl(1,psta(j)+1);         znxtst(j)=tbl(2,psta(j)+1);         oout=tbl(3,psta(j)+1);         onxtst(j)=tbl(4,psta(j)+1);         zoutb=dec2bin(zout,2);         zout1=bin2dec(zoutb(1));         zout2=bin2dec(zoutb(2));         ooutb=dec2bin(oout,2);         oout1=bin2dec(ooutb(1));         oout2=bin2dec(ooutb(2));         weiz=xor(zout1,in1)+xor(zout2,in2);         weio=xor(oout1,in1)+xor(oout2,in2);         psumz(j)=psum(j)+weiz;         psumo(j)=psum(j)+weio;     end     [ssum,indx]=sort([psumz psumo]);     for j=1:4         if indx(j)<5             psum(j)=psumz(indx(j));             tbits(1:blenth,j)=pbits(:,indx(j));             tbits(blenth+1,j)=0;             psta(j)=znxtst(indx(j));         else             psum(j)=psumo(indx(j)-4);             tbits(1:blenth,j)=pbits(:,indx(j)-4);             tbits(blenth+1,j)=1;             psta(j)=onxtst(indx(j)-4);         end     end     blenth=blenth+1;     pbits=tbits; end 


Home Network Basis(c) Transmission Environments and Wired/Wireless Protocols
Home Networking Basis: Transmission Environments and Wired/Wireless Protocols
ISBN: 0130165115
EAN: 2147483647
Year: 2006
Pages: 97

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net