6.8 MATLAB Files

6.8.1 CRC Process

 
 gx=[1 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0 1 0 0 0 1 1 1 0 1 1 0 1 1 0 1 1 1]; x=ceil(2*rand(1,8000)-1); xs=~x(1:33); for i=1:length(x)-33     if xs(1)~=0         xs=xor(xs,gx);     end     xs(1:32)=xs(2:33);     xs(33)=x(i+33); end fcs=~xs 

6.8.2 Aloha and Slotted Aloha Simulation

 
 %SIMULATION PARAMETERS %simulation for pure Aloha protocol %total simulation time in seconds runtime=0.2; %total number of stations nstation=10; %transmission throughput of the media in bits per second netthrou=10e6; %frame size in bits fsize=8000; %avarage frame arrival rate per second for each station %frate=10; for frate=1:5:150 %average frame arrival rate per simulation iteration trh=frate/10000; %random wait window in number of simulation iterations wwind=100; %EVENTS VARIABLES %transmit active tr=zeros(1,nstation); %transmit queue tq=zeros(1,nstation); %transmit progress counter tcnt=zeros(1,nstation); %collision keeper colis=zeros(1,10000*runtime); %collision station index colin=zeros(1,nstation); %random wait after collision rwait=zeros(1,nstation); %transmit keeper trkeep=zeros(nstation,10000*runtime); %packet arrival keeper pakeep=0; for i=1:10000*runtime for j=1:nstation     %check if the transmitter is active     if tr(j)==1         trkeep(j,i)=1;     end     %check if the packet has been sent      if tcnt(j)>0         tcnt(j)=tcnt(j)-1;         if tcnt(j)==0             tr(j)=0;             %check if the transmission is collision free             if colin(j)==1                 rwait(j)=ceil(wwind*rand(1,1));                 tq(j)=tq(j)+1;                 colin(j)=0;             end         end     else         if tq(j)>0 & rwait(j)==0             tr(j)=1;             tcnt(j)=ceil(fsize/netthrou*10000);             tq(j)=tq(j)-1;         end     end     %check if a new packet has arrived     pa=rand(1,1);     if pa<trh         pakeep=pakeep+1;         %if the transmit is ready         if tr(j)==0 & rwait(j)==0            tr(j)=1;            tcnt(j)=ceil(fsize/netthrou*10000);         else            tq(j)=tq(j)+1;         end     end     %decrease random waiting count     if rwait(j)>0         rwait(j)=rwait(j)-1;     end end %check for collision if sum(tr)>1         colis(i)=1;         for k=1:nstation             if tr(k)==1                 colin(k)=1;             end         end end end px1(frate)=(pakeep-sum(tq)); py1(frate)=pakeep; end g1=[0:0.01:1.2]; s1=g1.*exp(-2*g1); figure(1) plot(px1*8000/runtime,py1*8000/runtime,'x',s1*1e7,g1*1e7,'-') grid xlabel('Throughput (bps)') ylabel('Arrival Rate (bps)') 

6.8.3 Slotted Aloha Simulation

 
 %SIMULATION PARAMETERS %simulation for slotted Aloha protocol %total simulation time in seconds runtime=0.2; %total number of stations nstation=10; %transmission throughput of the media in bits per second netthrou=10e6; %frame size in bits fsize=8000; %avarage frame arrival rate per second for each station %frate=10; for frate=1:5:150 %average frame arrival rate per simulation iteration trh=frate/10000; %random wait window wwind=100; %EVENTS VARIABLES %transmit active tr=zeros(1,nstation); %transmit queue tq=zeros(1,nstation); %transmit progress counter tcnt=zeros(1,nstation); %collision keeper colis=zeros(1,10000*runtime); %collision station index colin=zeros(1,nstation); %random wait after collision rwait=zeros(1,nstation); %transmit keeper trkeep=zeros(nstation,10000*runtime); %packet arrival keeper pakeep=0; for i=1:10000*runtime for j=1:nstation     %check if the transmitter is active     if tr(j)==1         trkeep(j,i)=1;     end     %check if the packet has been sent      if tcnt(j)>0         tcnt(j)=tcnt(j)-1;         if tcnt(j)==0             tr(j)=0;             %check if the transmission is collision free             if colin(j)==1                 rwait(j)=ceil(wwind*rand(1,1));                 tq(j)=tq(j)+1;                 colin(j)=0;             end         end     else         if tq(j)>0 & rwait(j)==0 & mod(i,8)==0             tr(j)=1;             tcnt(j)=ceil(fsize/netthrou*10000);             tq(j)=tq(j)-1;         end     end     %check if a new packet has arrived     pa=rand(1,1);     if pa<trh         pakeep=pakeep+1;         %if the transmit is ready         if tr(j)==0 & rwait(j)==0 & mod(i,8)==0            tr(j)=1;            tcnt(j)=ceil(fsize/netthrou*10000);         else            tq(j)=tq(j)+1;         end     end     %decrease random waiting count     if rwait(j)>0         rwait(j)=rwait(j)-1;     end end %check for collision if sum(tr)>1         colis(i)=1;         for k=1:nstation             if tr(k)==1                 colin(k)=1;             end         end end end px2(frate)=(pakeep-sum(tq)); py2(frate)=pakeep; end g2=[0:0.01:1.2]; s2=g2.*exp(-g2); figure(2) plot(px2*8000/runtime,py2*8000/runtime,'x',s2*1e7,g2*1e7,'-') grid xlabel('Throughput (bps)') ylabel('Arrival Rate (bps)') 

