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
|