image thumbnail
from Fault Masking By Probabilistic Voting by Baykant ALAGOZ
Probabilistic voter simulation for Multi-Modular Redundancy

testForTMR.m
%*******************************************************************
% 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 ');

Contact us at files@mathworks.com