6.8.4 CSMA/CD Simulation

 
 %SIMULATION PARAMETERS %simulation for Ethernet protocol %total simulation time in seconds runtime=0.2; %total number of stations nstation=10; %transmission throughput of the media in bits per second netthrou=10e6; %frame size in bits fsize=8000; %avarage frame arrival rate per second for each station %frate=10; for frate=1:5:150 %average frame arrival rate per simulation iteration trh=frate/10000; %random wait window wwind=100; %EVENTS VARIABLES %transmit active tr=zeros(1,nstation); %transmit active at previous iteration trp=zeros(1,nstation); %transmit queue tq=zeros(1,nstation); %transmit progress counter tcnt=zeros(1,nstation); %collision keeper colis=zeros(1,10000*runtime); %collision station index colin=zeros(1,nstation); %random wait after collision rwait=zeros(1,nstation); %transmit keeper trkeep=zeros(nstation,10000*runtime); %packet arrival keeper pakeep=0; for i=1:10000*runtime %save the media status trp=tr; for j=1:nstation     %check if the transmitter is active     if tr(j)==1         trkeep(j,i)=1;     end     %check if the packet has been sent      if tcnt(j)>0          %check if the transmission is collision free             if colin(j)==1                 rwait(j)=ceil(wwind*rand(1,1));                 tq(j)=tq(j)+1;                 colin(j)=0;                 tcnt(j)=0;             else                 tcnt(j)=tcnt(j)-1;             end         if tcnt(j)==0             tr(j)=0;          end     else         if tq(j)>0 & rwait(j)==0 & sum(trp)==0             tr(j)=1;             tcnt(j)=ceil(fsize/netthrou*10000);             tq(j)=tq(j)-1;         end     end     %check if a new packet has arrived     pa=rand(1,1);     if pa<trh         pakeep=pakeep+1;         %if the transmit is ready         if tr(j)==0 & rwait(j)==0 & sum(trp)==0            tr(j)=1;            tcnt(j)=ceil(fsize/netthrou*10000);         else            tq(j)=tq(j)+1;         end     end     %decrease random waiting count     if rwait(j)>0         rwait(j)=rwait(j)-1;     end end %check for collision sum(tr) if sum(tr)>1         colis(i)=1;         for k=1:nstation             if tr(k)==1                 colin(k)=1;             end         end end end px2(frate)=(pakeep-sum(tq)); py2(frate)=pakeep; end figure(1) plot(px2*8000/runtime,py2*8000/runtime,'x') grid xlabel('Throughput (bps)') ylabel('Arrival Rate (bps)') 

6.8.5 Model RLC Block

 
 function [a,b,c,d]=blockabcd(r1,r2,r3,r4,r5,r6,l,c,f); dm=length(f); j=sqrt(-1); jw=j*2*pi*f; a1=ones(1,dm); b1=r1*ones(1,dm); c1=zeros(1,dm); d1=ones(1,dm); a2=ones(1,dm); b2=r2+l*jw; c2=zeros(1,dm); d2=ones(1,dm); a3=ones(1,dm); b3=r3*ones(1,dm); c3=zeros(1,dm); d3=ones(1,dm); a4=ones(1,dm); b4=r4*ones(1,dm); c4=zeros(1,dm); d4=ones(1,dm); a5=ones(1,dm); b5=zeros(1,dm); c5=ones(1,dm)./(r5+r6./(r6*c*jw+ones(1,dm))); d5=ones(1,dm); a12=(a1.*b2+b1.*a2)./(b1+b2); b12=(b1.*b2)./(b1+b2); c12=((b1+b2).*(c1+c2)-(a1-a2).*(d1-d2))./(b1+b2); d12=(b1.*d2+d1.*b2)./(b1+b2); a34=a3.*a4+b3.*c4; b34=a3.*b4+b3.*d4; c34=c3.*a4+d3.*c4; d34=c3.*b4+d3.*d4; a345=a34.*a5+b34.*c5; b345=a34.*b5+b34.*d5; c345=c34.*a5+d34.*c5; d345=c34.*b5+d34.*d5; a=(a12.*b345+b12.*a345)./(b12+b345); b=(b12.*b345)./(b12+b345); c=((b12+b345).*(c12+c345)-(a12-a345).*(d12-d345))./(b12+b345); d=(b12.*d345+d12.*b345)./(b12+b345); 

