📄 decodelogdomain.m
字号:
function vHat = decodeLogDomain(rx, H, N0, iteration)
[M N] = size(H);
Lci = (-4*rx./N0)';
Lrji = zeros(M, N);
Pibetaij = zeros(M, N);
Lqij = H.*repmat(Lci, M, 1);
[r, c] = find(H);
for n = 1:iteration
alphaij = sign(Lqij);
betaij = abs(Lqij);
for l = 1:length(r)
Pibetaij(r(l), c(l)) = log((exp(betaij(r(l), c(l))) + 1)/...
(exp(betaij(r(l), c(l))) - 1));
end
% ----- Horizontal step -----
for i = 1:M
c1 = find(H(i, :));
for k = 1:length(c1)
sumOfPibetaij = 0;
prodOfalphaij = 1;
sumOfPibetaij = sum(Pibetaij(i, c1)) - Pibetaij(i, c1(k));
if sumOfPibetaij < 1e-20
sumOfPibetaij = 1e-10;
end
PiSumOfPibetaij = log((exp(sumOfPibetaij) + 1)/(exp(sumOfPibetaij) - 1));
prodOfalphaij = prod(alphaij(i, c1))*alphaij(i, c1(k));
Lrji(i, c1(k)) = prodOfalphaij*PiSumOfPibetaij;
end
end
% ------ Vertical step ------
for j = 1:N
r1 = find(H(:, j));
for k = 1:length(r1)
Lqij(r1(k), j) = Lci(j) + sum(Lrji(r1, j)) - Lrji(r1(k), j);
end
LQi = Lci(j) + sum(Lrji(r1, j));
if LQi < 0
vHat(j) = 1;
else
vHat(j) = 0;
end
end
end
fprintf('Sum-product is done...\n');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -