%*******************************************************************
% This codes was written for simulation of probabilistic voter
% introduced in the paper of "Fault Masking Vith Probabilistic Voter"
%
% Autor: B. Baykant ALAGZ
% Ver.1.0 date: 07.2008
%******************************************************************
clear
NumOfTestInput=5000;
for p=1:50
HataOlasilik(p)=p*0.01;
HataMatrix=zeros(NumOfTestInput,3);
for i=0:NumOfTestInput
Gir=mod(i,15);
if (Gir==0)
A(1)=0;A(2)=0;A(3)=0;A(4)=0;
elseif (Gir==1)
A(1)=0;A(2)=1;A(3)=0;A(4)=1;
elseif (Gir==2)
A(1)=0;A(2)=0;A(3)=1;A(4)=0;
elseif (Gir==3)
A(1)=0;A(2)=0;A(3)=1;A(4)=1;
elseif (Gir==4)
A(1)=0;A(2)=1;A(3)=0;A(4)=0;
elseif (Gir==5)
A(1)=0;A(2)=1;A(3)=0;A(4)=1;
elseif (Gir==6)
A(1)=0;A(2)=1;A(3)=1;A(4)=0;
elseif (Gir==7)
A(1)=0;A(2)=1;A(3)=1;A(4)=1;
elseif (Gir==8)
A(1)=1;A(2)=0;A(3)=0;A(4)=0;
elseif (Gir==9)
A(1)=1;A(2)=0;A(3)=0;A(4)=1;
elseif (Gir==10)
A(1)=1;A(2)=0;A(3)=1;A(4)=0;
elseif (Gir==11)
A(1)=1;A(2)=0;A(3)=1;A(4)=1;
elseif (Gir==12)
A(1)=1;A(2)=1;A(3)=0;A(4)=0;
elseif (Gir==13)
A(1)=1;A(2)=1;A(3)=0;A(4)=1;
elseif (Gir==14)
A(1)=1;A(2)=1;A(3)=1;A(4)=0;
elseif (Gir==15)
A(1)=1;A(2)=1;A(3)=1;A(4)=1;
end
A(1)=round(rand);A(2)=round(rand);A(3)=round(rand);A(4)=round(rand);
% ******** Thruth Table************
% A4 | A3 | A2 | A1 | F |
%--------------------------
% 0 0 0 0 0
% 0 0 0 1 0
% 0 0 1 0 0
% 0 0 1 1 0
% 0 1 0 0 0
% 0 1 0 1 0
% 0 1 1 0 0
% 0 1 1 1 0
% 1 0 0 0 0
% 1 0 0 1 0
% 1 0 1 0 0
% 1 0 1 1 0
% 1 1 0 0 1
% 1 1 0 1 0
% 1 1 1 0 1
% 1 1 1 1 0
% ************************************
% If probability of F=1 being an error is to N(0)/2^n=12/16
% If probability of F=0 being an error is to N(1)/2^n=4/16
E1=14/16;
E0=2/16;
%F function yeilding correct results
net1=(A(4)) & (A(3)) & (A(2)) & (~A(1));
net2=(A(4)) & (A(3)) & (~A(2)) & (~A(1));
net5corr= net1 | net2;
%F function yeilding correct results
net1=(A(4)) & (A(3)) & (A(2)) & (~A(1));
net1=randomHataConv(HataOlasilik(p),net1);
net2=(A(4)) & (A(3)) & (~A(2)) & (~A(1));
net2=randomHataConv(HataOlasilik(p),net2);
net7= net1 | net2;
netTMR1=randomHataConv(HataOlasilik(p),net7);
%F function yeilding correct results
net1=(A(4)) & (A(3)) & (A(2)) & (~A(1));
net1=randomHataConv(HataOlasilik(p),net1);
net2=(A(4)) & (A(3)) & (~A(2)) & (~A(1));
net2=randomHataConv(HataOlasilik(p),net2);
net7= net1 | net2;
netTMR2=randomHataConv(HataOlasilik(p),net7);
%F function yeilding correct results
net1=(A(4)) & (A(3)) & (A(2)) & (~A(1));
net1=randomHataConv(HataOlasilik(p),net1);
net2=(A(4)) & (A(3)) & (~A(2)) & (~A(1));
net2=randomHataConv(HataOlasilik(p),net2);
net7= net1 | net2 ;
netTMR3=randomHataConv(HataOlasilik(p),net7);
Sum=netTMR1+netTMR2+netTMR3;
if (Sum/2)>0.5
Net3MR=1;
else
Net3MR=0;
end
% E1=11/16;
% E0=5/16;
if netTMR1==0 && netTMR2==0 && netTMR3==0
LAMR=0;
elseif netTMR1==0 && netTMR2==0 && netTMR3==1
LAMR=0;
elseif netTMR1==0 && netTMR2==1 && netTMR3==0
LAMR=0;
elseif netTMR1==0 && netTMR2==1 && netTMR3==1
LAMR=0;
elseif netTMR1==1 && netTMR2==0 && netTMR3==0
LAMR=0;
elseif netTMR1==1 && netTMR2==0 && netTMR3==1
LAMR=0;
elseif netTMR1==1 && netTMR2==1 && netTMR3==0
LAMR=0;
elseif netTMR1==1 && netTMR2==1 && netTMR3==1
LAMR=1;
end
if net5corr~=netTMR1
HataMatrix(i+1,1)=1;
end
if net5corr~=Net3MR
HataMatrix(i+1,2)=1;
end
if net5corr~=LAMR
HataMatrix(i+1,3)=1;
end
end
[a b]=size(HataMatrix);
NumOfErrAt01=0;
NumOfErrAtTMR=0;
NumOfErrAtLAMR=0;
for satir=1:a
if HataMatrix(satir,1)==1
NumOfErrAt01=NumOfErrAt01+1;
end
if HataMatrix(satir,2)==1
NumOfErrAtTMR=NumOfErrAtTMR+1;
end
if HataMatrix(satir,3)==1
NumOfErrAtLAMR=NumOfErrAtLAMR+1;
end
end
HistNumOfErrAt01(p)=NumOfErrAt01;
HistNumOfErrAtTMR(p)=NumOfErrAtTMR;
HistNumOfErrAtLAMR(p)=NumOfErrAtLAMR;
Availability011(p)=(NumOfTestInput-NumOfErrAt01)/NumOfTestInput;
AvailabilityTMR(p)=(NumOfTestInput-NumOfErrAtTMR)/NumOfTestInput;
AvailabilityLAMR(p)=(NumOfTestInput-NumOfErrAtLAMR)/NumOfTestInput;
fprintf('** Simulated for error probability of the %f \n',HataOlasilik(p));
end
figure
plot(HataOlasilik,HistNumOfErrAt01,'k-.',HataOlasilik,HistNumOfErrAtTMR,'k-',HataOlasilik,HistNumOfErrAtLAMR,'k-*')
legend('Faulty Module','TMR with majority voter','TMR with probabilistic voter')
title('Comparation Of Fault Tolerence Performances');
xlabel('Error Probability For Wire');
ylabel('Number Of Error');
figure
plot(HataOlasilik,Availability011,'k-.',HataOlasilik,AvailabilityTMR,'k-',HataOlasilik,AvailabilityLAMR,'k-*')
legend('Faulty Module','TMR with majority voter','TMR with probabilistic voter')
xlabel('Error Probability For Wires');
ylabel('Availability ');