6.8.6 100-Meter Category 3 Channel Model

 
 f=[1:1025]/1025*20e6; r1=133; r2=14; r3=95.3; r4=95.3; r5=68.1; r6=649; l=5.6e-6; c=560e-12; [a1,b1,c1,d1]=blockabcd(r1,r2,r3,r4,r5,r6,l,c,f); r1=2320; r2=1; r3=95.3; r4=95.3; r5=3.83; r6=11300; l=0.68e-6; c=68e-12; [a2,b2,c2,d2]=blockabcd(r1,r2,r3,r4,r5,r6,l,c,f); r1=14000; r2=1; r3=95.3; r4=95.3; r5=1; r6=10000; l=0.82e-6; c=82e-12; [a3,b3,c3,d3]=blockabcd(r1,r2,r3,r4,r5,r6,l,c,f); r1=22600; r2=1; r3=95.3; r4=95.3; r5=0; r6=11800; l=0.82e-6; c=82e-12; [a4,b4,c4,d4]=blockabcd(r1,r2,r3,r4,r5,r6,l,c,f); a12=a1.*a2+b1.*c2; b12=a1.*b2+b1.*d2; c12=c1.*a2+d1.*c2; d12=c1.*b2+d1.*d2; a34=a3.*a4+b3.*c4; b34=a3.*b4+b3.*d4; c34=c3.*a4+d3.*c4; d34=c3.*b4+d3.*d4; a1234=a12.*a34+b12.*c34; b1234=a12.*b34+b12.*d34; c1234=c12.*a34+d12.*c34; d1234=c12.*b34+d12.*d34; [imp,h]=abcd2hbk(a1234,b1234,c1234,d1234); figure(1) plot(f,20*log10(abs(h(1:1025)))); grid xlabel('Frequency (Hz)') ylabel('Magnitude (dB)') 

6.8.7 100-Meter Category 3 Cable Model in s Format

 
 %fisrt block r1=133; r2=14; r3=95.3; r4=95.3; r5=68.1; r6=649; l=5.6e-6; c=560e-12; [aa,ba,ca,da,adn]=sablockclc(r1,r2,l); aa=aa(2:3); ba=ba(2:3); ca=ca(2:3); da=da(2:3); adn=adn(2:3); [ab,bb,cb,db,bdn]=sbblockclc(r3,r4,r5,r6,c); [A1,B1,C1,D1,Dn1]=sblockclc(aa,ba,ca,da,adn,ab,bb,cb,db,bdn); %second block r1=2320; r2=1; r3=95.3; r4=95.3; r5=3.83; r6=11300; l=0.68e-6; c=68e-12; [aa,ba,ca,da,adn]=sablockclc(r1,r2,l); aa=aa(2:3); ba=ba(2:3); ca=ca(2:3); da=da(2:3); adn=adn(2:3); [ab,bb,cb,db,bdn]=sbblockclc(r3,r4,r5,r6,c); [A2,B2,C2,D2,Dn2]=sblockclc(aa,ba,ca,da,adn,ab,bb,cb,db,bdn); %third block r1=14000; r2=1; r3=95.3; r4=95.3; r5=1; r6=10000; l=0.82e-6; c=82e-12; [aa,ba,ca,da,adn]=sablockclc(r1,r2,l); aa=aa(2:3); ba=ba(2:3); ca=ca(2:3); da=da(2:3); adn=adn(2:3); [ab,bb,cb,db,bdn]=sbblockclc(r3,r4,r5,r6,c); [A3,B3,C3,D3,Dn3]=sblockclc(aa,ba,ca,da,adn,ab,bb,cb,db,bdn); %fourth block r1=22600; r2=1; r3=95.3; r4=95.3; r5=0; r6=11800; l=0.82e-6; c=82e-12; [aa,ba,ca,da,adn]=sablockclc(r1,r2,l); aa=aa(2:3); ba=ba(2:3); ca=ca(2:3); da=da(2:3); adn=adn(2:3); [ab,bb,cb,db,bdn]=sbblockclc(r3,r4,r5,r6,c); [A4,B4,C4,D4,Dn4]=sblockclc(aa,ba,ca,da,adn,ab,bb,cb,db,bdn); a12=conv(A1,A2)+conv(B1,C2); b12=conv(A1,B2)+conv(B1,D2); c12=conv(C1,A2)+conv(D1,C2); d12=conv(C1,B2)+conv(D1,D2); dn12=conv(Dn1,Dn2); a123=conv(a12,A3)+conv(b12,C3); b123=conv(a12,B3)+conv(b12,D3); c123=conv(c12,A3)+conv(d12,C3); d123=conv(c12,B3)+conv(d12,D3); dn123=conv(dn12,Dn3); a1234=conv(a123,A4)+conv(b123,C4); b1234=conv(a123,B4)+conv(b123,D4); c1234=conv(c123,A4)+conv(d123,C4); d1234=conv(c123,B4)+conv(d123,D4); dn1234=conv(dn123,Dn4); f=[1:200]/200*20e6; hsn=200*dn1234; hsd=100*100*c1234+100*d1234+100*a1234+b1234; h=freqs(hsn,hsd,2*pi*f); figure(1) plot(f,20*log10(abs(h))) grid xlabel('Frequency (Hz)') ylabel('Magnitude (dB)') function [aa,ba,ca,da,adn]=sablockclc(r1,r2,l); a1=1; b1=r1; c1=0; d1=1; dn1=1; a2=[0 1]; b2=[l r2]; c2=[0 0]; d2=[0 1]; dn2=[0 1]; b1pb2=conv(b1,dn2)+conv(b2,dn1); c1pc2=conv(c1,dn2)+conv(c2,dn1); a1ma2=conv(a1,dn2)-conv(a2,dn1); d1md2=conv(d1,dn2)-conv(d2,dn1); b1b2=conv(b1,b2); b1d2pd1b2=conv(b1,d2)+conv(d1,b2); a1b2pb1a2=conv(a1,b2)+conv(b1,a2); dn12=conv(dn1,dn2); adn=conv(b1pb2,dn12); ca=conv(b1pb2,c1pc2)-conv(a1ma2,d1md2); aa=conv(a1b2pb1a2,dn12); ba=conv(b1b2,dn12); da=conv(b1d2pd1b2,dn12); function [ab,bb,cb,db,bdn]=sbblockclc(r3,r4,r5,r6,c); a3=1; b3=r3; c3=0; d3=1; dn3=1; a4=[r6*r5*c r5+r6]; b4=[0 0]; c4=[r6*c 1]; d4=[r6*r5*c r5+r6]; dn4=[r6*r5*c r5+r6]; a5=1; b5=r4; c5=0; d5=1; dn5=1; a34=conv(a3,a4)+conv(b3,c4); b34=conv(a3,b4)+conv(b3,d4); c34=conv(c3,a4)+conv(d3,c4); d34=conv(c3,b4)+conv(d3,d4); dn34=conv(dn3,dn4); ab=conv(a34,a5)+conv(b34,c5); bb=conv(a34,b5)+conv(b34,d5); cb=conv(c34,a5)+conv(d34,c5); db=conv(c34,b5)+conv(d34,d5); bdn=conv(dn34,dn5); function [A1,B1,C1,D1,Dn1]=sblockclc(aa,ba,ca,da,adn,ab,bb,cb,db,bdn); %Parallel matrix calculation bapbb=conv(ba,bdn)+conv(bb,adn); capcb=conv(ca,bdn)+conv(cb,adn); aamab=conv(aa,bdn)-conv(ab,adn); damdb=conv(da,bdn)-conv(db,adn); babb=conv(ba,bb); badbdabb=conv(ba,db)+conv(da,bb); aabbpbaab=conv(aa,bb)+conv(ba,ab); abdn=conv(adn,bdn); dn1=conv(bapbb,abdn); c1=conv(bapbb,capcb)-conv(aamab,damdb); a1=conv(aabbpbaab,abdn); b1=conv(babb,abdn); d1=conv(badbdabb,abdn); %remove zeros at the highest order if a1(1)==0     a1=a1(2:length(a1));     b1=b1(2:length(b1));     c1=c1(2:length(c1));     d1=d1(2:length(d1));     dn1=dn1(2:length(dn1)); end %remove common roots a1norm=a1(1); b1norm=b1(1); c1norm=c1(1); d1norm=d1(1); dn1norm=dn1(1); a1n=a1/a1norm; b1n=b1/b1norm; c1n=c1/c1norm; d1n=d1/d1norm; dn1n=dn1/dn1norm; rtn=roots(a1n); rtd=roots(dn1n); n=0; for i=1:length(rtn)     for j=1:length(rtd)         if abs(rtn(i)-rtd(j))<1e-3             n=n+1;             compoly(n,:)=[1 -rtn(i)];         end     end end       for i=1:n     a1n=deconv(a1n,compoly(i,:));     b1n=deconv(b1n,compoly(i,:));     c1n=deconv(c1n,compoly(i,:));     d1n=deconv(d1n,compoly(i,:));     dn1n=deconv(dn1n,compoly(i,:)); end A1=a1n*a1norm; B1=b1n*b1norm; C1=c1n*c1norm; D1=d1n*d1norm; Dn1=dn1n*dn1norm; 

