m基于多用户MIMO系统的分布式可重构注水算法的matlab仿真(含参考文献,仿真操作录像和说明文档)

目录

1.源码获取方式

2.部分仿真图预览

3.算法描述

4.部分程序


1.源码获取方式

使用版本matlab2022a

获取方式1:

点击下载链接(解压密码C+123456):

m基于多用户MIMO系统的分布式可重构注水算法的matlab仿真

获取方式2:

如果下载链接失效,加博主微信联系,或私信联系。

2.部分仿真图预览

m基于多用户MIMO系统的分布式可重构注水算法的matlab仿真(含参考文献,仿真操作录像和说明文档)_第1张图片

 m基于多用户MIMO系统的分布式可重构注水算法的matlab仿真(含参考文献,仿真操作录像和说明文档)_第2张图片

 m基于多用户MIMO系统的分布式可重构注水算法的matlab仿真(含参考文献,仿真操作录像和说明文档)_第3张图片

 m基于多用户MIMO系统的分布式可重构注水算法的matlab仿真(含参考文献,仿真操作录像和说明文档)_第4张图片

 m基于多用户MIMO系统的分布式可重构注水算法的matlab仿真(含参考文献,仿真操作录像和说明文档)_第5张图片

3.算法描述

       在单用户MIMO场景中,空间复用技术能够带来高数据速率的传输,但是也需要一些前提条件,比如发射端的预编码或者接收端的信道估计与信号检测。然而,在大多数的通信系统中,不只是有单个用户在进行通信,而是需要大量用户共享资源与基站去进行通信。

     算法的主要流程根据提供的参考文献论文可知:

m基于多用户MIMO系统的分布式可重构注水算法的matlab仿真(含参考文献,仿真操作录像和说明文档)_第6张图片

这里我说明一下我们的算法的含义

步骤1:

这个就是设置T和R的最小值,设置为dk,然后设置Vk和Pk,具体变量含义看论文。这个部分程序如下所示:

步骤2~4:

根据公式11和10进行计算,

m基于多用户MIMO系统的分布式可重构注水算法的matlab仿真(含参考文献,仿真操作录像和说明文档)_第7张图片

这个部分程序设计的时候体现在整体的循环中,如下所示:

步骤5

m基于多用户MIMO系统的分布式可重构注水算法的matlab仿真(含参考文献,仿真操作录像和说明文档)_第8张图片

步骤6

m基于多用户MIMO系统的分布式可重构注水算法的matlab仿真(含参考文献,仿真操作录像和说明文档)_第9张图片

这个部分的计算代码如下所示:

步骤7

这个部分的计算代码如下所示:

步骤8

步骤9

步骤10

这个部分的计算代码如下所示:

之前做的是过程中,主要是上述算法涉及到大量的矩阵运算,对于矩阵的维度容易弄错而导致算法出错,后来逐一排查后才解决了这个问题。

4.部分程序

clc;
clear;
close all;
addpath 'func\'
addpath 'func\cvx\'
addpath 'func\cvx\structures\'
addpath 'func\cvx\lib\'
addpath 'func\cvx\functions\'
addpath 'func\cvx\commands\'
addpath 'func\cvx\builtins\'
%调用cvx工具箱
cvx_setup;
clc;


Ntr          = 4;
Nrr          = 4;
Tc           = 200;
Frame_length = 40;
SNR          = [-10:1:1];
LoopNum      = 2000;

Rate1        = zeros(1,length(SNR)); 
Rate2        = zeros(1,length(SNR));
Rate3        = zeros(1,length(SNR));

BER1         = zeros(1,length(SNR));
BER2         = zeros(1,length(SNR));
BER3         = zeros(1,length(SNR));


for snr_j=1:length(SNR)
    snr_j
    sigma    = 1/(10.^(SNR(snr_j)/10));
    Rate1tmp = 0;
    Rate2tmp = 0;
    Rate3tmp = 0;

    count1   = 0;
    count2   = 0;
    count3   = 0;
    NUM      = LoopNum*Nrr*Frame_length*Tc;
    for mtkl=1:LoopNum
        qpsk_1          = zeros(Frame_length,2*Tc);
        qpsk_2          = zeros(Frame_length,Tc);
        %调制
        [qpsk_1,qpsk_2] = func_QPSK(Frame_length,Tc);       
        %产生信道
        H_real          = randn(Frame_length,Ntr);
        H_imag          = randn(Frame_length,Ntr);
        H               = complex(H_real,H_imag);
        w_real          = sqrt(sigma/2)*randn(Frame_length,Tc);
        w_imag          = sqrt(sigma/2)*randn(Frame_length,Tc);
        w               = complex(w_real,w_imag);
        %Reconfigurable
        [Sh_tmp1,u1]    = func_Reconfigurable(Ntr,Frame_length,Nrr,H,sigma,1);
        [CNT1]          = func_rec1(Ntr,Nrr,[1:Nrr],Tc,qpsk_1,qpsk_2,H,sigma,w,u1,ones(1,Nrr),Sh_tmp1,NUM);      
        count1          = count1 + CNT1;
        %Optimized Subspaece IA
        [Sh_tmp2,u2]    = func_Optimized_Subspaece_IA(Ntr,Frame_length,Nrr,H,sigma);
        [CNT2]          = func_rec2(Ntr,Nrr,Sh_tmp2,Tc,qpsk_1,qpsk_2,H,sigma,w,u2,ones(1,Nrr),NUM);
        count2          = count2 + CNT2;
        %MaxSLNR
        [Sh_tmp3,u3]    = func_MaxSLNR(Ntr,Frame_length,Nrr,H,sigma);
        [CNT3]          = func_rec3(Ntr,Nrr,Sh_tmp3,Tc,qpsk_1,qpsk_2,H,sigma,w,u3,ones(1,Nrr),NUM);
        count3          = count3 + CNT3;
    end

    BER1(snr_j)=count1/(NUM);
    BER2(snr_j)=count2/(NUM);
    BER3(snr_j)=count3/(NUM);
end

 
figure
semilogy(SNR,BER1,'k-o');
hold on;
semilogy(SNR,BER2,'k-s');
hold on;
semilogy(SNR,BER3,'k-^');
hold on;


xlabel('Transmit SNR per Tx,P(dB)');
ylabel('error');
legend('Reconfigurable','Optimized Subspaece IA','MaxSLNR');
grid on

 

01-130m

你可能感兴趣的:(Matlab通信和信号,多用户MIMO,分布式可重构注水算法)