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

1.软件版本

MATLAB2021a

2.本算法理论知识

在此基础上做改进:

 

本文改进方案如下所示:

   

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

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

方案如下所示:

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

 k1为0~1之间的值。

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

对于第二个量化公式,

这部分,做如下的改进。

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

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

先看MS具体如下:

最小和方法如下:

然后基于MS做了改进的。

 

 

 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.仿真结论

 

 A14-37

猜你喜欢

转载自blog.csdn.net/ccsss22/article/details/124306590