how to mix the result of 3 programs (3 curves) in a single figure contains all of these curves?
Afficher commentaires plus anciens
the first program :
l=100000; %L length of si the input one dimension array
nni=randn(1,l);%generate L by L array of random scalare
si=randsrc(1,l,[+1,-1;.5,.5]);%generate 1 by L array of -1&+1
snr=[0:15];
for i=1:16
errorcounter=0;
stdn=sqrt(10^(-snr(i)/10))
ni=nni*stdn;% ni is 1 by L dimension
for m=1:l
ri(m)=ni(m)+si(m);
if ri(m)>0
sdi(m)=1;
elseif ri(m)<=0
sdi(m)=-1;
end
if sdi(m)~=si(m)
errorcounter=errorcounter+1;
end
end
ber(i)=errorcounter/l
end
semilogy(snr,ber,'r') xlabel('snr db');ylabel('ber');grid;
the second program :
L=100000;
n=3;
input=rand(1,L)>0.5; %generate a 1 by L matrix of 0,1
out=reshape(repmat(input,n,1),1,[]); %repeat each bit 3 times in row and 1 bit in col ENCODING
for i=1:(n*L)
if out(i)==1
si(i)=1;
else si(i)=-1;
end
end %******* mapping to -1 , +1 Si is 1 BY 3L
nni=randn(1,n*L); %generate 1 by 3L random psn matrix
snr=[0:15]
for b=1:16
errorcounter=0;
stdn=sqrt(10^(-snr(b)/10));
ni=nni*stdn;
for m=1:(n*L)
ri(m)=ni(m)+si(m);
if ri(m)>0
sdi(m)=1;
output(m)=1;
else sdi(m)=-1;
output(m)=0;
end
end
for hh=1:n:n*L
z=0;o=0;
for h=hh:hh+n-1
if output(h)==0
z=z+1;
else o=o+1;
end
end
if z>o output(hh)=0;
else output(hh)=1;
end
end
a=reshape(output,n,L);
bb=a(1,:);
for w=1:L
if bb(w)~=input(w)
errorcounter=errorcounter+1;
end
end
ber(b)=errorcounter/L;
end
semilogy(snr,ber)
xlabel('snr');ylabel('ber');grid;
the 3rd program is:
%% TCM PROGRAM
a=1/(2^(1/2));
arr=[0 0 0 0 0 0 0 0 0 1 0;0 1 0 0 1 0 0 1 0 0 1;1 0 0 0 0 0 1 0 0 -1 0;1 1 0 0 1 0 1 1 0 0 -1;0 0 0 1 0 0 0 1 0 0 1;0 1 0 1 1 0 0 0 0 1 0;1 0 0 1 0 0 1 1 0 0 -1;1 1 0 1 1 0 1 0 0 -1 0;0 0 1 0 0 1 0 0 1 a a;0 1 1 0 1 1 0 1 1 -a a;1 0 1 0 0 1 1 0 1 -a -a;1 1 1 0 1 1 1 1 1 a -a;0 0 1 1 0 1 0 1 1 -a a;0 1 1 1 1 1 0 0 1 a a;1 0 1 1 0 1 1 1 1 a -a;1 1 1 1 1 1 1 0 1 -a -a];
costs=[1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4];
newdata=[0 2 0 2 0 2 0 2 1 3 1 3 1 3 1 3];
ARR=[0 0 1 0 0;1 0 0 1 2;2 0 -1 0 0;3 0 0 -1 2;0 1 0 1 0;1 1 1 0 2;2 1 0 -1 0;3 1 -1 0 2;0 2 a a 1;1 2 -a a 3;2 2 -a -a 1;3 2 a -a 3;0 3 -a a 1;1 3 a a 3;2 3 a -a 1;3 3 -a -a 3];
L=100000;
snr=[0:15];
for SNR =1:16
stdn=sqrt((1/4)*10^(-snr(SNR)/10));
transmitted=[];
nstate1=0;
nstate2=0;
REAL=[];
IMAGINARY=[];
for i=1:L
input=randi(2,1,2)-1; % 2 is max num , 1 row , 2 col. will generate array 1x2 with numbers from 1 to 2, to make it from 0 to 1
transmitted=[transmitted,input];
pstate1=nstate1;
pstate2=nstate2;
for i=1:16
if (arr(i,1)==input(1,1)) && (arr(i,2)==input(1,2)) && (arr(i,3)==pstate1) && (arr(i,4)==pstate2)
ii = i;
end
end
nstate1=arr(ii,5);
nstate2=arr(ii,6);
sireal=arr(ii,10);
siimag=arr(ii,11);
REAL=[REAL,sireal];
IMAGINARY=[IMAGINARY,siimag];
end
si=complex(REAL,IMAGINARY);
nni=complex(randn(1,L),randn(1,L));
ni=nni*stdn;
ri = ni + si;
decoded=[]; % decoding
vec=zeros(4,8);
vecc=zeros(16,8);
prstate=zeros(4,1); % true present state of next state
cost(1)=0;
cost(2:4)=20;
for m = 1:L
for states = 1:4
for curstate = 1:4 %%expanding from 4 to 16 vectors
k =(states-1)*4 + curstate ;
vecost=costs(k);
vecc(k,1:7)=vec(vecost,1:7);
vecc(k,8)=newdata(k);
initcost(k)=cost(costs(k));
prstate(k)=costs(k) - 1;
for z = 1:16
if ARR(z,1) == vecc(k,8) && ARR(z,2) == prstate(k)
rreal=ARR(z,3);
iimaginary=ARR(z,4);
end
end
ed = sqrt((real(ri(m))-rreal)^2 + (imag(ri(m))-iimaginary)^2);
mycost(k)=initcost(k)+ ed; %%16 costs
end
end
for n=1:4 %%from 16 vectors to 4 vectors
nn=(n-1)*4+1:(n-1)*4+4;
[costt,iindex]=min(mycost(nn));
TrueVector = iindex +(n-1)*4 ;
vec(n,1:7)=vecc(TrueVector,2:8);
cost(n)=mycost(TrueVector);
end
if m>6
[final_mincost,indexx]=min(cost); %%choosing the vector of the minimum cost
decimal=vec(indexx,1);
decoded=[decoded,decimal];
for i=1:4
cost(i)=cost(i)-final_mincost; %%this will make my chosen vector's cost=0
end
end
end
DATA=[];
for kk=1:length(decoded)
binary=de2bi(decoded(kk),2,'left-msb');
DATA=[DATA,binary];
end
errorcounter=0;
for o=1:(length(transmitted)-2*6)
if transmitted(o)~=DATA(o);
errorcounter=errorcounter+1;
end
end
ber(SNR)=errorcounter/(2*(L-6));
end
semilogy(snr,ber) grid;xlabel('SNR');ylabel('BER');
Réponse acceptée
Plus de réponses (1)
pradeep
le 7 Mai 2014
0 votes
Catégories
En savoir plus sur Descriptive Statistics dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!