【通信】非正交多址接入(NOMA)和正交频分多址接入(OFDMA)的性能对比附matlab代码

news/2024/11/9 0:06:07/

1 内容介绍

随着移动通信的快速发展,数据流量急剧增长,频谱资源开始日益缺乏,能源消耗也在不断加大,而第五代移动通信(5G)中的非正交多址接入(NOMA)技术正是解决这些问题的关键.在NOMA技术中,通过功率域实现多用户复用并共享相同的频谱资源,在接收端采用串行干扰删除(SIC)技术实现多用户检测.由于功率复用可以区分用户,实现系统容量和频谱效率的提升,因此成为本文研究的重点. 首先,引入NOMA系统下行链路的系统模型,在此模型上以两用户为例验证了NOMA技术相较于正交频分多址接入(OFDMA)技术的性能增益,并总结了NOMA技术的特点优势和应用场景.随后对NOMA中的关键技术进行介绍,重点研究了现有三种经典的功率分配算法.

2 部分代码

clc; close all; clear all;

% addpath('.\comm');

% addpath('.\lte');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Performance comparison of NOMA-OFDM system and      %

% traditional OFDMA system, % Vision 1.0.0, 2017/4/8. %

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% 参数

order_psk = [2,4,8,16,64];      % PSK符号阶数,2表示BPSK,4表示4PSK,以此类推

for order = 1:length(order_psk)

    sym_total = 2.048e4*52; % 总符号数

    len_turbo = 1280;   % Turbo码长

    bit_total = sym_total * log2(order_psk(order));

    N_ofdma_u1 = 26;    % OFDMA用户1的子载波数

    N_ofdma_u2 = 26;    % OFDMA用户2的子载波数

    p1 = 0.1;           % NOMA用户1的功率

    p2 = 0.9;           % NOMA用户2的功率

    N_ofdm = 64;        % OFDM子载波数

    N_data = 52;        % 数据载波数

    N_GB = [4; 3];      % 载波间隔参数

    N_P = [12; 26; 40; 54]; % 导频参数

    CP = 1/4;           % CP占比

    Ts = 1/10000;

    FD = 500;           % 瑞利信道参数

    SNR = 25:1:60;           % 信噪比 

    %% 参数合理性判断

    if (mod(bit_total, len_turbo)~=0)

        error('总比特数必须是Turbo编码长度的整数倍');

    end

    if (mod((3*len_turbo+12)*bit_total/len_turbo, N_data)~=0)

        error('总比特数必须保证OFDM符号完整');

    end

    if (N_ofdma_u1+N_ofdma_u2~=N_data)

        error('OFDMA中两用户的子载波数目之和必须等于数据载波总数');

    end

    if (p1+p2~=1)

        error('功率系数p1与p2之和必须等于1');

    end

    %% 生成两个用户的发射符号序列,加入Turbo编码

    [sym_seq_u1, bit_seq_u1] = data_gen(bit_total, len_turbo, order_psk(order));

    [sym_seq_u2, bit_seq_u2] = data_gen(bit_total, len_turbo, order_psk(order));

    % mean(abs(sym_seq_u1).^2)

    % mean(abs(sym_seq_u2).^2)

    %% NOMA和OFDMA

    sym_seq_noma = noma_enc(sym_seq_u1, sym_seq_u2, p1, p2);

    % mean(abs(sym_seq_noma).^2)

    % 对两用户数据进行NOMA编码

    sym_seq_ofdma = ofdma_enc(sym_seq_u1, sym_seq_u2, N_ofdma_u1, N_ofdma_u2);

    % mean(abs(sym_seq_ofdma).^2)

    % 对两用户数据进行OFDMA编码

    %% OFDM调制

    num_ofdmsym_noma = length(sym_seq_noma)/N_data;

    mod_ofdm_noma = comm.OFDMModulator(...

    'FFTLength',N_ofdm,...

    'NumGuardBandCarriers',N_GB,...

    'PilotInputPort',true,...

    'PilotCarrierIndices',N_P,...

    'NumSymbols',num_ofdmsym_noma,...

    'CyclicPrefixLength',N_ofdm*CP,...

    'InsertDCNull',true);

    % 构造NOMA的OFDM调制器

    num_ofdmsym_ofdma = length(sym_seq_ofdma)/N_data;

    mod_ofdm_ofdma = comm.OFDMModulator(...

    'FFTLength',N_ofdm,...

    'NumGuardBandCarriers',N_GB,...

    'PilotInputPort',true,...

    'PilotCarrierIndices',N_P,...

    'NumSymbols',num_ofdmsym_ofdma,...

    'CyclicPrefixLength',N_ofdm*CP,...

    'InsertDCNull',true);

    % 构造OFDMA的OFDM调制器

    tx_noma = ofdm_tx(sym_seq_noma, mod_ofdm_noma);

    % tx_noma = sym_seq_noma;

    tx_ofdma = ofdm_tx(sym_seq_ofdma, mod_ofdm_ofdma);

    % OFDM调制

    % mean(abs(tx_noma).^2)

    % mean(abs(tx_ofdma).^2)

    for snr = 1:length(SNR)

        %% 瑞利信道

    %     crl = rayleighchan(Ts, FD);

    %     tx_noma = filter(crl, tx_noma);

    %     tx_ofdma = filter(crl, tx_ofdma);

        cawgn = comm.AWGNChannel('NoiseMethod', 'Signal to noise ratio (SNR)');

        cawgn.SNR = SNR(snr);

        rx_noma = step(cawgn, tx_noma);

        rx_ofdma = step(cawgn, tx_ofdma);

        % mean(abs(rx_noma).^2)

        % mean(abs(rx_ofdma).^2)

        % 接收信号经过瑞利信道与加入高斯噪声

        %% OFDM解调

        sym_seq_noma_mat = ofdm_rx(rx_noma, mod_ofdm_noma);

        sym_seq_noma = reshape(sym_seq_noma_mat, numel(sym_seq_noma_mat), 1);

    %     sym_seq_noma = rx_noma;

        sym_seq_ofdma_mat = ofdm_rx(rx_ofdma, mod_ofdm_ofdma);

        sym_seq_ofdma = reshape(sym_seq_ofdma_mat, numel(sym_seq_ofdma_mat), 1);

        % mean(abs(sym_seq_noma).^2)

        % mean(abs(sym_seq_ofdma).^2)

        %% NOMA和OFDMA解码

        if (p1>p2)

            [bit_u1, bit_u2] = noma_dec(sym_seq_noma, len_turbo, order_psk(order), p1, p2);

        else

            [bit_u2, bit_u1] = noma_dec(sym_seq_noma, len_turbo, order_psk(order), p2, p1);

        end

        [n1,r1(order, snr)] = biterr(bit_u1,bit_seq_u1);

        [n2,r2(order, snr)] = biterr(bit_u2,bit_seq_u2);

        % 按照功率顺序解码用户1和用户2的符号序列

        [bit_u11, bit_u22] = ofdma_dec(sym_seq_ofdma, len_turbo, order_psk(order), N_ofdma_u1, N_ofdma_u2);

        [n11,r11(order,snr)] = biterr(bit_u11,bit_seq_u1(1:length(bit_u11)));

        [n22,r22(order,snr)] = biterr(bit_u22,bit_seq_u2(1:length(bit_u22)));

        [r1(order,snr), r2(order,snr), r11(order,snr), r22(order,snr)]

    end

    

