m一种基于QPSK信号的准最大似然译码器误码率matlab仿真

简介: m一种基于QPSK信号的准最大似然译码器误码率matlab仿真

1.算法描述
《An efficient quasi-maximum likelihood decoder for PSK signal》

《[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.

image.png

    这里,从论文的仿真图可知,我们所要做的主要工作就是本课题所使用的算法和球形译码的性能对比。球形译码的不是本文的研究内容,其主要参考文献3获得,这里不做介绍,这里我们重点介绍本文所研究的PSKD算法。

    其中误码率,我们进行系统的误码率分析,而复杂度的对比,我们这里主要是统计仿真时间,然后反映其复杂度,注意,这里仿真时间和电脑的配置有关,配置牛逼,则仿真时间则越短,但是其复杂度的对比曲线基本变化趋势是不变的。

  这里,我们主要根据

image.png

上述算法流程进行仿真。

2.仿真效果预览
matlab2022a仿真如下:
3.png
4.png
5.png

3.MATLAB核心程序

%统计无码数
Times        = 500;
%m
Tm           = 10;
%n
Rn           = 10;
%仿真序列帧长度
data_Numbers = 300;
 
for i=1:length(SNR) 
     Bit_err(i) = 0;
     Num_err    = 0;
     Numbers    = 0; %误码率累加器   
     N0         = 10/(10^(SNR(i)/10));  
     while Num_err <= Times
           Num_err
           fprintf('SNR = %f\n', SNR(i));
           %产生需要发送的随机数
           Trans_data  = round(rand(1,data_Numbers)); 
           %BPSK
           Trans_BPSK  = 2*Trans_data-1;
           %作为发送信源
           MIMO_Tx(1,:) = Trans_BPSK;
           for send_loop = 2:Tm            
               MIMO_Tx(send_loop,:) = MIMO_Tx(1,:);              
           end
           %信道
           H_Ray = (randn(Rn,Tm)+sqrt(-1)*randn(Rn,Tm))/sqrt(2);
           H_Ray = abs(H_Ray);
           %QUASI-ML PSK decoder算法
           for k=1:data_Numbers
               y            = H_Ray*MIMO_Tx(:,k) + 2*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
           %接收
           MIMO_Rx     = a5;
           MIMO_Rx2    = ones(1,Tm)*MIMO_Rx(:,:);    
           Rec_data    =(sign(MIMO_Rx2)+1)/2; 
           [nberr,rat]  = biterr(Trans_data,Rec_data);
           Num_err     = Num_err+nberr;
           Numbers     = Numbers+1;    
    end 
    Bit_err(i)=Num_err/(data_Numbers*Numbers);
end
 
figure;
semilogy(SNR,Bit_err,'o-r');
xlabel('SNR(dB)');
ylabel('BER');
grid on;
% save BPSK_10_err.mat SNR Bit_err
01_108m
相关文章
|
5天前
|
机器学习/深度学习 人工智能 算法
基于DCT和扩频的音频水印嵌入提取算法matlab仿真
本文介绍了结合DCT和扩频技术的音频水印算法,用于在不降低音质的情况下嵌入版权信息。在matlab2022a中实现,算法利用DCT进行频域处理,通过扩频增强水印的隐蔽性和抗攻击性。核心程序展示了水印的嵌入与提取过程,包括DCT变换、水印扩频及反变换步骤。该方法有效且专业,未来研究将侧重于提高实用性和安全性。
|
18小时前
|
机器学习/深度学习 算法 计算机视觉
m基于Yolov2深度学习网络的人体喝水行为视频检测系统matlab仿真,带GUI界面
MATLAB 2022a中使用YOLOv2算法对avi视频进行人体喝水行为检测,结果显示成功检测到目标。该算法基于全卷积网络,通过特征提取、锚框和损失函数优化实现。程序首先打乱并分割数据集,利用预训练的ResNet-50和YOLOv2网络结构进行训练,最后保存模型。
10 5
|
3天前
|
机器学习/深度学习 算法 数据挖掘
基于PSO优化的CNN-LSTM-Attention的时间序列回归预测matlab仿真
该文档介绍了使用MATLAB2022A中PSO优化算法提升时间序列预测模型性能的过程。PSO优化前后对比显示了优化效果。算法基于CNN、LSTM和Attention机制构建CNN-LSTM-Attention模型,利用PSO调整模型超参数。代码示例展示了PSO的迭代优化过程及训练、预测和误差分析环节。最终,模型的预测结果以图形形式展示,并保存了相关数据。
|
24天前
雷达模糊函数及MATLAB仿真(三)
雷达模糊函数及MATLAB仿真
15 0
|
3月前
|
Perl
【MFAC】基于全格式动态线性化的无模型自适应控制(Matlab代码)
【MFAC】基于全格式动态线性化的无模型自适应控制(Matlab代码)
|
3月前
【数值分析】迭代法求方程的根(附matlab代码)
【数值分析】迭代法求方程的根(附matlab代码)
|
3月前
【数值分析】Jacobi、Seidel和Sor迭代法求解线性方程组(附matlab代码)
【数值分析】Jacobi、Seidel和Sor迭代法求解线性方程组(附matlab代码)
|
3月前
【数值分析】二分法求方程的根(附matlab代码)
【数值分析】二分法求方程的根(附matlab代码)
|
18天前
|
存储 人工智能 机器人
【Matlab】Matlab电话拨号音合成与识别(代码+论文)【独一无二】
【Matlab】Matlab电话拨号音合成与识别(代码+论文)【独一无二】
|
2月前
|
机器学习/深度学习 算法 计算机视觉
霍夫变换车道线识别-车牌字符识别代码(matlab仿真与图像处理系列第5期)
霍夫变换车道线识别-车牌字符识别代码(matlab仿真与图像处理系列第5期)
30 2

热门文章

最新文章