您现在的位置:首页 >> 通信 >> 内容

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

时间:2022/12/22 18:05:07 点击:

  核心提示:A139,包括程序操作录像...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/Y5qZm5lp

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览


3.算法概述

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

4.部分源码

thod will use it

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

A139

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168