基于GWO灰狼优化的LDPC码NMS译码算法最优归一化参数计算和误码率matlab仿真

72 阅读2分钟

1.算法仿真效果

matlab2022a仿真结果如下(完整代码运行后无水印):

 

e7ef28d47db9541c90fa62325f555256_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.jpg

  951ab212506de983d98f1303ce0a29e2_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.jpg

2.算法涉及理论知识概要

       LDPC码是一种线性错误修正码,以其接近香农极限的优良性能而被广泛应用于现代通信系统中。NMS译码是一种基于最小平方误差准则的软判决译码方法,其目标是找到一个最可能的码字,使得接收到的信号与该码字之间的欧氏距离最小。NMS译码算法中包含一些关键参数,如归一化因子,这些参数的选择对译码性能有显著影响。

 

1f9efd8663099fe9f8a3575aad51c459_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

 

     在应用GWO优化LDPC码NMS译码算法的归一化参数时,首先需要定义目标函数,通常为目标函数最小化,例如最小化误码率(BER)或最大化信噪比(SNR)。设归一化参数为γ,则目标函数可以表示为:

 

0f93f0938b829434fd9f1dde4c5a17ac_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

 

       GWO算法通过不断迭代更新γ的值,寻找使f(γ)达到最小(或最大,根据目标函数定义)的γ∗。最终,γ∗即为最优归一化参数。

 

       在本课题中,我们选择BER(γ)。

 

3.MATLAB核心程序 `a=2*(1-(t/Iters));  

    for i=1:Num

        for j=1:dim       

            r1      = rand;

            r2      = rand;

            A1      = 2ar1-a;%

            C1      = 2*r2;    %

            D_alpha = abs(C1*Alpx(j)-xpos(i,j));%

            X1      = Alpx(j)-A1*D_alpha;       %

            

            r1      = rand;

            r2      = rand;

            A2      = 2ar1-a; %

            C2      = 2*r2; %

            D_beta  = abs(C2*btx(j)-xpos(i,j)); %

            X2      = btx(j)-A2*D_beta; %    

            

            r1      = rand;

            r2      = rand;

            A3      = 2ar1-a; %

            C3      = 2*r2; %

            D_delta = abs(C3*dltx(j)-xpos(i,j)); %

            X3      = dltx(j)-A3*D_delta; %           

            

            xpos(i,j) = (X1+X2+X3)/3;%

 

            if xpos(i,j)>=Lmax(j)

               xpos(i,j)=Lmax(j);

            end

            if xpos(i,j)<=Lmin(j)

               xpos(i,j)=Lmin(j);

            end

 

        end

    end

end

 

 

aa = Alpx

 

N = 2016;

K = 1008;

R = K/N;

%H矩阵

[ H, Hp, Hs ] = func_H();

 

...........................................................

 

fitness=mean(Ber);

 

figure

semilogy(SNR, Ber,'-b^',...

    'LineWidth',1,...

    'MarkerSize',6,...

    'MarkerEdgeColor','k',...

    'MarkerFaceColor',[0.2,0.9,0.5]);

 

xlabel('Eb/N0(dB)');

ylabel('Ber');

title(['归一化最小和NMS,GWO优化后的alpha = ',num2str(aa)])

grid on;

save NMS4.mat SNR Ber  aa

0X_061m`