基于Matlab实现多种MPA多用户检测算法

简介: 基于Matlab实现多种MPA多用户检测算法

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机

⛄ 内容介绍

1、MPA多用户检测算法。

2、对数MPA多用户检测算法。

3、基于因子图裁剪的MPA多用户检测算法。

4、基于阈值的MPA多用户检测算法。

5、串行MPA多用户检测算法。

⛄ 部分代码

%基于因子图裁剪的MPA收敛性

close all;

clear all;

clc;


%%四点码本

cons(:,:,1)=[-0.7071+0.7071j,-0.7071+0.7071j;0.7071+0.7071j,0.7071+0.7071j;-0.7071-0.7071j,-0.7071-0.7071j;0.7071-0.7071j,0.7071-0.7071j];

cons(:,:,2)=exp(pi/12j)*[-0.7071+0.7071j,-0.7071+0.7071j;0.7071+0.7071j,0.7071+0.7071j;-0.7071-0.7071j,-0.7071-0.7071j;0.7071-0.7071j,0.7071-0.7071j];

cons(:,:,3)=exp(pi/6j)*[-0.7071+0.7071j,-0.7071+0.7071j;0.7071+0.7071j,0.7071+0.7071j;-0.7071-0.7071j,-0.7071-0.7071j;0.7071-0.7071j,0.7071-0.7071j];

%%四点码本2

% cons(:,:,1)=[-0.6180+0.7862j,-0.6180+0.7862j;0.6180+0.7862j,0.6180-0.7862j;-0.6180-0.7862j,-0.6180-0.7862j;0.6180-0.7862j,0.6180+0.7862j];

% cons(:,:,2)=exp(mm*pi/180j)*[-0.6180+0.7862j,-0.6180+0.7862j;0.6180+0.7862j,0.6180-0.7862j;-0.6180-0.7862j,-0.6180-0.7862j;0.6180-0.7862j,0.6180+0.7862j];

% cons(:,:,3)=exp(mm*pi/90j)*[-0.6180+0.7862j,-0.6180+0.7862j;0.6180+0.7862j,0.6180-0.7862j;-0.6180-0.7862j,-0.6180-0.7862j;0.6180-0.7862j,0.6180+0.7862j];


% plot(real(cons(:,1,1)),imag(cons(:,1,1)),'*');%星座点

index=2;%调制阶数

Eb=(0.7071^2+0.7071^2)*2/index;

%Eb=(0.6180^2+0.7862^2)/index;

Eb_nv=1000;

% iter=1:7;

El=length(Eb_nv);

N=100;

G=[1,1,1;1,0,1];


% error=zeros(length(iter),6);

% errorm=zeros(length(iter),6);

error=zeros(El,6);

errorm=zeros(El,6);

errorc=zeros(El,6);

errors=zeros(El,6);


% BER=zeros(length(iter),6);

% BERm=zeros(length(iter),6);

BER=zeros(El,6);

BERm=zeros(El,6);

BERc=zeros(El,6);

BERs=zeros(El,6);