6.8.8 Four-Pair Category 5 Cable Crosstalk Model in s Format

 
 %first block R11=200e3; R12=18e3; R13=3e3; R14=3e3; R15=0.04e3; R16=200e3; C1=0.35e-12; L1=3.8e-6; a1=1; b1=R11; c1=0; d1=1; dn1=1; a2=[C1 0]; b2=[R12*C1 1]; c2=[0 0]; d2=[C1 0]; dn2=[C1 0]; b1pb2=conv(b1,dn2)+conv(b2,dn1); c1pc2=conv(c1,dn2)+conv(c2,dn1); a1ma2=conv(a1,dn2)-conv(a2,dn1); d1md2=conv(d1,dn2)-conv(d2,dn1); b1b2=conv(b1,b2); b1d2pd1b2=conv(b1,d2)+conv(d1,b2); a1b2pb1a2=conv(a1,b2)+conv(b1,a2); dn12=conv(dn1,dn2); adn=conv(b1pb2,dn12); ca=conv(b1pb2,c1pc2)-conv(a1ma2,d1md2); aa=conv(a1b2pb1a2,dn12); ba=conv(b1b2,dn12); da=conv(b1d2pd1b2,dn12); if adn(3)==0 | ca(3)==0 | ba(3)==0 | aa(3)==0 | da(3)==0     aa=aa(1:2);     ba=ba(1:2);     ca=ca(1:2);     da=da(1:2);     adn=adn(1:2); end a3=1; b3=R13; c3=0; d3=1; dn3=1; a4=[(R15+R16)*L1 R15*R16]; b4=[0 0]; c4=[L1 R16]; d4=[(R15+R16)*L1 R15*R16]; dn4=[(R15+R16)*L1 R15*R16]; a5=1; b5=R14; c5=0; d5=1; dn5=1; a34=conv(a3,a4)+conv(b3,c4); b34=conv(a3,b4)+conv(b3,d4); c34=conv(c3,a4)+conv(d3,c4); d34=conv(c3,b4)+conv(d3,d4); dn34=conv(dn3,dn4); ab=conv(a34,a5)+conv(b34,c5); bb=conv(a34,b5)+conv(b34,d5); cb=conv(c34,a5)+conv(d34,c5); db=conv(c34,b5)+conv(d34,d5); bdn=conv(dn34,dn5); bapbb=conv(ba,bdn)+conv(bb,adn); capcb=conv(ca,bdn)+conv(cb,adn); aamab=conv(aa,bdn)-conv(ab,adn); damdb=conv(da,bdn)-conv(db,adn); babb=conv(ba,bb); badbdabb=conv(ba,db)+conv(da,bb); aabbpbaab=conv(aa,bb)+conv(ba,ab); abdn=conv(adn,bdn); dn=conv(bapbb,abdn); c=conv(bapbb,capcb)-conv(aamab,damdb); a=conv(aabbpbaab,abdn); b=conv(babb,abdn); d=conv(badbdabb,abdn); f=[1:200]/200*40e6; hsn=20000*dn; hsd=10000*10000*c+10000*d+10000*a+b; nnorm=hsn(1); hsnn=hsn/nnorm; rtn=roots(hsnn); dnorm=hsd(1); hsdn=hsd/dnorm; rtd=roots(hsdn); n=0; for i=1:size(rtn)     for j=1:size(rtd)         if abs(rtn(i)-rtd(j))<1e-6             n=n+1;             compoly(n,:)=[1 -rtn(i)];         end     end end for i=1:n     hsnn=deconv(hsnn,compoly(i,:));     hsdn=deconv(hsdn,compoly(i,:)); end h=freqs(hsn,hsd,2*pi*f); hsnn=nnorm*hsnn; hsdn=dnorm*hsdn; ndnorm=hsnn(length(hsnn)); hsnn=hsnn/ndnorm; hsdn=hsdn/ndnorm; h1=freqs(hsnn,hsdn,2*pi*f); cstkmdl=-26+15*log10(f/1e7); figure(1) plot(f,cstkmdl,f,20*log10(abs(h1))) grid xlabel('Frequency (Hz)') ylabel('Magnitude (dB)') 

