RDS-Projekt   #5 Math-Lab Funktion decodpoly.m

function [V,Syn] = decodpoly(C)

% [V,Syn] = DECODPOLY(C) dekodiert Empfangswort
% 
% Decodiert 26bit- Codewort C mittels Polynom x10 + x8 +x7 + x5 + x4 + x3 + 1 
% nach der Feststellung des Syndroms Syn wird das entsprechende Offsetwort 
% dazuaddiert und das Ruecktransformierte Codewort ausgegeben
%
% Eingabe: C : Empfangswort (MSB . . . LSB)
% Ausgabe: V : Dekodiertes Empfangswort (MSB . . LSB)
%          Syn : Syndrom (MSB . . . LSB)
% 
% creichl

V = zeros(1,16);
Syn = zeros(1,10);
S = zeros(1,11);                 % Schieberegister 
G = [1 0 0 1 1 1 0 1 1 0 0];     % Generatorpolynom 

% Schiebematrix
SH = zeros(11,11);
for i = 1:10,
      S(i,i+1) = 1; 
end

% Offsetwörter
OFFSET = [0 0 0 0 0 0 0 0 0 0;
   0 0 1 1 1 1 1 1 0 0;
   0 1 1 0 0 1 1 0 0 0;
   0 1 0 1 1 0 1 0 0 0;
   1 1 0 1 0 1 0 0 0 0;
   0 1 1 0 1 1 0 1 0 0;
   0 0 0 0 0 0 0 0 0 0];
SYNDROM = [0 0 0 0 0 0 0 0 0 0;
   0 1 0 1 1 1 1 1 1 1;
   0 0 0 0 0 0 1 1 1 0;
   0 1 0 0 1 0 1 1 1 1;
   1 0 1 1 1 0 1 1 0 0;
   1 0 1 0 0 1 0 1 1 1];
MERKER = ['0' 'A' 'B' 'C' 'C-' 'D'];

% Decodierung
for i = 1:length(C);
   S = S*SH;
   if (mod((C(i)+S(11)),2)==1),
      S = mod(S+G,2);
   end
end

% Zusammensetzung
V = C(1:16);

for i = 1:10,
   Syn(i) = S(11-i);  % Drehung gemäß formatierung
end

% Abziehen des Offsetwortes
i = 1
while i <= 6
   if Syn == SYNDROM(i,:),
      Syn = mod((Syn + SYNDROM(i,:)),2);
      disp('Offset');
      disp(MERKER(i));
      i = 7;
   end
   i = i+1;
end