基于polar码和SCMA的多用户检测的联合检测译码matlab仿真,polar采用SCAN软译码,SCMA用MPA算法

简介: 基于polar码和SCMA的多用户检测的联合检测译码matlab仿真,polar采用SCAN软译码,SCMA用MPA算法

1.算法描述

   构造的核心是通过信道极化(channel polarization)处理,在编码侧采用方法使各个子信道呈现出不同的可靠性,当码长持续增加时,部分信道将趋向于容量近于1的完美信道(无误码),另一部分信道趋向于容量接近于0的纯噪声信道,选择在容量接近于1的信道上直接传输信息以逼近信道容量,是唯一能够被严格证明可以达到香农极限的方法。
   构造的核心是通过信道极化(channel polarization)处理,在编码侧采用方法使各个子信道呈现出不同的可靠性,当码长持续增加时,部分信道将趋向于容量近于1的完美信道(无误码),另一部分信道趋向于容量接近于0的纯噪声信道,选择在容量接近于1的信道上直接传输信息以逼近信道容量,是唯一能够被严格证明可以达到香农极限的方法。

在解码侧,极化后的信道可用简单的逐次干扰抵消解码的方法,以较低的复杂度获得与最大似然解码相近的性能。

    2008年在国际信息论ISIT会议上,土耳其毕尔肯大学埃尔达尔·阿里坎(Erdal Arıkan)教授首次提出了这个信道极化的概念,基于该理论,他给出了人类已知的第一种能够被严格证明达到信道容量的信道编码方法,并命名为极化码
    华为2016宣布4月份率先完成中国IMT-2020(5G)推进组第一阶段的空口关键技术验证测试,在5G信道编码领域全部使用极化码,2016年11月17日国际无线标准化机构3GPP第87次会议在美国拉斯维加斯召开,中国华为主推PolarCode(极化码)方案,美国高通主推低密度奇偶检查码(LDPC)方案,法国主推Turbo2.0方案,最终控制信道编码由极化码胜出。
    极化码(Polar Codes)是一种新型编码方式,也是3GPP标准制定中的一种候选编码技术方案,通过对华为极化码试验样机在静止和移动场景下的性能测试,针对短码长和长码长两种场景,在相同信道条件下,相对于Turbo码,可以获得0.3~0.6dB的误包率性能增益,同时,华为还测试了极化码与高频段通信相结合,实现了20Gbps以上的数据传输速率,验证了极化码可有效支持ITU所定义的三大应用场景。

    Polar码的主要思想是将多个子信道合并成一个等效信道,然后将等效信道分裂成多个信道容量呈两极分化(信道容量接近0或者1)的子信道,最后将信息在信道容量接近1的无噪子信道发送信息,而在信道容量接近0的子信道上发送收发已知的比特信息,从而提高信息传输的可靠性。
   Polar码的极化过程主要由两步来完成,第一步:信道联合;第二步:信道分裂。下面对这两步进行简单介绍:

image.png

  SCMA(Sparse Code Multiple Access,稀疏码分多址接入)技术是由华为公司所提出的第二个第五代移动通信网络全新空口核心技术,引入稀疏编码对照簿,通过实现多个用户在码域的多址接入来实现无线频谱资源利用效率的提升。SCMA码本设计是其核心,码本设计主要是两大部分:1.低密度扩频;2.高维QAM调制。将这两种技术结合,通过共轭、置换、相位旋转等操作选出具有最佳性能的码本集合,不同用户采用不同的码本进行信息传输。码本具有稀疏性是由于采用了低密度扩频方式,从而实现更有效的用户资源分配及更高的频谱利用;码本所采用的高维调制通过幅度和相位调制将星座点的欧式距离拉得更远,保证多用户占有资源的情况下利于接收端解调并且保证非正交复用用户之间的抗干扰能力。

2.仿真效果预览
matlab2013b仿真结果如下:

image.png

3.MATLAB核心程序

crc_size = 0;
[FZlookup,bitreversedindices,F_kron_n] = initPC(polar_N,polar_K,polar_n,construction_method,design_snr_dB,sigma,crc_size); 
 
alpha = 0.6;
iter_num = 5;
isInterleaver = 1;
 
load('codebook_6users_4chips_qpsk.mat','CB');
 
K = size(CB, 1); % number of orthogonal resources
M = size(CB, 2); % number of codewords in each codebook
V = size(CB, 3); % number of users (layers)
%polar initial and encoding
 
 
 
SCAN_ITER_NUM = 1;
N = polar_N/log2(M); %Number of scma symbols of each user
SNR  = EbN0 + 10*log10(polar_K/polar_N*log2(M)*V/K);
N0 = 1./10.^(SNR/10); % Noise variance
 
Nerr = zeros(1,length(EbN0));
Nbits = zeros(1,length(EbN0));
BER   = zeros(1, length(EbN0));
 
