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

article/2025/9/24 5:25:10

目录

1.算法描述

2.仿真效果预览

3.MATLAB核心程序

4.完整MATLAB


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码的极化过程主要由两步来完成,第一步:信道联合;第二步:信道分裂。下面对这两步进行简单介绍:

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

2.仿真效果预览

matlab2013b仿真结果如下:

3.MATLAB核心程序

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 encodingSCAN_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 varianceNerr = 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 000infobits = randi([0 1],V,polar_K);c = zeros(V,polar_N);for user = 1:Vc(user,:) = pencode(infobits(user,:),FZlookup,crc_size,bitreversedindices,F_kron_n); endif isInterleaver ~= 0interleaver = zeros(V,polar_N);interleavered_bits = zeros(size(c));for ii = 1:Vinterleaver(ii,:) = randperm(polar_N);interleavered_bits(ii,:) = c(ii, interleaver(ii,:));endelseinterleavered_bits = c;endtemp1 = 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 channelh = 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 calculationmhat_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);     endBER(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

4.完整MATLAB

V


http://chatgpt.dhexx.cn/article/tKjKGiIL.shtml

相关文章

OTFS-SCMA学习笔记

参考资料&#xff1a;OTFS-SCMA: A Downlink NOMA Scheme for Massive Connectivity in High Mobility Channels OTFS系统流程 X [ m , n ] X[m,n] X[m,n]是DD时延多普勒域 Γ { ( m M Δ f , n N T ) , m 0 , … , M − 1 , n 0 , … , N − 1 } \Gamma\left\{\left(\frac…

【通信】基于Matlab模拟SCMA系统时延调度算法

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 ⛄ 内容介绍 稀疏码多址接入(Sparse Code Multiple …

SCMA基本原理介绍

SCMA: Sparse Code Multiple Access SCMA基本原理 我们考虑一个同步&#xff08;synchronous&#xff09;的SCMA系统&#xff0c; 含1个基站&#xff08;Base Station, BS&#xff09;&#xff1b; J J J个用户&#xff08;so called layers&#xff09;&#xff1b;K个OFDM…

面向5G移动通信的新型多址接入技术-SCMA

从移动通信发展历程来看&#xff0c;通信几乎每隔十年就会换代升级&#xff0c;从80年代的1G通信主要是以语音为主&#xff0c;调制方式是FDMA&#xff1b;90年代2G通信发展了短信传输&#xff0c;调制方式有CDMA,TDMA等&#xff1b;2000年前后3G通信出现&#xff0c;传输速率加…

使用JMeter进行压力测试

1. 引言 在日常开发中&#xff0c;当完成一个接口开发时&#xff0c;需要对接口进行准确性测试&#xff0c;比如PostMan、Swagger等&#xff0c;但在接口上线运行前对其进行性能测试是很有必要的&#xff0c;就是所谓的接口压力测试。 压力测试就是考察当前软硬件环境下系统所…

JMeter进行API服务的压力测试

文章目录 前言一、准备工作1.安装jmeter2.安装java环境 二、JMeter使用样例1.运行JMeter2.创建调用流程1.背景阐述&#xff1a;2.JMeter模拟调用1.添加线程组&#xff1a;2.请求设置3.创建请求流程4.响应时长展示5.监控服务器CPU&#xff0c;MEM&#xff0c;I/O等 前言 本文用…

使用jmeter进行http压力测试(适合小白观看)

今天2019年2月4日&#xff0c;除夕贴完对联等着过大年了&#xff01; 今天来更新一篇博客&#xff0c;关于如何使用 jmeter 对web 进行压力测试&#xff0c;由于我的个人电脑是 deepin(Linux) 操作系统&#xff0c;因此这里就在Linux环境下演示&#xff0c;其实 Linux 演示和 w…

压力测试-Jmeter

我们在开发的过程中&#xff0c;如果遇到系统预估访问量会比较大的时候&#xff0c;或者我们再做底层基础服务的时候&#xff0c;往往需要对我们的服务性能做一些压力测试和稳定性测试&#xff0c;市面上有很多压测工具&#xff0c;今天我们主要讲解的是Jmeter压力测试工具&…

软件jmeter压力测试实例,jmeter压力测试案例实战

1、 测试目标地址:http://www.cnblogs.com/ 2、 1秒内有100个用户同时访问,看性能如何 3、 步骤 线程组、http请求、查看结果树、聚合报告 添加http请求如下: 继续填入参数格式: 服务器或名称IP:www.cnblogs.com 端口号:80 Connect:1000 Response:1000 添加查看结…

Jmeter负载和压力测试

负载和压力的区别: 负载测试:在一定的工作负荷下,给系统造成du的负zhi荷及系统响应的时间。 压力测试:在一定的负荷条件下,长时间连续运行系统给系统性能造成的影响。 TPS和QPS的区别: tps可以理解为是每秒对事务的处理的能力 qps是每秒对服务器的查询能力 性能测试w…

Jmeter 压力测试 - Http2.0工具支持-【教学篇】

Jmeter快速使用 特此郑重声明&#xff01;该文章是原创作品&#xff0c;小编编写实属不易 &#xff0c;帮忙点赞关注一下~转载小伙伴请注明出处&#xff01;谢谢 概述 Apache JMeter Apache组织开发的压力测试工具。目前通过HTTP和FTP服务器用于对软件做压力测试&#xff0c;它…

Http压力测试工具HttpTest4Net

HttpTest4Net是一款基于C#实现的和HTTP压力测试工具,通过工具可以简单地对HTTP服务进行一个压力测试.虽然VS.NET也集成了压力测试项目,但由于VS自身占用的资源导致了在配置不高的PC上难以做到高并发压力测试,再加上需要装VS这个样一个庞大的工具也是件很麻烦的事情.使用HttpTes…

JMeter之压力测试

一、什么是压力测试 软件测试中&#xff1a;压力测试&#xff08;Stress Test&#xff09;&#xff0c;也称为强度测试、负载测试。压力测试是模拟实际应用的软硬件环境及用户使用过程的系统负荷&#xff0c;长时间或超大负荷地运行测试软件&#xff0c;来测试被测系统的性能、…

Jmeter登录压力测试

1.配置海量用户账号数据登录测试 usernamepassword1K.csv 用户名& 密码MD5加密 2. 启动jmeter.bat&#xff0c;新增测试计划 3.配置CSV文件 4.配置信息头 5. 配置http请求默认值 6.配置http请求账号&密码 配置查看结果树&聚合报告

Jmeter压力测试步骤

1.选择语言 Jmeter默认英文&#xff0c;切换语言为中文 2.创建线程组 点击选中测试计划&#xff0c;右键点击添加线程组 点击线程组&#xff0c;这里可以设置名称&#xff0c;添加注释&#xff0c;设置线程数&#xff08;每次有多少线程同时开启)、线程响应时间&#xff08;…

Jmeter接口压力测试

一&#xff0e;创建测试用例 Jmeter主界面&#xff1a; 1.添加线程组 测试计划 &#xff08;右键->添加->Threads&#xff08;Users&#xff09;->线程组&#xff09;&#xff0c;修改线程组名称为“登录”&#xff0c;可添加多个线程组&#xff0c;设置线程数&…

jmeter进行http压力测试

jmeter进行http压力测试 下载地址 下载地址&#xff1a;http://jmeter.apache.org/download_jmeter.cgi JMeter基于Java开发&#xff0c;需要系统有安装JDK环境。解压后进入bin目录&#xff0c;点击jmeter.bat 1、添加线程组&#xff1a; 测试计划 -> 添加 -> Threads…

压力测试 - HTTP压测工具stress指南

2019.03.19重新修改&#xff08;之前的使用安装方式有误&#xff01;&#xff09; Stress安装指南 github地址&#xff1a;https://github.com/buaazp/stress 使用环境&#xff1a;macOS 或者 Linux &#xff08;Windows用户请安装虚拟机或者Linux服务&#xff0c;如git工具…

jmeter进行http压力测试(图文小教程)

下载地址&#xff1a;http://jmeter.apache.org/download_jmeter.cgi JMeter基于Java开发&#xff0c;需要系统有安装JDK环境。解压后进入bin目录&#xff0c;点击jmeter.bat​​​​​​​ 1、添加线程组&#xff1a; 测试计划 -> 添加 -> Threads(User) -> 线程组…

如何使用Jemeter对HTTP接口压测

我们不应该仅仅局限于某一种工具,性能测试能使用的工具非常多,选择适合的就是最好的。笔者已经使用Loadrunner进行多年的项目性能测试实战经验,也算略有小成,任何性能测试(如压力测试、负载测试、疲劳强度测试等)都可以使用该工具。但我并不鼓励这样做,我们应该根据当前…