6.8.9 100BaseT4 PSD Calculation

 
 x=[-2:0.125:2]; pmask=sin(pi*x)./(pi*x).*cos(pi*x)./(1-4*x.^2); pmask(17)=1; pmask(13)=(pmask(12)+pmask(14))/2; pmask(21)=(pmask(20)+pmask(22))/2; [B,A]=butter(3,0.25); pmask=filter(B,A,[pmask 0 0 0 0 0 0 0]); btsq=[3 1 2 2 3 1 2 3 1 3 1 2 3 1 2 3 1 2 1 2 3 3 1 2 1 2 3 2 3 1 2 3 1 1 2 3 3 1 2 1 2 3 1 2 3 1 2 3 1 3 2 2 3 1 2 1 3 3 1 2 1 3 2 3 1 2 3 2 1 3 1 2 3 2 1 2 3 1 2 1 3 1 2 3 1 3 2 1 2 3 3 2 1 1 2 3 3 2 3 1 1 2 3 3 2 1 2 1 3 2 3 1 2 1 2 3 3 1 2 1 2 3 3 1 1 2 3 3 2 2 1 1 3 2 3 2 1 1 2 3 3 2 1 1 2 3 1 2 3 1 2 3 1 2 1 3 2 3 1 3 3 1 2 3 1 2 2 3 2 1 3 2 2 3 2 1 3 3 3 1 2 1 3 2 1 3 2 1 3 2 3 1 2 2 1 3 3 1 1 1 3 2 2 3 3 3 1 2 3 1 3 3 1 2 1 3 2 2 3 2 1 3 2 2 3 2 3 1 2 2 1 2 2 3 1 1 3 3 3 1 1 2 1 3 3 2 1 1 2 3 2 3 1 2 1 3 2 3 2 1 1 3 2 3 2 1 1 3 3 2 1 1 2 2 3 3 1 2 1 2 3 3 2 1 1 2 3 3 3 1 2 2 1 3 2 3 1 1 3 2 3 1 2 1 3 2 1 2 3 1 3 2 1 2 3 2 1 3 2 3 1 3 2 1 3 1 2 3 2 1 1 2 3 3 2 1 1 3 2 2 1 3 2 1 3 1 3 2 1 3 2 1 3 2 3 2 1 1 3 2 3 2 1 2 1 3 2 1 3 3 2 1 1 3 2 3 2 1 3 2 1 3 2 1 3 2 3 2 2 1 3 3 2 2 1 2 3 2 3 2 1 2 2 3 3 2 1 2 2 3 3 2 2 1 3 3 2 1 2 2 3 2 3 1 2 2 2 3 3 1 2 2 2 2 2 3 2 2 2 2 2 1 3 3 2 2 2 3 1 3 2 2 2 3 3 1 2 2 2 1 3 2 2 2 2 1 2 3 2 2 2 3 1 2 2 2 2 3 2 1 3 2 3 1 1 3 3 3 2 1 3 1 3 2 3 1 3 1 2 3 3 1 3 1 2 3 3 1 1 3 3 3 2 3 1 1 3 2 3 3 1 1 2 3 3 3 1 1 3 3 3 2 1 1 3 3 3 1 2 1 3 3 3 1 1 2 3 3 2 1 1 2 3 3 2 1 1 3 3 3 2 2 2 1 1 1 3 3 3 2 2 2 1 3 3 2 2 1 2 3 3 2 2 2 1 3 2 3 2 1 2 3 2 3 1 2 2 3 2 3 1 2 2 3 3 2 2 2 1 2 3 3 2 1 2 2 3 3 1 2 2 2 3 3 1 3 1 3 3 2 1 1 3 3 2 3 1 3 1 3 2 3 3 1 1 3 2 3 3 1 1 3 3 2 1 1 3 2 3 3 1 3 1 2 3 3 3 1 1 2 3 3 1 3 3 2 2 2 3 1 3 2 2 2 3 3 1 2 2 2 2 2 3 2 2 2 1 2 3 2 2 2 2 1 3 2 2 2 3 2 1 2 2 2 2 3 1 2 2 2 2 1 1 3 3 3 1 2 1 3 3 3 1 1 2 3 3 3 1 1 2 3 3 2 3 3 1 2 2 1 2 2 3 2 2 1 3 3 1 1 1 3 2 2 3 1 1 3 3 1 3 2 2 1 3 3 1 2 1 2 3 1 3 2 1 2 1 3 3 2 1 2 1 3 3 2 2 1 3 3 1 1 2 2 3 1 3 1 2 2 1 3 3 1 2 2 2 3 2 2 2 1 2 2 3 2 1 2 2 3 2 2 1 2 3 2 2 2 1 2 3 2 2 2 2 1 2 2 3 1 2 2 2 3 2 1 2 2 3 2 2 1 2 2 3 1 3 1 1 3 3 3 1 1 3 1 3 1 3 1 3 1 1 3 3 1 3 1 1 3 3 1 1 3 3 3 1 3 1 1 3 1 3 3 1 1 1 3 3 3 1 1 2 3 2 1 1 3 2 2 3 1 3 1 2 3 2 1 3 1 3 2 2 1 3 1 3 2 2 1 1 3 2 2 3 3 1 1 2 3 2 3 1 1 3 2 2 3 1 1 2 1 2 3 3 1 2 2 1 3 1 3 2 1 2 3 1 3 1 2 2 3 1 3 1 2 2 3 3 1 2 2 1 1 3 3 2 1 2 1 3 3 1 2 2 1 3 3 1 3 1 3 3 1 1 1 3 3 1 3 1 3 1 3 1 3 3 1 1 3 1 3 3 1 1 3 3 1 1 1 3 1 3 3 1 3 1 1 3 3 3 1 1 1 3 3 2 1 2 2 2 3 2 2 1 2 3 2 2 1 2 2 3 2 1 2 2 2 3 2 1 2 2 2 2 3 2 2 1 3 2 2 2 1 2 3 2 2 1 2 2 3 2 2 1 3 1 2 2 3 1 1 3 2 3 2 1 3 1 2 3 2 3 1 1 2 3 2 3 1 1 2 2 3 1 1 3 3 2 2 1 3 1 3 2 2 3 1 1 3 2 2 3 1 3 2 3 1 3 3 1 3 1 2 3 1 3 3 1 2 1 3 3 3 1 2 1 3 3 2 3 1 3 3 1 1 2 3 3 1 3 1 2 3 1 3 3 1 2 3 2 3 2 2 3 1 2 2 3 3 1 2 2 3 2 3 1 2 3 2 2 3 1 2 3 2 2 2 3 1 2 2 3 1 2 3 2 3 2 1 2 3 3 2 2 1 2 3 3 1 3 2 1 3 3 3 1 1 3 2 3 1 3 1 3 2 1 3 3 1 3 2 1 3 3 2 1 3 3 3 1 3 2 1 3 1 3 3 2 1 1 3 3 3 2 1 2 3 2 2 1 3 2 2 3 1 3 2 2 3 2 1 3 2 3 2 2 1 3 2 3 2 2 2 1 3 2 2 3 3 2 1 2 3 2 3 2 1 3 2 2 3 2 1 3 1 2 3 3 1 2 3 1 3 1 3 3 1 2 3 1 3 1 2 3 3 1 3 1 2 3 3 3 1 2 3 1 1 3 3 3 1 2 1 3 3 1 2 3 1 3 3 1 3 2 3 3 1 2 1 3 3 1 3 1 3 2 3 1 3 3 2 1 3 1 3 3 2 1 3 3 1 2 1 3 1 3 3 1 3 2 1 3 3 3 2 1 1 3 3 3 1 2 2 2 3 2 3 1 2 3 2 3 1 2 2 3 2 1 2 3 2 3 2 1 2 3 2 2 3 2 3 1 3 2 2 3 1 2 3 2 2 1 2 3 3 2 2 1 3 2 2 2 3 2 1 3 2 3 2 1 3 2 2 3 2 3 2 1 2 3 2 3 2 1 2 2 3 2 1 3 3 2 2 1 3 2 3 2 2 3 2 1 3 2 2]; pspc=zeros(1,1024); pspc1=zeros(1,1024); for i=1:256     swave=zeros(1,24);     swave1=zeros(1,84);     for j=1:6         swindx=(j-1)*4+1;         swindx1=(j-1)*8+1;         if btsq(i,j)==1             swave(swindx:swindx+3)=-ones(1,4); swave1(swindx1:swindx1+39)=swave1(swindx1:swindx1+39)-pmask;         end         if btsq(i,j)==3             swave(swindx:swindx+3)=ones(1,4); swave1(swindx1:swindx1+39)=swave1(swindx1:swindx1+39)+pmask;         end     end     pspc=pspc+abs(fft(swave,1024));     pspc1=pspc1+abs(fft(swave1,1024)); end pspc=pspc/256; pspc=pspc.^2*3.5^2/100/0.001/25e6/24; pspc1=pspc1/256; pspc1=pspc1.^2*3.5^2/100/0.001/25e6/48; px=[1:512]/512*5e7; px1=[1:256]/256*5e7; py1=10*log10(abs(pspc(1:512))); py2=10*log10(abs(pspc1(1:256))); figure(2) plot(px,py1,px1,py2) grid xlabel('Frequency (Hz)') ylabel('Magnitude (dBm/Hz)') 