%maxNumErrs = 10000;
maxNumBits = 1e7; %total numer of bits
minNumBits = 50000;
minNumErrs = 50;
 
 
 
 
for iter_ebn0 = 1:length(EbN0)
 
    while ((min(Nerr(:,iter_ebn0)) < minNumErrs) && (Nbits(1,iter_ebn0) < maxNumBits) || (Nbits(1,iter_ebn0) <minNumBits) )%100 010 000
        infobits = randi([0 1],V,polar_K);
        c = zeros(V,polar_N);
        for user = 1:V
            c(user,:) = pencode(infobits(user,:),FZlookup,crc_size,bitreversedindices,F_kron_n); 
        end
        
        if isInterleaver ~= 0
            interleaver = zeros(V,polar_N);
            interleavered_bits = zeros(size(c));
            for ii = 1:V
                interleaver(ii,:) = randperm(polar_N);
                interleavered_bits(ii,:) = c(ii, interleaver(ii,:));
            end
            
        else
            interleavered_bits = c;
        end
        
        temp1 = reshape(interleavered_bits',polar_N*V,1);
        temp2 = reshape(temp1,log2(M),N*V);
        x_temp = bi2de(temp2',log2(M),'left-msb');
        x = reshape(x_temp,N,V);
        x = x';
        %h = 1/sqrt(2)*(randn(K, V, N)+1j*randn(K, V, N)); % Rayleigh channel
        h = ones(K, V, N);
        %h = 1/sqrt(2)*(repmat(randn(1, V, N), K, 1)+1j*repmat(randn(1, V, N), K, 1));
        s = scmaenc(x, CB, h); 
        y = awgn(s, SNR(iter_ebn0),'measured');
        
        %Factor graph calculation
        
        
        
        mhat_llr = JIDD(y,polar_N,polar_K,FZlookup,K,V,M,N,CB,N0(iter_ebn0),h,iter_num,isInterleaver,interleaver,alpha);
        
        %**********************************************************
        llr = reshape(mhat_llr',1,V*polar_K);
        m_reshape = reshape(infobits', 1, polar_K*V);
        m_hat = llr<0;
        err = sum(m_hat~=m_reshape);
        Nerr(iter_ebn0) = Nerr(iter_ebn0) + err;
        Nbits(iter_ebn0) = Nbits(iter_ebn0) + length(m_reshape);     
    end
    
    BER(iter_ebn0) = Nerr(iter_ebn0)/Nbits(iter_ebn0);    
    
    fprintf('EbN0 is %d, have runned %d bits, found %d errors, BER=%.7f \n',EbN0(iter_ebn0),Nbits(iter_ebn0),Nerr(iter_ebn0),BER(iter_ebn0));
   
    
    
end
相关文章
|
11月前
|
算法
基于MPPT算法的光伏并网发电系统simulink建模与仿真
本课题基于MATLAB/Simulink搭建光伏并网发电系统模型,集成PV模块、MPPT算法、PWM控制与并网电路,实现最大功率跟踪与电能高效并网。通过仿真验证系统在不同环境下的动态响应与稳定性,采用SVPWM与电流闭环控制,确保输出电流与电网同频同相,满足并网电能质量要求。
|
12月前
|
数据可视化
基于MATLAB的OFDM调制发射与接收仿真
基于MATLAB的OFDM调制发射与接收仿真
|
11月前
|
5G
基于IEEE 802.11a标准的物理层MATLAB仿真
基于IEEE 802.11a标准的物理层MATLAB仿真
547 0
|
11月前
|
算法
基于MATLAB/Simulink平台搭建同步电机、异步电机和双馈风机仿真模型
基于MATLAB/Simulink平台搭建同步电机、异步电机和双馈风机仿真模型
1201 30
|
11月前
|
机器学习/深度学习 算法 数据可视化
基于MVO多元宇宙优化的DBSCAN聚类算法matlab仿真
本程序基于MATLAB实现MVO优化的DBSCAN聚类算法,通过多元宇宙优化自动搜索最优参数Eps与MinPts,提升聚类精度。对比传统DBSCAN,MVO-DBSCAN有效克服参数依赖问题,适应复杂数据分布,增强鲁棒性,适用于非均匀密度数据集的高效聚类分析。
|
11月前
|
开发框架 算法 .NET
基于ADMM无穷范数检测算法的MIMO通信系统信号检测MATLAB仿真,对比ML,MMSE,ZF以及LAMA
简介:本文介绍基于ADMM的MIMO信号检测算法,结合无穷范数优化与交替方向乘子法,降低计算复杂度并提升检测性能。涵盖MATLAB 2024b实现效果图、核心代码及详细注释,并对比ML、MMSE、ZF、OCD_MMSE与LAMA等算法。重点分析LAMA基于消息传递的低复杂度优势,适用于大规模MIMO系统,为通信系统检测提供理论支持与实践方案。(238字)
|
12月前
|
监控
基于MATLAB/Simulink的单机带负荷仿真系统搭建
使用MATLAB/Simulink平台搭建一个单机带负荷的电力系统仿真模型。该系统包括同步发电机、励磁系统、调速系统、变压器、输电线路以及不同类型的负荷模型。
1625 5
|
12月前
|
机器学习/深度学习 传感器 算法
【裂纹检测】检测和标记图片中的裂缝(Matlab代码实现)
【裂纹检测】检测和标记图片中的裂缝(Matlab代码实现)
475 5
|
12月前
|
机器学习/深度学习 边缘计算 算法
【无人机】无人机群在三维环境中的碰撞和静态避障仿真(Matlab代码实现)
【无人机】无人机群在三维环境中的碰撞和静态避障仿真(Matlab代码实现)
466 0
|
12月前
|
算法 数据建模 调度
【INC-MPPT】增量导纳算法追踪光伏的最大功率点用于光伏的并网接入研究(Simulink仿真实现)
【INC-MPPT】增量导纳算法追踪光伏的最大功率点用于光伏的并网接入研究(Simulink仿真实现)
264 0

热门文章

最新文章