function vHat = func_Dec(rx,H,N0,itermax,Theta,delta,WB)
[M N] = size(H);
Lci0 = (-2*rx./N0)';
Lrji = zeros(M, N);
Phibetaji = zeros(M, N);
%非均匀量化
%非均匀量化
if N0 <= 0.6
Ymax = 4+N0;%自适应步长
Ymin = -4-N0;
else
Ymax = 1+N0;%自适应步长
Ymin = -1-N0;
end
for i=1:length(Lci0)
Lci(i) = sign(Lci0(i))*(abs(Lci0(i))*(2^WB-1)/(2*Ymax) + 0.5)*(2*Ymax/(2^WB-1));
end
Lens = 0.1/N0;
Lqji = H.*repmat(Lci, M, 1);
[r, c] = find(H);
checksum = ones(1, M);
deltas = eps;
for n = 1:itermax
success = nnz(checksum);
if nnz(checksum)~= 0
nb_iter = n;
alphaji = sign(Lqji);
betaji = abs(Lqji);
for l = 1:length(r)
Phibetaji(r(l), c(l)) = log((exp(betaji(r(l), c(l))) + 1) / (exp(betaji(r(l), c(l))) - 1));
end
for j = 1:M
c1 = find(H(j, :));
for k = 1:length(c1)
sumOfPhibetaji = 0;
prodOfalphaji = 1;
sumOfPhibetaji = sum(Phibetaji(j, c1)) - Phibetaji(j, c1(k));
minOfbetaij = log((exp(sumOfPhibetaji-deltas) + 1)/(exp(sumOfPhibetaji-deltas) - 1));
prodOfalphaji = prod(alphaji(j, c1))*alphaji(j, c1(k));
%公式4
Lrji(j, c1(k)) = Theta*prodOfalphaji*minOfbetaij;
end
end
for i = 1:N
r1 = find(H(:, i));
for k = 1:length(r1)
%公式6
Lqji(r1(k), i) = Lci(i)*delta + sum(Lrji(r1, i)) - Lrji(r1(k), i);
end
tmps = sum(Lrji(r1, i));
%译码迭代消息的非均匀量化算法
tmps2 = func_QX(tmps,N0);
%公式7
LQi = Lci(i)*delta + tmps2;
if LQi < 0
vHat(i) = 1;
else
vHat(i) = 0;
end
end
deltas = LQi/1e15;
checksum = mod(vHat*H',2);
end
end