6.8.10 Channel Capacity Calculation for the 100BaseT4 Environment

 
 schannel2 t4mask absh=20*log10(abs(h(1:256))); logpsd=10*log10(pspc1(1:256)); rcv=logpsd+absh; PCS=21.4-15*log10(f/12.5e6); crsn=logpsd-PCS; SNR=absh+PCS; for i=1:256     if rcv(i)<-140         rcv(i)=-140;     end end for i=1:256     if crsn(i)<-140         crsn(i)=-140;     end end plot(f,rcv,f,crsn) capci=sum(log2(1+10.^(SNR/10)))*25e6/256 

6.8.11 100BaseTX PSD Calculation

 
 %lowpass filter in s domain r1=1210; c1=56e-12; c2=180e-12; l1=700e-9; l2=900e-9; m1a=1; m1b=0; m1c=1/r1; m1d=1; m2a=[0 1]; m2b=[0 0]; m2c=[c1 0]; m2d=[0 1]; m3a=[0 1]; m3b=[l1 0]; m3c=[0 0]; m3d=[0 1]; m4a=[0 1]; m4b=[0 0]; m4c=[c2 0]; m4d=[0 1]; m5a=[0 1]; sm5b=[l2 0]; m5c=[0 0]; m5d=[0 1]; m6a=m4a; m6b=m4b; m6c=m4c; m6d=m4d; m7a=m3a; m7b=m3b; m7c=m3c; m7d=m3d; m8a=m2a; m8b=m2b; m8c=m2c; m8d=m2d; m12a=m1a*m2a+m1b*m2c; m12b=m1a*m2b+m1b*m2d; m12c=m1c*m2a+m1d*m2c; m12d=m1c*m2b+m1d*m2d; m13a=conv(m12a,m3a)+conv(m12b,m3c); m13b=conv(m12a,m3b)+conv(m12b,m3d); m13c=conv(m12c,m3a)+conv(m12d,m3c); m13d=conv(m12c,m3b)+conv(m12d,m3d); m14a=conv(m13a,m4a)+conv(m13b,m4c); m14b=conv(m13a,m4b)+conv(m13b,m4d); m14c=conv(m13c,m4a)+conv(m13d,m4c); m14d=conv(m13c,m4b)+conv(m13d,m4d); m15a=conv(m14a,m5a)+conv(m14b,m5c); m15b=conv(m14a,m5b)+conv(m14b,m5d); m15c=conv(m14c,m5a)+conv(m14d,m5c); m15d=conv(m14c,m5b)+conv(m14d,m5d); m16a=conv(m15a,m6a)+conv(m15b,m6c); m16b=conv(m15a,m6b)+conv(m15b,m6d); m16c=conv(m15c,m6a)+conv(m15d,m6c); m16d=conv(m15c,m6b)+conv(m15d,m6d); m17a=conv(m16a,m7a)+conv(m16b,m7c); m17b=conv(m16a,m7b)+conv(m16b,m7d); m17c=conv(m16c,m7a)+conv(m16d,m7c); m17d=conv(m16c,m7b)+conv(m16d,m7d); m18a=conv(m17a,m8a)+conv(m17b,m8c); m18b=conv(m17a,m8b)+conv(m17b,m8d); m18c=conv(m17c,m8a)+conv(m17d,m8c); m18d=conv(m17c,m8b)+conv(m17d,m8d); f=[1:1024]/1024*2.5e8; hsn=200; hsd=100*100*m18c+100*m18d+100*m18a+m18b; hf=freqs(hsn,hsd,2*pi*f); loghf=20*log10(abs(hf)); %calculating PSD x=ceil(rand(256,256)*2-1); t4b5b=[1 1 1 1 0 0 1 0 0 1 1 0 1 0 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 1 0 1 1 1 0 0 1 1 1 1 1 0 0 1 0 1 0 0 1 1 1 0 1 1 0 1 0 1 1 1 1 1 0 1 0 1 1 0 1 1 1 1 1 0 0 1 1 1 0 1]; pspc=zeros(1,2048); for i=1:256     %4b5b encoding     for j=1:4:256         xin=x(i,j:j+3);         xind=xin(1)*8+xin(2)*4+xin(3)*2+xin(4)+1;         xout=t4b5b(xind,:);         jj=1+(j-1)/4*5;         y(jj:jj+4)=xout;     end     xlin=zeros(1,321);     slv=0;     %MLT3 encoding     for j=1:320         if y(j)==1             if slv==0                 xlin(j+1)=xlin(j)+1;                 if xlin(j+1)>1                     slv=1;                     xlin(j+1)=0;                 end             else                 xlin(j+1)=xlin(j)-1;                 if xlin(j+1)<-1                     slv=0;                     xlin(j+1)=0;                 end             end         else             xlin(j+1)=xlin(j);         end     end     %To four times of sampling rate with proper rising time     xlinl=zeros(1,1281);     for j=1:319         xlinl(j*4+1:j*4+5)=xlinl(j*4+1:j*4+5)+xlin(j+1)*[0.5 1 1 1 0.5];     end     pspc=pspc+abs(fft(xlinl,2048)); end pspc=pspc/256; pspc=pspc.^2/100/0.001/125e6/4; figure(1) logpspc=10*log10(pspc(1:1024)); loghfpspc=loghf+logpspc; for i=1:1024     if loghfpspc(i)<-100         loghfpspc(i)=-100;     end end plot(f(1:511),logpspc(1:511),f(1:511),loghfpspc(1:511)) grid xlabel('Frequency (Hz)') ylabel('PSD (dBm/Hz)') 

