Code covered by the BSD License  

Highlights from
Adaptive Fault Masking With Incoherence Scoring

image thumbnail
from Adaptive Fault Masking With Incoherence Scoring by Baykant ALAGOZ
Matlab simulation environment for testing various voting algorithms

testSinusHamDistFullAdder16AllVoterArdisil.m
%*******************************************************************
% Simulation for Adaptive Voters Explanied In  the "Adaptive Fault Masking With
% Incoherence Scoring".
% It runs 5MR test scenario for Falut Masking Algorithms supporting
% 16 bit Full Adder modules.
%
% Programmer: B. Baykant ALAGZ
% Ver.1.0 date: 07.2008
%******************************************************************

clear
% Simulation presetings.
NumberOfBitAtInputs=16; % Numbers of bits in each input
TestNumber=10000; % Number of input processed by system.
TestGrupNumber=6; % Number of test sessions in the test scenario
% Adaptive voter with inchorence scoring regulation parameter 
Alfa=0.1;
Beta=0.3;
BetaDynamic=0.3;
AlfaDynamic=0.1;
%Fault status of 5 modules (n1,n2,n3,n4,n5) to 5MR test scenario
n1=1; % 1: Faulty modules 0: Fault free modules
n2=0; % 1: Faulty modules 0: Fault free modules
n3=0; % 1: Faulty modules 0: Fault free modules
n4=0; % 1: Faulty modules 0: Fault free modules
n5=0; % 1: Faulty modules 0: Fault free modules

% Inchorence History Rs declerations for 5 modules
Rs=[0 0 0 0 0];
Rsb=[0 0 0 0 0];
RsbDynamic=[0 0 0 0 0];
% Adaptive Majority Voter declerations for 5 modules
H=[0 0 0 0 0];

% Consensus thresholds for majority voters.
aIc=3; 
aMaj=3;


% Reseting statistical variables
IncorrectAdaptIncScore=zeros(TestGrupNumber,1);
IncorrectAdaptMaj=zeros(TestGrupNumber,1);
IncorrectConMaj=zeros(TestGrupNumber,1);
IncorrectModule1=zeros(TestGrupNumber,1);
IncorrectModule2=zeros(TestGrupNumber,1);
IncorrectModule3=zeros(TestGrupNumber,1);
IncorrectModule4=zeros(TestGrupNumber,1);
IncorrectModule5=zeros(TestGrupNumber,1);
IncorrectAdaptIncScoreBitByBit=zeros(TestGrupNumber,1);
IncorrectConMajBitByBit=zeros(TestGrupNumber,1);
IncorrectAdaptIncScoreBitByBitDynamic=zeros(TestGrupNumber,1);

for j=1:TestGrupNumber
  % Test test sessions in the test senario 5MR
  if j==1
      n1=0;%0: Fault fress modules
      n2=0;%0: Fault fress modules
      n3=0;%0: Fault fress modules
      n4=0;%0: Fault fress modules
      n5=0;%0: Fault fress modules
      % (NNNNN)
  elseif j==2
      n1=1;%1: Faulty modules
      n2=0;%0: Fault fress modules
      n3=0;%0: Fault fress modules
      n4=0;%0: Fault fress modules
      n5=0;%0: Fault fress modules
      % (FNNNN)
  elseif j==3
      n1=1;%1: Faulty modules
      n2=1;%1: Faulty modules
      n3=0;%0: Fault fress modules
      n4=0;%0: Fault fress modules
      n5=0;%0: Fault fress modules
      % (FFNNN)
  elseif j==4
      n1=1;%1: Faulty modules
      n2=1;%1: Faulty modules
      n3=1;%1: Faulty modules
      n4=0;%0: Fault fress modules
      n5=0;%0: Fault fress modules
      % (FFFNN)
  elseif j==5
      n1=1;%1: Faulty modules
      n2=1;%1: Faulty modules
      n3=1;%1: Faulty modules
      n4=1;%1: Faulty modules
      n5=0;%0: Fault fress modules
      % (FFFFN)
   elseif j==6
      n1=1;%1: Faulty modules
      n2=1;%1: Faulty modules
      n3=1;%1: Faulty modules
      n4=1;%1: Faulty modules
      n5=1;%1: Faulty modules
      % (FFFFF)
  end
  
fprintf('Test Seassion: %d \n',j);
% TestNumber inputs applied to system to calculate correct results
for i=1:TestNumber
    %Random input generation process
    a(i)=round(65536*rand);
    b(i)=round(65536*rand);
    for k=1:NumberOfBitAtInputs
        Ab(k)=bitget(a(i),k);
        Bb(k)=bitget(b(i),k);
    end 
    % Random input vectors are applied to healty full adder
    [Sc Cc]=fullAdder16(Ab,Bb,0,0);
    % Random input vectors are applied to tested modules
    [S1 C1]=fullAdder16F1(Ab,Bb,0,n1);
    [S2 C2]=fullAdder16F2(Ab,Bb,0,n2);
    [S3 C3]=fullAdder16F3(Ab,Bb,0,n3);
    [S4 C4]=fullAdder16F4(Ab,Bb,0,n4);
    [S5 C5]=fullAdder16F5(Ab,Bb,0,n5);
    
    % Adaptive voters:
    % Adaptive Voter with incoherence scoring using Majority Grouping Vm technique (Word Votering)described in Reference [12] and
    %  in the paper (page:4 Title:Majority Voter Using Distance Metric)
    [AdapVoterIncScoOutput,ConMajVoterOutput,Is,Rs]=AdaptiveVoterIncScoNBit(S1,S2,S3,S4,S5,Rs,Beta,Alfa,aIc);
    % Adaptive Majority Voter with incoherence scoring using bit by bit
    % voting desribed in Figure 6 in the paper.
    [AdapVoterIncScoOutputBitByBit,ConMajVoterOutputBitByBit,Isb,Rsb]=AdaptiveVoterIncScoNBitMajBit(S1,S2,S3,S4,S5,Rsb,Beta,Alfa);
    % Adaptive Majority Voter in described in Reference [12]
    [AdapVoterMajOutput,H,NoResult(i)]=AdaptiveVoterOlderNBit(S1,S2,S3,S4,S5,H,aMaj);
    % Dynamic Adaptive Majority Voter with incoherence scoring using bit by bit
    % voting desribed in Figure 6 in the paper.    
    [AdapVoterIncScoOutputBitByBitDynamic,ConMajVoterOutputBitByBit,Isb,RsbDynamic]=AdaptiveVoterIncScoNBitMajBit(S1,S2,S3,S4,S5,RsbDynamic,BetaDynamic,AlfaDynamic);
    
    %Dynamic regulation parameter setting
    % Vth threshold for diagnostic.
    Vth=0.0010;
    % When AllFaultyIndicator variable is true, it indicates
    % that all redundant modules diagnosed as faulty.
    AllFaultyIndicator=(RsbDynamic(1)>Vth)&(RsbDynamic(2)>Vth)&(RsbDynamic(3)>Vth)&(RsbDynamic(4)>Vth)&(RsbDynamic(5)>Vth);
    
   if AllFaultyIndicator==0
       BetaDynamic=0.3;
       AlfaDynamic=0.1;
   else
       BetaDynamic=0.8;
       AlfaDynamic=0.1;
   end
    BHist(i)=BetaDynamic;
    AHist(i)=AlfaDynamic;
    
    % Calculating and storing incorrect results for modules and voters
    IncorrectAdaptIncScore(j)=IncorrectAdaptIncScore(j)+sign(HammingDist(AdapVoterIncScoOutput,Sc));
    IncorrectAdaptMaj(j)=IncorrectAdaptMaj(j)+sign(HammingDist(AdapVoterMajOutput,Sc));
    IncorrectConMaj(j)=IncorrectConMaj(j)+sign(HammingDist(ConMajVoterOutput,Sc));
    IncorrectAdaptIncScoreBitByBit(j)=IncorrectAdaptIncScoreBitByBit(j)+sign(HammingDist(AdapVoterIncScoOutputBitByBit,Sc));
    IncorrectConMajBitByBit(j)=IncorrectConMajBitByBit(j)+sign(HammingDist(ConMajVoterOutputBitByBit,Sc));
    IncorrectAdaptIncScoreBitByBitDynamic(j)=IncorrectAdaptIncScoreBitByBitDynamic(j)+sign(HammingDist(AdapVoterIncScoOutputBitByBitDynamic,Sc));
    IncorrectModule1(j)=IncorrectModule1(j)+sign(HammingDist(S1,Sc));
    IncorrectModule2(j)=IncorrectModule2(j)+sign(HammingDist(S2,Sc));
    IncorrectModule3(j)=IncorrectModule3(j)+sign(HammingDist(S3,Sc));
    IncorrectModule4(j)=IncorrectModule4(j)+sign(HammingDist(S4,Sc));
    IncorrectModule5(j)=IncorrectModule5(j)+sign(HammingDist(S5,Sc));
    %Incorrectfark=Incorrectfark+sign(HammingDist(ConMajVoterOutput,AdaptiveVoterOutputOld));
end
% Calculating availabilities for modules and voters
AvailabilityAdaptIncScore(j)=(TestNumber-IncorrectAdaptIncScore(j))/TestNumber;
AvailabilityAdaptMaj(j)=(TestNumber-IncorrectAdaptMaj(j))/TestNumber;
AvailabilityConMaj(j)=(TestNumber-IncorrectConMaj(j))/TestNumber;
AvailabilityAdaptIncScoreBitByBit(j)=(TestNumber-IncorrectAdaptIncScoreBitByBit(j))/TestNumber;
AvailabilityConMajBitByBit(j)=(TestNumber-IncorrectConMajBitByBit(j))/TestNumber;
AvailabilityAdaptIncScoreBitByBitDynamic(j)=(TestNumber-IncorrectAdaptIncScoreBitByBitDynamic(j))/TestNumber;
AvailabilityModule1(j)=(TestNumber-IncorrectModule1(j))/TestNumber;
AvailabilityModule2(j)=(TestNumber-IncorrectModule2(j))/TestNumber;
AvailabilityModule3(j)=(TestNumber-IncorrectModule3(j))/TestNumber;
AvailabilityModule4(j)=(TestNumber-IncorrectModule4(j))/TestNumber;
AvailabilityModule5(j)=(TestNumber-IncorrectModule5(j))/TestNumber;
end
% Reporting when the simulation completed.
disp('--------AVERAGE AVAILABILITY---------')
fprintf('Average availability of the Incoherence Scoring with Word Voting: %f\n',mean(AvailabilityAdaptIncScore));
fprintf('Average availability of the Adaptive Majority Word Voter: %f\n',mean(AvailabilityAdaptMaj));
fprintf('Average availability of the Conventional Word Voter: %f\n',mean(AvailabilityConMaj));
fprintf('Average availability of the Incoherence Scoring with Bit By Bit Voter: %f\n',mean(AvailabilityAdaptIncScoreBitByBit));
fprintf('Average availability of the Conventional Bit By Bit Voter: %f\n',mean(AvailabilityConMajBitByBit));
fprintf('Average availability of the Dynamic Incoherence Scoring with Bit By Bit Voter: %f\n',mean(AvailabilityAdaptIncScoreBitByBitDynamic));
fprintf('Average availability of the Redundant Module 1: %f\n',mean(AvailabilityModule1));
fprintf('Average availability of the Redundant Module 2: %f\n',mean(AvailabilityModule2));
fprintf('Average availability of the Redundant Module 3: %f\n',mean(AvailabilityModule3));
fprintf('Average availability of the Redundant Module 4: %f\n',mean(AvailabilityModule4));
fprintf('Average availability of the Redundant Module 5: %f\n',mean(AvailabilityModule5));

disp('--------AVERAGE ERROR NUMBERS---------')
fprintf('Incorrect Output of the Incoherence Scoring with Word Voting: %f\n',mean(IncorrectAdaptIncScore));
fprintf('Incorrect Output of the Adaptive Majority Word Voter: %f\n',mean(IncorrectAdaptMaj));
fprintf('Incorrect Output of the Conventional Word Voter: %f\n',mean(IncorrectConMaj));
fprintf('Incorrect Output of the Incoherence Scoring with Bit By Bit Voter: %f\n',mean(IncorrectAdaptIncScoreBitByBit));
fprintf('Incorrect Output of the Conventional Bit By Bit Voter: %f\n',mean(IncorrectConMajBitByBit));
fprintf('Incorrect Output of the Dynamic Incoherence Scoring with Bit By Bit Voter: %f\n',mean(IncorrectAdaptIncScoreBitByBitDynamic));
fprintf('Incorrect Output of the Redundant Module 1: %f\n',mean(IncorrectModule1));
fprintf('Incorrect Output of the Redundant Module 2: %f\n',mean(IncorrectModule2));
fprintf('Incorrect Output of the Redundant Module 3: %f\n',mean(IncorrectModule3));
fprintf('Incorrect Output of the Redundant Module 4: %f\n',mean(IncorrectModule4));
fprintf('Incorrect Output of the Redundant Module 5: %f\n',mean(IncorrectModule5));

fprintf('AVAILABILITY REPORT FOR TEST SESSIONS \n');
for j=1:TestGrupNumber
  fprintf('TEST SESSIONS: %d \n',j);
  fprintf('------------------------------ \n');
  fprintf('Availability of the Incoherence Scoring with Word Voting: : %d \n',AvailabilityAdaptIncScore(j));
  fprintf('Availability of the Adaptive Majority Word Voter: %d \n',AvailabilityAdaptMaj(j));
  fprintf('Availability of the Conventional Word Voter: %d \n',AvailabilityConMaj(j));
  fprintf('Availability of the Incoherence Scoring with Bit By Bit Voter: %d \n',AvailabilityAdaptIncScoreBitByBit(j));
  fprintf('Availability of the Conventional Bit By Bit Voter:: %d \n',AvailabilityConMajBitByBit(j));
  fprintf('Availability of the Dynamic Incoherence Scoring with Bit By Bit Voter: %d \n',AvailabilityAdaptIncScoreBitByBitDynamic(j));
  fprintf('Availability of the Redundant Module 1: %f\n',AvailabilityModule1(j));
  fprintf('Availability of the Redundant Module 2: %f\n',AvailabilityModule2(j));
  fprintf('Availability of the Redundant Module 3: %f\n',AvailabilityModule3(j));
  fprintf('Availability of the Redundant Module 4: %f\n',AvailabilityModule4(j));
  fprintf('Availability of the Redundant Module 5: %f\n',AvailabilityModule5(j));
  fprintf('********************************************************************* \n');
end

Contact us at files@mathworks.com