for t=1:length(El)%不同iter

   %噪声功率

   nv=Eb*10^(-Eb_nv/10);%单边功率谱密度

   sigma=nv/2;%噪声的方差

   %信息序列

   info=rand(6,N);%信息码长为N,一共传了6个用户的信息

   info(info>0.5)=1;

   info(info<=0.5)=0;

   Le1=[];Le2=[];Le3=[];Le4=[];Le5=[];Le6=[];

   Lem1=[];Lem2=[];Lem3=[];Lem4=[];Lem5=[];Lem6=[];

   Lec1=[];Lec2=[];Lec3=[];Lec4=[];Lec5=[];Lec6=[];

   Les1=[];Les2=[];Les3=[];Les4=[];Les5=[];Les6=[];

   %信道卷积编码

   for j=1:6

       code(j,:)=convencoder(info(j,:),G);%信道编码后码长变为2N

   end

   

   parfor i=1:N %2个比特映射为一个星座点,将2N分割为N次处理

       %星座点映射

       temp=zeros(1,6);

       for j=1:6

           temp(j)=2*code(j,2*i-1)+code(j,2*i)+1;

       end

       Signal=zeros(1,4);%载波

       RecSig=zeros(6,4);%经过信道,6个用户接受的信号,一行表示一个用户

       Le=zeros(6,2);

       Lem=zeros(6,2);

       Lec=zeros(6,2);

       Les=zeros(6,2);

       H=zeros(6,1);

       noise=zeros(6,4);

       for j=1:6

           H(j) = randn(1,1)+1j*randn(1,1);

           noise(j,:)=random('norm',0,sqrt(sigma),[1,4])+1i*random('norm',0,sqrt(sigma),[1,4]);

       end

       Signal(1)=cons(temp(1),1,1)+cons(temp(2),1,2)+cons(temp(3),1,3);

       Signal(2)=cons(temp(1),2,1)+cons(temp(4),1,2)+cons(temp(5),1,3);

       Signal(3)=cons(temp(2),2,1)+cons(temp(4),2,2)+cons(temp(6),1,3);

       Signal(4)=cons(temp(3),2,1)+cons(temp(5),2,2)+cons(temp(6),2,3);

       


       for u=1:6

           %分别解码这6个用户

           RecSig(u,:)=Signal*H(u)+noise(u,:);

           

           rsnr1=abs(H(u)*(cons(temp(1),1,1)+cons(temp(1),2,1)))^2/nv;

           rsnr2=abs(H(u)*(cons(temp(2),1,2)+cons(temp(2),2,1)))^2/nv;

           rsnr3=abs(H(u)*(cons(temp(3),1,3)+cons(temp(3),2,1)))^2/nv;

           rsnr4=abs(H(u)*(cons(temp(4),1,2)+cons(temp(4),2,2)))^2/nv;

           rsnr5=abs(H(u)*(cons(temp(5),1,3)+cons(temp(5),1,3)))^2/nv;

           rsnr6=abs(H(u)*(cons(temp(6),1,3)+cons(temp(6),2,3)))^2/nv;

           rsnr=[rsnr1,rsnr2,rsnr3,rsnr4,rsnr5,rsnr6];

           

           tic

%             tmp=MPA4withoutPA(RecSig,cons,nv,H,u,iter(t));

           tmp=MSMPA4_3s2un1n2n3i_sorted(RecSig,cons,rsnr,nv,H,u,2,2,1);

           Le(u,:)=tmp;

           t1=toc;

           

           tic

%             tmpm=ThresholdMPACon4(RecSig,cons,nv,H,u,20,iter(t));

           tmpm=MSMPA4_3s2un1n2n3i_sorted(RecSig,cons,rsnr,nv,H,u,2,2,2);

           Lem(u,:)=tmpm;

           t2=toc;

           

           tic

           tmpc=MSMPA4_3s2un1n2n3i_sorted(RecSig,cons,rsnr,nv,H,u,3,2,2);

           Lec(u,:)=tmpc;

           t3=toc;

           

%             tic

%             tmps=MSMPA4_3s2un1n2n3i_sorted(RecSig,cons,rsnr,nv,H,u,2,1,1);

%             Les(u,:)=tmps;

%             t4=toc;

       end

       Le1=[Le1 Le(1,:)];

       Le2=[Le2 Le(2,:)];

       Le3=[Le3 Le(3,:)];

       Le4=[Le4 Le(4,:)];

       Le5=[Le5 Le(5,:)];

       Le6=[Le6 Le(6,:)];

       

       Lem1=[Lem1 Lem(1,:)];

       Lem2=[Lem2 Lem(2,:)];

       Lem3=[Lem3 Lem(3,:)];

       Lem4=[Lem4 Lem(4,:)];

       Lem5=[Lem5 Lem(5,:)];

       Lem6=[Lem6 Lem(6,:)];

       

       Lec1=[Lec1 Lec(1,:)];

       Lec2=[Lec2 Lec(2,:)];

       Lec3=[Lec3 Lec(3,:)];

       Lec4=[Lec4 Lec(4,:)];

       Lec5=[Lec5 Lec(5,:)];

      Lec6=[Lec6 Lec(6,:)];

       

%         Les1=[Les1 Les(1,:)];

%         Les2=[Les2 Les(2,:)];

%         Les3=[Les3 Les(3,:)];

%         Les4=[Les4 Les(4,:)];

%         Les5=[Les5 Les(5,:)];

%         Les6=[Les6 Les(6,:)];

   end

   

   Le=[Le1;Le2;Le3;Le4;Le5;Le6];

   Lem=[Lem1;Lem2;Lem3;Lem4;Lem5;Lem6];

   Lec=[Lec1;Lec2;Lec3;Lec4;Lec5;Lec6];

%     Les=[Les1;Les2;Les3;Les4;Les5;Les6];

   

   for j=1:6

%         [L,P]=decoder(Le(j,:),G);

       [P]=decoder_log(Le(j,:),G);

       d=decider(P);

       [Pm]=decoder_log(Lem(j,:),G);

       dm=decider(Pm);

       [Pc]=decoder_log(Lec(j,:),G);

       dc=decider(Pc);

%         [Ps]=decoder_log(Les(j,:),G);

%         ds=decider(Ps);

       

       for i=1:N

           if d(i)~=info(j,i)

               error(t,j)=error(t,j)+1;

           end

           if dm(i)~=info(j,i)

               errorm(t,j)=errorm(t,j)+1;

           end

           if dc(i)~=info(j,i)

               errorc(t,j)=errorc(t,j)+1;

           end

%             if ds(i)~=info(j,i)

%                 errors(t,j)=errors(t,j)+1;

%             end

       end

       BER(t,j)=error(t,j)/N;

       BERm(t,j)=errorm(t,j)/N;

       BERc(t,j)=errorc(t,j)/N;

%         BERs(t,j)=errors(t,j)/N;

   end

   fprintf('%d/%d has completed.\n',t,length(Eb_nv));

end


error

errorm

errorc

% errors


BERav=sum(BER,2)/6;

BERmav=sum(BERm,2)/6;

BERcav=sum(BERc,2)/6;

% BERsav=sum(BERs,2)/6;


% semilogy(iter,BERav','-ro','LineWidth',4);grid on;hold on;

% semilogy(iter,BERmav','-b^','LineWidth',4);grid on;

semilogy(5:7,[BERav,BERmav,BERcav],'-y*','LineWidth',4);grid on;

% semilogy(1:4,BERsav','-g*','LineWidth',4);grid on;

xlabel('iter');ylabel('Average BER');

title('\fontsize{10}\bf基于因子图裁剪的MPA收敛性');

%semilogy(Eb_nv,BERm2av','-yv','LineWidth',2);grid on;

⛄ 运行结果

⛄ 参考文献

[1] 邹佳. SCMA系统中的低复杂度检测算法研究[D]. 北京邮电大学, 2016.

[2] 邹春灵. 基于MATLAB实现的CDMA多用户检测[J]. 中国科技信息, 2008(18):3.

[3] 邵凯郭红耀. 基于模型驱动辅助MPA的SCMA多用户检测算法[J]. 电讯技术, 2022, 62(11):1607-1613.

⛳️ 代码获取关注我

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料


相关文章
|
2月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
213 0
|
2月前
|
数据采集 分布式计算 并行计算
mRMR算法实现特征选择-MATLAB
mRMR算法实现特征选择-MATLAB
166 2
|
2月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
147 8
|
2月前
|
机器学习/深度学习 算法 自动驾驶
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
159 8
|
2月前
|
机器学习/深度学习 算法 数据可视化
基于MVO多元宇宙优化的DBSCAN聚类算法matlab仿真
本程序基于MATLAB实现MVO优化的DBSCAN聚类算法,通过多元宇宙优化自动搜索最优参数Eps与MinPts,提升聚类精度。对比传统DBSCAN,MVO-DBSCAN有效克服参数依赖问题,适应复杂数据分布,增强鲁棒性,适用于非均匀密度数据集的高效聚类分析。
|
2月前
|
机器学习/深度学习 数据采集 负载均衡
结合多种启发式解码方法的混合多目标进化算法,用于解决带工人约束的混合流水车间调度问题(Matlab代码实现)
结合多种启发式解码方法的混合多目标进化算法,用于解决带工人约束的混合流水车间调度问题(Matlab代码实现)
141 0
|
2月前
|
机器学习/深度学习 人工智能 算法
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
126 0
|
2月前
|
存储 监控 并行计算
目标跟踪中常用点迹航迹数据关联算法的MATLAB实现
通过计算测量点与预测点之间的欧氏距离,选择最近邻点进行关联,适用于单目标跟踪场景。
|
3月前
|
传感器 机器学习/深度学习 编解码
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
206 3
|
3月前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
142 6

热门文章

最新文章