6.8.12 Channel Capacity Calculation for the 100BaseTX Environment

 
 a=7.26e-7; b=4.56e-12; f=[1:1024]/1024*2.5e8; d4=300; H4=-8.68*d4*(a*sqrt(f)+b*f); C1=-35+15*log10(f/16e6); txmask rcv=loghfpspc+H4; crsn=loghfpspc+C1; SNR=H4-C1; figure(1) plot(f(1:200),rcv(1:200),f(1:200),crsn(1:200)) grid xlabel('Frequency (Hz)') ylabel('PSD (dBm/Hz)') figure(2) plot(f(1:200),SNR(1:200)) grid xlabel('Frequency (Hz)') ylabel('SNR (dB)') capci=sum(log2(1+10.^(SNR(1:200)/10)))*5e7/200 

6.8.13 100BaseTX Descrambler Synchronization

 
 %generating idle sequence of all 1's x=ones(2048,1); %Initialize the scrambling key s=[1 0 0 0 0 0 0 0 0 0 0 0]; %generating scrambled idle stream for i=1:2048 s(2:12)=s(1:11); s(1)=xor(s(12), s(10)); y(i)=xor(x(i), s(1)); end %initialize scrambled sequence c=y(1:11); i=11; sync=0; %reset hypothesis h=[0 0 0 0 0 0 0 0 0 0 0]; while sync==0     i=i+1     %update scrambled sequence     c(2:12)=c(1:11);     c(1)=y(i);     %update hypothesis     h(2:11)=h(1:10);     h(1)=xor(c(1), xor(c(10), c(12)));     %pattern match     if h==[1 1 1 1 1 1 1 1 1 1 1]         d=xor(c(1:11), h)         sync=1;     end end %descramble the idle stream for j=i:2048     d(2:12)=d(1:11);     d(1)=xor(d(12), d(10));     xx(j)=xor(y(j), d(1)); end 