end

save('ber.mat','r1','r2','r11','r22');

plot_ber(order_psk, SNR, N_data, p1, p2, N_ofdma_u1, N_ofdma_u2);

% rmpath('.\comm');

% rmpath('.\lte');

3 运行结果

​4 参考文献

[1]张德坤. 非正交多址系统功率分配及干扰消除算法研究[D]. 哈尔滨工业大学.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机、雷达通信、无线传感器等多种领域的Matlab仿真,相关matlab代码问题可私信交流。


http://www.ppmy.cn/news/527670.html

相关文章

什么是1G, 2G, 3G, GSM, EDGE, CDMA, WCDMA, TD-SCDMA, CDMA2000

现如今,我国已经完全进入3G时代,但是什么是3G呢?3G代表什么?进入3G对我们大众有什么好处?3G之前我们用的是什么网络?2G, 3G, GSM, EDGE, CDMA, GPRS, CDMA2000, WCDMA, TDMA, TD-SCDMA 这一大堆名词是不是把…

CDMA编码实现

朋友写的。Python实现的。用的是PyCharm编译。 代码如下 def split_list_average(send, n): # 用于分割指定长度字符串 for i in range(0, len(send), n): yield send[i:i n] def check_chip(chipS, chipT, chipU, chipV): # 判断码片之间是否相互正交 def check(chipA, chi…

CDMA移动终端卡——UIM(转)

UIM(User Identity Module)代表了移动终端卡未来发展方向,它比传统的 鉴权手段如MIN/IMSI、MIN/ESN适配方式更具优势。UIM ID方式除了适用于CDMA 系统外,还可用于GSM系统和其他的TDMA方式以及第三代移动通信…

进行码分多址CDMA通信

共有四个站进行码分多址CDMA通信。四个站的码片序列为:A: (-1 -1 -1 +1 +1 -1 +1 +1). B: (-1 -1 +1 -1 +1 +1 +1 -1).C: (-1 +1 -1 +1 +1 +1 -1 -1). D: (-1 +1 -1 -1 -1 -1 +1 -1).现收到的码片序列为(-1 +1 -1 -1 -1 -1 -1 +1 -1).问哪个站发送数据了?发送数据的站…

码分复用CDM(Code Division Multiplexing);码分多址CDMA(Code Division Multiple Access)

目录 码分多址码片序列实现了扩频CDMA 的重要特点CDMA 工作原理例题 码分多址 当码分复用信道为多个不同地址的用户所共享时,就称为码分多址。 每一个用户可以在同样的时间使用同样的频带进行通信,码分复用集合了频分复用和时分复用的优点。且抗干扰能力…

码分复用CDMA的原理

码分复用CDMA的原理 感性理解: ​ 可以感性的理解为:我只接受我所期望的信号类型,并且能够通过一定的方式将多个信号源分离出来。 工作原理: ​ 每一个比特时间再被细分为m个更短的时间间隔。每个时间间隔被称为码片&#xff…

xDSL:数字用户线路技术(DSL、IDSL、ADSL、HDSL、SDSL、VDSL、G.Lite)--网络大典

数字用户线路(xDSL)是在家庭和企业的普通铜质电话线路(POTS)上提供宽带数据访问的一种调制解调器技术。xDSL 是所有 DSL 类型的统称,诸如 ADSL、G.Lite、HDSL、SDSL、IDSL 和 VDSL 等。 xDSL 有时称为“最后一英里”技…

xDSL技术简介

随着xDSL技术的问世,铜线从只能传输语音和56kbts的低速数据接入,发展到已经可以传输高速数据信号。ADSL、VDSL、 GSHDSL等基于铜线传输的xDSL接入技术使铜线成为宽带用户接入的一个重要手段 在PON技术普及之前,成为宽带接入的主流技术。 xDSL系统主要由局端设备 (Digital Subsc…