天天看點

【非均勻量化LDPC】非均勻量化LDPC的誤碼率仿真——最小和MinSsum譯碼

1.軟體版本

MATLAB2021a

2.本算法理論知識

【非均勻量化LDPC】非均勻量化LDPC的誤碼率仿真——最小和MinSsum譯碼

在此基礎上做改進:

【非均勻量化LDPC】非均勻量化LDPC的誤碼率仿真——最小和MinSsum譯碼

本文改進方案如下所示:

【非均勻量化LDPC】非均勻量化LDPC的誤碼率仿真——最小和MinSsum譯碼

 原論文中,第一個量化公式,的範圍是由一個統計範圍得到的,但是在實際中,根據信道的不同,可能存在多種可能,這裡,我們的考慮的方案是自适應的調整Ymax和Ymin

根據信道的大概估計結果對Ymax和Ymin進行調整,

方案如下所示:

【非均勻量化LDPC】非均勻量化LDPC的誤碼率仿真——最小和MinSsum譯碼

 的取值由信道品質決定。這裡設定的調整量為:

【非均勻量化LDPC】非均勻量化LDPC的誤碼率仿真——最小和MinSsum譯碼

 k1為0~1之間的值。

這種改進方案的思路是,當噪聲越大的時候,接收到信号的幅度波動範圍也就越大,是以,其置信區間并不是一個固定的範圍。

對于第二個量化公式,

這部分,做如下的改進。

【非均勻量化LDPC】非均勻量化LDPC的誤碼率仿真——最小和MinSsum譯碼

然後MS裡面做了下改進,主要是結合了BP的一些思想,

因為論文上的方法,基本以及是MS可以達到的極限了,這裡将此基礎上, 改進量化,并結合部分BP的思路,進一步提升MS性能。

先看MS具體如下:

最小和方法如下:

【非均勻量化LDPC】非均勻量化LDPC的誤碼率仿真——最小和MinSsum譯碼

然後基于MS做了改進的。

【非均勻量化LDPC】非均勻量化LDPC的誤碼率仿真——最小和MinSsum譯碼
【非均勻量化LDPC】非均勻量化LDPC的誤碼率仿真——最小和MinSsum譯碼

 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譯碼
上一篇: 杭電ACM2090題