1.软件版本

MATLAB2021a

2.本算法理论知识

【非均匀量化LDPC】非均匀量化LDPC的误码率仿真——最小和MinSsum译码_自适应

在此基础上做改进:

【非均匀量化LDPC】非均匀量化LDPC的误码率仿真——最小和MinSsum译码_算法理论_02

 

本文改进方案如下所示:

【非均匀量化LDPC】非均匀量化LDPC的误码率仿真——最小和MinSsum译码_迭代_03

   

 原论文中,第一个量化公式,的范围是由一个统计范围得到的,但是在实际中,根据信道的不同,可能存在多种可能,这里,我们的考虑的方案是自适应的调整Ymax和Ymin

根据信道的大概估计结果对Ymax和Ymin进行调整,

方案如下所示:

【非均匀量化LDPC】非均匀量化LDPC的误码率仿真——最小和MinSsum译码_自适应_04

 的取值由信道质量决定。这里设置的调整量为:

【非均匀量化LDPC】非均匀量化LDPC的误码率仿真——最小和MinSsum译码_迭代_05

 k1为0~1之间的值。

这种改进方案的思路是,当噪声越大的时候,接收到信号的幅度波动范围也就越大,因此,其置信区间并不是一个固定的范围。

对于第二个量化公式,

这部分,做如下的改进。

【非均匀量化LDPC】非均匀量化LDPC的误码率仿真——最小和MinSsum译码_自适应_06

 

然后MS里面做了下改进,主要是结合了BP的一些思想,

因为论文上的方法,基本以及是MS可以达到的极限了,这里将此基础上, 改进量化,并结合部分BP的思路,进一步提升MS性能。

先看MS具体如下:

最小和方法如下:

【非均匀量化LDPC】非均匀量化LDPC的误码率仿真——最小和MinSsum译码_算法理论_07

然后基于MS做了改进的。

 

【非均匀量化LDPC】非均匀量化LDPC的误码率仿真——最小和MinSsum译码_迭代_08

 

【非均匀量化LDPC】非均匀量化LDPC的误码率仿真——最小和MinSsum译码_算法理论_09

 3.部分核心代码

 

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


4.仿真结论

【非均匀量化LDPC】非均匀量化LDPC的误码率仿真——最小和MinSsum译码_迭代_10

 

【非均匀量化LDPC】非均匀量化LDPC的误码率仿真——最小和MinSsum译码_自适应_11

 A14-37