• m虚拟MIMO系统的配对调度算法的matlab仿真,对比Random配对,Orthogonal配对以及Deteminant配对


    目录

    1.算法概述

    2.仿真效果预览

    3.MATLAB部分代码预览

    4.完整MATLAB程序


    1.算法概述

           利用多输入多输出(MIMO,Multiple InputMultiple Output)技术通过空间复用能够显著的提高通信系统的容量,并可以很好的缓解时/频资源日益紧张的现状。

           该技术在 LTE标准中被列为必选项,并在下行链路上得以使用。同时,与之相对应的用于上行链路的虚拟 MIMO(Virtual MIMO)系统也得到了广泛的关注。其中,针对 Virtual MIMO系统中的关键技术-用户配对机制,国内外的研究人员更是进行了大量研究工作,并提出了许多新的算法或改进。  

            Virtual MIM0技术是指通过特定的选择算法将符合标准的用户分成一组,利用相同的时/频资源来传输数据的技术。由于组内的用户同时通过各自的天线发送数据也就在上行方向上构成了类似于传统MIMO技术中的多天线发射阵列。

            但在具体的实现上,各终端用户仍然采用单天线配置,仅是通过特定的调度算法实现了采用相同无线资源的联合发送。由于该技术可以在没有增加用户终端设备的成本和发射功率的情况下,在上行传输方向构成类似于 MIMO的传输系统。因此,对于提高无线资源的利用率、改善上行链路传输容量具有积极的作用。

    2.仿真效果预览

    matlab2022a仿真

     

     

     

            从上面的仿真结果可知,采用全配对的方法,可以获得较大,但是其数据丢失率也较大,所以设计了基于SINR的配对算法,这样可以根据实际的噪声等干扰因素的影响来进行合理的配对。

    3.MATLAB部分代码预览

    1. M = 2;
    2. N = 2;
    3. % Pt = 14;%发射功率
    4. % Gt = 64;%发送天线的增益
    5. % Gr = 64;%接收天线的增益
    6. % R = 0.6;%小区半径
    7. % Phatloss = 128.1 + 37.6*log10(R);%路径损耗
    8. % Shadowfading = 8;%阴影衰落
    9. % PN = 5;%噪声功率
    10. % SNRs = Pt + Gt + Gr - Phatloss - Shadowfading - PN;
    11. SNRs = 10;%定义SNR值
    12. tc = 10;%采样率
    13. Num_user = 24;%用户的个数
    14. sel = 1;%1,2,3,4,选择四种不同的方法进行仿真
    15. sel2 = 0;%0直接出图,1进行逐个仿真
    16. if sel2 == 1
    17. for j=1:Num_user
    18. j
    19. %计算第一个用户的相关值
    20. In_index = zeros(1,10*j);
    21. though_Output = zeros(1,10*j);
    22. though_Input = zeros(1,10*j);
    23. SNR = SNRs*rand(1,10*j);
    24. %调用调度函数
    25. if sel == 1%如果选择1
    26. [H,number] = func_No_Scheduling(10*j,M,N);%不进行pairing
    27. end
    28. if sel == 2%如果选择2
    29. [H,number] = func_Random_Paring_Scheduling(10*j,M,N);%随机Pairing
    30. end
    31. if sel == 3%如果选择3
    32. [H,number] = func_Orthogonal_Paring_Scheduling(10*j,M,N);%正交Pairing
    33. end
    34. if sel == 4%如果选择4
    35. [H,number] = func_Determinant_Paring_Scheduling(10*j,M,N);%行列式Pairing
    36. end
    37. %基于MMSE的接收
    38. [M,Nes] = func_MMSE_receiver(H,SNR(number));%对数据进行MMSE原则的接收
    39. sirer = zeros(1,10*j);
    40. sirer(number) = log2(1+Nes);
    41. [though_Output,indexout,uenow]=func_calc(sirer,though_Input,tc,In_index,number);%计算得到最后的输出信息量
    42. though_Input = though_Output;
    43. In_index = indexout;
    44. S(1) = sum(log2(1+Nes));
    45. %计算其余用户的相关值
    46. %以下是对其余用户做同样的运算
    47. for k=2:10*j
    48. M = 2;
    49. H = zeros();
    50. %调用调度函数
    51. if sel == 1
    52. [H,number] = func_No_Scheduling(10*j,M,N);%不进行pairing
    53. end
    54. if sel == 2
    55. [H,number] = func_Random_Paring_Scheduling(10*j,M,N);%随机Pairing
    56. end
    57. if sel == 3
    58. [H,number] = func_Orthogonal_Paring_Scheduling(10*j,M,N);%正交Pairing
    59. end
    60. if sel == 4
    61. [H,number] = func_Determinant_Paring_Scheduling(10*j,M,N);%行列式Pairing
    62. end
    63. %基于MMSE的接收
    64. [M,Nes] = func_MMSE_receiver(H,SNR(number));
    65. sirer = zeros(1,10*j);
    66. sirer(number) = log2(1+Nes);
    67. [though_Output,indexout,uenow]=func_calc(sirer,though_Input,tc,In_index,number);%计算得到最后的输出信息量
    68. though_Input = though_Output;
    69. In_index = indexout;
    70. S(k) = sum(log2(1+Nes));
    71. end
    72. %计算信道容量
    73. fair(j) = sum(though_Output)^2/(length(though_Output)*sum(though_Output.^2));
    74. SNR_Linear = 10^(SNRs/10);
    75. Capacity(j) = 0.5 * log10(1 + (SNR_Linear * sum(abs(fair(j)))));
    76. end
    77. %根据信道容量计算CDF值
    78. CDFs=func_CDF(Capacity,Num_user);
    79. if sel == 1
    80. save data0.mat CDFs%保存CDF数据
    81. end
    82. if sel == 2
    83. save data1.mat CDFs%保存CDF数据
    84. end
    85. if sel == 3
    86. save data2.mat CDFs%保存CDF数据
    87. end
    88. if sel == 4
    89. save data3.mat CDFs%保存CDF数据
    90. end
    91. else
    92. load data0.mat
    93. figure
    94. plot(1:0.5:12,CDFs,'k','LineWidth',2);grid on%使用plot进行画图
    95. hold on;
    96. load data1.mat
    97. plot(1:0.5:12,CDFs,'b','LineWidth',2);grid on%使用plot进行画图
    98. hold on;
    99. load data2.mat
    100. plot(1:0.5:12,CDFs,'r','LineWidth',2);grid on%使用plot进行画图
    101. hold on;
    102. load data3.mat
    103. plot(1:0.5:12,CDFs,'g','LineWidth',2);grid on%使用plot进行画图
    104. hold on;
    105. axis([1,12,0,1]);
    106. legend('Receive Diverse','Random Pairing','Orthogonal Pairing','Determinant Pairing');%不同的标志
    107. xlabel('Thoughout');%X坐标
    108. ylabel('CDF');%Y坐标
    109. end
    110. 01_039_m

    4.完整MATLAB程序

    matlab源码说明_我爱C编程的博客-CSDN博客

    V

  • 相关阅读:
    小雉配置--支持向上向下兼容的 配置文件 兼容性 设计
    详细剖析外边距折叠,轻松摆脱margin带来父子元素和相邻元素外边距塌陷
    Time Travel Queries|在 RisingWave 中访问历史数据
    【论文笔记】基于预训练模型的持续学习(Continual Learning)(增量学习,Incremental Learning)
    039 - sql逻辑操作符
    Unity 笔记 创建unity项目
    ARTS打卡第四周之删除链表倒数第几个节点、gdb start命令、扩散模型、如何学习分享
    获得京东商品详情 API
    el-table如何实现自动缩放,提示隐藏内容
    Prompt 编程的优化技巧
  • 原文地址:https://blog.csdn.net/hlayumi1234567/article/details/127965480