首页 > 编程语言 >m基于log-MPA检测算法的SCMA通信链路matlab误码率仿真

m基于log-MPA检测算法的SCMA通信链路matlab误码率仿真

时间:2024-03-25 11:03:34浏览次数:21  
标签:误码率 log MPA SCMA 码本 算法 datar

1.算法仿真效果

matlab2022a仿真结果如下:

 

 

 

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

       稀疏码多址接入(Sparse Code Multiple Access, SCMA)是一种非正交多址接入技术,它通过引入码本的稀疏性来实现多用户的高效接入。在SCMA系统中,多用户共享相同的时频资源,每个用户从自己的码本中选择一个码字进行发送。接收端则采用消息传递算法(Message Passing Algorithm, MPA)或其改进版本log-MPA来进行多用户检测。

 

       在一个SCMA系统中,假设有J个用户共享K个正交资源元素(如OFDM子载波),且满足J>K。每个用户都有一个预定义的码本,码本中的每个码字都是一个K维的稀疏向量。用户根据自己的数据选择码本中的一个码字进行发送。接收信号可以表示为:

 

 

 

       在接收端,需要解码多个用户的叠加信号以恢复原始信息。最大后验概率(MAP)检测是最理想的方案,但由于计算复杂度过高,在实际应用中难以实现。因此,采用近似算法,如Log-MAP(Logarithmic Maximum A Posteriori)或Loopy Message Passing Algorithm (Log-MPA),它们能在一定程度上降低复杂性的同时保持良好的性能。

 

       传统的MPA算法在迭代过程中涉及大量的指数运算和乘法运算,计算复杂度较高。为了降低复杂度,log-MPA算法被提出。log-MPA算法将概率域的计算转换到对数域进行,利用对数域的加法运算来代替概率域的乘法运算,从而减少了计算量。

 

 

 

        Log-MPA算法不断进行上述消息传递直到收敛或达到预设的最大迭代次数,最后根据各个变量节点的最终消息分布估计用户发送的星座符号。

 

       log-MPA算法通过将对数似然比的计算转换到对数域进行,显著降低了计算复杂度。然而,这种转换也带来了一定的性能损失。与传统的MPA算法相比,log-MPA算法在误码率(BER)和误帧率(FER)方面可能会有所增加。但是,通过合理的参数选择和迭代次数控制,这种性能损失可以被控制在可接受的范围内。

 

3.MATLAB核心程序

 

for Niter = [1 5 10 30]; % 迭代次数
    for k = 1:length(SNR)
            %%% 对LLR进行硬判决
            datar= LLR';
            datar(datar>0)=0;
            datar(datar<0)=1;
            err          = sum(xor(din',datar));
            Nerr(:,k,j)  = Nerr(:,k,j) + err.';
            Nbits(:,k,j) = Nbits(:,k,j) + log2(M)*N;
            %%% 计算BER
            BER(:,k,j) = Nerr(:,k,j)./Nbits(:,k,j);
        end
    end
 
    if Niter == 1
        semilogy(EbN0,sum(mean(BER,3)),'-bs',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.0,0.0]);
    end
    hold on;
    if Niter == 5
        semilogy(EbN0,sum(mean(BER,3)),'-mo',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.5,0.9,0.0]);
    end
    hold on;
    if Niter == 10
        semilogy(EbN0,sum(mean(BER,3)),'-r>',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.9,0.0]);
    end
    hold on;
    if Niter == 30
        semilogy(EbN0,sum(mean(BER,3)),'-k<',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.3,0.3]);
 
    end
    hold on;
end
ylabel('BER');
xlabel('Eb/N0(dB)');
grid on;
legend('第1次迭代','第5次迭代','第10次迭代','第30次迭代')

 

  

 

标签:误码率,log,MPA,SCMA,码本,算法,datar
From: https://www.cnblogs.com/51matlab/p/18093934

相关文章

  • 【独立开发前线】Vol.16 推荐6个生成产品ICON图标产品LOGO的网站
    对于独立开发者而言,很大一个问题就是需要设计ICON和LOGO,今天为大家推荐6款神器,帮你快速搞定它们;1.IconKitchenIconKitchen2.Logofa.stLogoFast|MakeBeautifulLogosFastandFree3.Logostore.aiLogoStoreAI4.LogotouseLogoToUse-Freehigh-qualityLo......
  • 中考英语首字母快速突破016-2021上海长宁英语二模-Coping Tips for Impatience-应对不
    PDF格式公众号回复关键字:ZKSZM016原文​Impatientpeopleareoftenseenasproudandself-important.Beingimpatientcanaffectyourrelationshipsatworkandathomenegatively(有害地).Peoplewillsenseangerfromyouandnotlike(71)dwithyouif......
  • Logistic回归
    一、线性回归简介线性回归模型是指采用线性组合形式的回归模型,在线性回归问题中,因变量和自变量之间是线性关系的。对于第i个因变量xi,我们乘以权重系数wi,取y为因变量的线性组合:y=f(x)=wⁱxⁱ+…+wⁿxⁿ+b其中b为常数项。若w=(w¹…wⁿ),则上式可以写成向量形式:y=f(x)=wᵀx+b......
  • TreeMap从添加第二个元素开始,需要进行排序,原始类继承Comparable<Student>接口实现comp
    重写compareTo方法,关于o的理解@OverridepublicintcompareTo(Studento){//关于o,是红黑树中从第二个开始进入的元素,需//要和已存在的元素比较,该o是在第二个add//调用时,传入这里的Student对象。//根据题设,先用年龄排序in......
  • verilog注释及vscode插件terosHDL
    模型功能实现代码的注释的方法基于vscode的文档自动生成模型框图`timescale1ns/1ps/**///*******************************************************************************//Company:FpgaPublish//Engineer:FP////CreateDate:2024/03/2412:39:43......
  • (8-5)图像特征提取:基于LoG、DoG 和DoH 的斑点检测器
    8.5 基于LoG、DoG和DoH的斑点检测器斑点检测器是一种常用的图像处理技术,用于检测图像中的离散点、小斑点或孤立的亮暗区域。在斑点检测中,LoG(LaplacianofGaussian)、DoG(DifferenceofGaussian)和DoH(DeterminantofHessian)是常用的滤波器或特征算子。8.5.1 LoG(Laplacia......
  • 使用Log4j2输出日志演示
    pom.xml引入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><!--去掉SpringBoot默认日志配置-->......
  • verilog模型概述
    模型功能verilog是硬件描述语言的一种,主要用于ASIC和FPGA中,用于实现数字逻辑控制。相较于VHDL,verilog的语法更加接近C语言,格式也更加宽松,具备更强的灵活性。模型框图verilog在FPGA内主要用于描述寄存器行为以及连线关系,也可以通过特定的原语实现特殊硬件的调用,比如BRAM、O......
  • 鸿蒙开发,使用http返回的响应数据无法正常获取 ,利用hilog打印日志一直结果是object或者
    项目场景:这里简述项目相关背景:前后端分离项目,使用鸿蒙做前端,后端SpringBoot写好接口(通过商品分类id查询商品列表),鸿蒙前端页面使用Tabs组件导航,展示商品分类,点击分类标签,查询后端接口,返回对应分类商品列表数据项目场景:鸿蒙开发,使用http返回的响应数据无法正常获取,利用hilo......
  • 【python】(05)如何python中的logging模块记录日志信息
    系列文章回顾【python】(01)初识装饰器Decorator【python】(02)初识迭代器Iterator【python】(03)初识生成器Generator【python】(04)python中实现多任务并发和并行的区别【python】(05)如何python中的logging模块记录日志信息文章目录一.Logging模块的常用组......