?? softvitdec.m
字號:
function [xx, BestMetric] = SoftVitDec(G, y, ZeroTail);
%
% SoftVitDec This function performs Viterbi Decoding for Soft Decision Inputs
%
% Inputs: G = [g1; g2; ...; gN] - matrix of generation polynomials
% y - encoded sequence
% ZeroTail - 1/0 - defines if contains zero tail
%
% Outputs: xx - recovered encoded bits
% BestMetric - final best metric
%
% Rule = MAXIMAL METRIC WINS (Likelihood function)
%
L = size(G, 1); % --- num of output chips
K= size(G, 2); % --- length of generation polinom
N = 2^(K-1); % --- number of states
T = length(y)/L; % --- maximum trellis depth
%------- Output Generation Matrix Definition (contains all possible state transactions)-------------
OutMtrx = zeros(N, 2*L);
for s = 1:N
in0 = ones(L, 1)*[0, (dec2bin((s-1), (K-1))-'0')];
in1 = ones(L, 1)*[1, (dec2bin((s-1), (K-1))-'0')];
out0 = mod(sum((G.*in0)'), 2);
out1 = mod(sum((G.*in1)'), 2);
OutMtrx(s, :) = [out0, out1];
end
OutMtrx = sign(OutMtrx-1/2);
%---------------------------------------------------------------------------------------------
%------------------------------------ Trellis SECTION ----------------------------------
%---------------------------------------------------------------------------------------------
%------- Path Mertrix Initialization -------------
PathMet = [100; zeros((N-1), 1)]; % Initial State = 100 (better initial conditions)
PathMetTemp = PathMet(:,1);
Trellis = zeros(N, T);
Trellis(:,1) = [0 : (N-1)]';
%------------------------ MAIN Trellis Calculation Loop ---------------------------
y = reshape(y, L, length(y)/L);
for t = 1:T
yy = y(:, t);
for s = 0:N/2-1
[B0 ind0] = max( PathMet(1+[2*s, 2*s+1]) + [OutMtrx(1+2*s, 0+[1:L]) * yy; OutMtrx(1+(2*s+1), 0+[1:L])*yy] );
[B1 ind1] = max( PathMet(1+[2*s, 2*s+1]) + [OutMtrx(1+2*s, L+[1:L]) * yy; OutMtrx(1+(2*s+1), L+[1:L]) * yy] );
PathMetTemp(1+[s, s+N/2]) = [B0; B1];
Trellis(1+[s, s+N/2], t+1) = [2*s+(ind0-1); 2*s + (ind1-1)];
end
PathMet = PathMetTemp;
end
%---------------------------------------------------------------------------------------------
%---------------------------------- Trace Back Section -----------------------------
%---------------------------------------------------------------------------------------------
%------- Find Best Path Mertric -------------
xx = zeros(T, 1);
if (ZeroTail)
BestInd = 1;
else
[Mycop, BestInd] = max(PathMet);
end
BestMetric = PathMet(BestInd);
xx(T) = floor((BestInd-1)/(N/2));
%------------------------ MAIN Trace Back Loop ---------------------------
NextState = Trellis(BestInd, (T+1));
for t=T:-1:2
xx(t-1) = floor(NextState/(N/2));
NextState = Trellis( (NextState+1), t);
end
if (ZeroTail)
xx = xx(1:end-K+1);
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -