zl程序教程

您现在的位置是:首页 >  后端

当前栏目

基于QUASI-ML decoder算法的PSK信号准最大似然译码器matlab性能仿真

MATLAB算法性能 基于 最大 仿真 信号 ML
2023-09-11 14:15:32 时间

目录

一、理论基础

二、核心程序

三、测试结果


一、理论基础

本算法主要参考文献:

《[1] Luo Z Q ,  Luo X ,  Kisialiou M . An efficient quasi-maximum likelihood decoder for PSK signals[C]// IEEE. IEEE, 2003.》   

        Since exact maximum likelihood (ML) detection is computationally intractable in general, approximate ML approaches are needed to reduce the computation time while maintaining low bit error rate (BER). In this work, we develop an efficient approximate ML decoder for constant modulus signals based on a simple nonlinear programming relaxation. Unlike the existing sphere decoder whose expected complexity is cubic in problem size and whose performance deteriorates with increasing problem size and noise level, our proposed new decoder enjoys a worst case quadratic complexity and scales gracefully with problem dimension and noise level. Our initial testing and analysis suggests that this new decoder is capable of delivering ML like BER performance for PSK signals while requiring substantially lower computational complexity. In this sense, our new decoder is similar to the sphere decoder which is an effective method for QAM signals.

        数字通信中的一个基本问题,最大似然(ML)检测,是NP难题,在实际应用中通常需要次优策略。现有的ML检测方法要么具有指数复杂性(例如,球体解码器及其变体),要么表现出显著的误码率(BER)退化(例如,LMMSE检测器等)。在本文中,我们考虑了两种基于半定松弛的准ML检测器:BPSK星座的SDR检测器和M-PSK星座的PSK检测器。这两个检测器都能够以多项式最坏情况复杂度提供接近最优(准ML)BER性能。对于一般类别的随机信道,我们证明了SDR检测器提供了对数似然值方面的恒定因子近似值,并且对于大系统,ML和SDR检测器之间的SNR间隙(以dB表示)由常数限制。对于PSK检测器,我们证明了对于ML检测问题可行的低秩半定松弛的每个局部最大值至少达到最大相对对数似然值的一半,并且对于BPSK情况,甚至可以得到精确的ML解。我们还提出了两个检测器的有效实现:SDR检测器使用双尺度内点方法实现,而PSK检测器基于可行集同伦上的坐标下降策略。我们使用动态降维和热启动技术来实现两个检测器的SNR敏感改进。BER性能和运行时间的数值模拟表明了这些准ML检测器的效率。此外,我们应用半定松弛策略为具有LDPC或turbo码的MIMO通信系统中的标准迭代接收机开发了一种有效的准MAP SDR检测器。所提出的准MAP SDR检测器以低复杂度(每个信道使用仅解决一个半定程序)和低内存利用率(不存储候选列表)提供接近最优的BER。蒙特卡罗模拟证实了准MAP SDR检测器的优点。

算法流程图如下所示:

二、核心程序

          %QUASI-ML PSK decoder算法
           for k=1:data_Numbers
               y            = H_Ray*MIMO_Tx(:,k) + 20*N0*randn(size(H_Ray*MIMO_Tx(:,k)));
               y            = y/max(max(abs(y)));
               %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
               e0    = 0.5;
               beta0 = 0.4;
               n1    = 10;
               n2    = 10;
               ee    = zeros(n1,1);
               %STEP1
               for i1 = 1:n1
                   ee(i1) = -i1*e0/(n1-1) + n1*e0/(n1-1);
                   x1s    = [-1-ee(i1)+(2+2*ee(i1))/Tm:(2+2*ee(i1))/Tm:1+ee(i1)];
                   for k1 = 1:Tm
                       x1     = x1s(k1)*ones(Tm,1); 
                       f1(k1) = x1'*H_Ray'*H_Ray*x1 - y'*H_Ray*x1 - x1'*H_Ray'*y + y'*y;
                   end
                   [g1(i1),xk1(i1)] = min(f1);
               end
               [g11,xk11] = min(g1);
               XK1        = y(xk1(xk11));
               %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
               %STEP2
               M = 64;
               for i2 = 1:n2
                   beta(i2)   = -i1*beta0/(n2-1) + n2*e0/(n2-1);
                   deltaa(i2) =  2*pi*(i2-1)/(M*(n2-1));
                   x2s        = [-1-beta(i2)+(2+2*beta(i2))/Tm:(2+2*beta(i2))/Tm:1+beta(i2)];
                   for k2 = 1:Tm
                       x2        = x2s(k2)*ones(Tm,1); 
                       f2(i2,k2) = x2'*H_Ray'*H_Ray*x2 - y'*H_Ray*x2 - x2'*H_Ray'*y + y'*y;
                   end
               end
               for k2 = 1:Tm
                   [g2,xk2] = min(f2(:,k2));
                   XK2(k2)  = y(xk2);
               end
               %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
                %STEP3
               a5(:,k)  = XK2;
           end
01-123

三、测试结果