6.8.14 100BaseT2 PSD Calculation

 
 %calculating PSD pspc=zeros(1024,1); pspcf=zeros(1024,1); for ii=1:256 x=ceil(rand(256,3)*2-1); for i=1:256     if x(i,1)==0          xa=-1;         xb=0;     else         xa=1;         xb=-2;     end     if x(i,2)==0         xl(i)=xa;     else         xl(i)=xb;     end     if x(i,3)==1         xl(i)=xl(i)*(-1);     end end xl=0.9*xl; xll=zeros(1024,1); xll(1:4:1024)=xl; tfilt=[0.36 0.8 1 0.75 0.26]; xlf=conv(xll,tfilt); xll(2:4:1024)=xl; xll(3:4:1024)=xl; xll(4:4:1024)=xl;     pspc=pspc+abs(fft(xll,1024));     pspcf=pspcf+abs(fft(xlf(3:1026),1024)); end pspc=pspc/256; pspc=pspc.^2/100/0.001/5e7/4; pspcf=pspcf/256; pspcf=pspcf.^2/100/0.001/5e7/4; figure(1) logpspc=10*log10(pspc(1:513)); logpspcf=10*log10(pspcf(1:513)); f=[1:513]/513*5e7; plot(f,logpspc,f,logpspcf) grid xlabel('Frequency (Hz)') ylabel('PSD (dBm/Hz)') 

6.8.15 100BaseT2 Channel, NEXT, and FEXT Models

 
 a=1.537e-6; b=4.55e-12; f=[1:513]/513*100e6; l=100; j=sqrt(-1); H=exp(-((1+j)*a*sqrt(pi.*f)+b*2*pi*f)*l).*10^(-1.2/20); figure(1) plot(f(1:128),20*log10(abs(H(1:128)))) H(1024:-1:514)=real(H(2:512))-j*imag(H(2:512)); ht=real(ifft(H)); figure(2) plot([1:100]/200e6,ht(1:100)); NEXT=19.3-16.6*log10(f/16e6); FEXT=20.9-20*log10(f/16e6); figure(3) plot(f(1:128),-NEXT(1:128),f(1:128),-FEXT(1:128)) grid xlabel('Frequency (Hz)') ylabel('Crosstalk Losses (dB)') 

6.8.16 Channel Capacity Calculation for the 100BaseT2 Environment

 
 t2mask cat3channel logh=20*log10(abs(H(1:513))); SNR=logh+FEXT; figure(1) plot(f,SNR) capci=sum(log2(1+10.^(SNR/10)))*100e6/513 figure(2) plot(f,logh'+logpspcf,f,logpspcf-FEXT') 


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