• m分集2跳OFDM系统中基于功率分配和子载波配对算法的信道容量matlab仿真


    目录

    1.算法描述

    2.仿真效果预览

    3.MATLAB部分代码预览

    4.完整MATLAB程序


    1.算法描述

           随着当代无线通信事业的迅猛发展,无线频谱资源已显得越来越匮乏,传统固定静态的无线频谱分配模式和策略,很难为未来的无线通信事业的进一步发展提供更多可利用的无线频谱带宽和更高的频谱利用率。认知无线电技术是实现动态频谱机会接入并有效解决无线频谱资源匮乏问题的关键技术之一;正交频分复用技术具有抗多径干扰与抗频率选择性衰落能力强,以及频谱利用率高等优点,使其成为实现认知无线电系统的理想备选方案之一。功率分配不但是传统正交频分复用系统中的关键核心技术,而且还是认知无线电系统中频谱分析与判决的重要手段。在认知无线电系统中,认知用户通信链路信道容量的最大化,同样也需要深化对功率分配的研究。本文针对正交频分复用调制子载波的IEEE802.11a下行链路的认知无线电系统,进行了发射功率分配算法研究。

           本课题,我们参考文献《Power Allocation and Subcarrier Pairing Algorithm
    for Regenerative OFDM Relay System》对OFDM的功率分配和子载波配对算法的信道容量进行matlab仿真分析研究。

            随着无线通信的飞速发展,所需要的无线频谱资源越来越多,当前频谱资源已显得越来越缺乏。认知无线电提供了一种按伺机的方式共享和利用频谱的手段,可以有效地解决这一问题。认知无线电技术通过智能感知通信环境中未使用的频谱,并加以利用来提高频谱的利用效率。OFDM的频谱利用效率高,并且抗频率选择性衰落特性强,已成为4G的主要应用技术。随着人们对通讯业务和质量的要求不断提高,OFDM技术的应用也越来越广泛。OFDM系统为了实现系统容量最大化通常会对系统用户进行合理的功率分配,因此功率分配是OFDM系统的关建技术之一。 

           在基于OFDM的认知无线电系统中,授权用户会受到认知用户带内子载波带外旁瓣泄漏功率的干扰。这里引入了功率控制参数来调整授权用户的干扰功率约束值,提出了一种认知用户子载波间的最优功率分配算法,通过求解一个凸优化问题来获得最优的功率分配方案。仿真结果表明:与其他算法相比,采用该方法获得的功率分配方案,在满足授权用户干扰功率约束值的条件下,可以使认知用户的信道容量最大化。

           为了使N路子信道信号在接收时能够完全分离,需要满足在每个码元持续时间Ts内,任意两个载波相互正交。三角函数系{1,sint,cost,...,sinnt,cosnt,...}满足任意两个不同函数之间相互正交(在[−π,π]内两个不同函数乘积积分为0),利用这一性质,可以得到彼此相互正交的载波。从时域上来看,发送端信号在空间中的叠加可以写作:

           从复数形式上可以看出,当对时间t进行离散化,OFDM其实就是对各路子载波上的传输信号(Bi)进行了求傅里叶反变换的操作,OFDM在进行调制时也是利用IFFT模块实现的。  

           从频域上来看OFDM。调制时,时域上是一个正弦载波和一个码元波形(门函数)的乘积,频域上体现的是对门函数频谱的搬移(门函数的频谱为sinc函数),OFDM为了保证载波的正交性,最小子载频间隔Δf=1Ts。  

    2.仿真效果预览

    matlab2022a仿真结果如下:

     

    3.MATLAB部分代码预览

    1. %%
    2. %不分集OFDM的功率分配不带子载波配对算法下的信道容量;
    3. %PA without pairing without diversity
    4. C1 = 0;
    5. C1s = 0;
    6. for Ss = 1:length(Dist_Tx_Rn)
    7. Ss
    8. %利用蒙特卡洛算法思想,进行多次的循环,再计算平均
    9. for q=1:Simu_Times
    10. for Ts = 1:Time_Slot
    11. Cha = 0.5e-1*random('rayleigh',1,N_hop/Time_Slot,Num_sc);
    12. Sub = zeros(N_hop/Time_Slot,Num_sc);%每跳的子载波分布向量
    13. Capacity = zeros(1,N_hop/Time_Slot); %定义容量向量
    14. for i=1:N_hop/Time_Slot
    15. %每一跳噪声设定
    16. n0 = randn(1,10000)*sqrt(SCB*0.5e-10);
    17. N0 = std(n0,1,2)^2/SCB;
    18. %选择其中的min值
    19. [a,ind] = min(Cha(:,Time_Slot));
    20. %将选中的载波的信道因子赋值给该跳的子载波分布向量
    21. Sub(i,ind)= a;
    22. %进行注水功率分配
    23. [Capacity1(i),Powers1] = pwrallo(SP,Sub(i,:),SCB,N0,gammar);
    24. %载波被某一跳占用,将所有跳上的该载波信道因子设为0
    25. Cha(:,ind) = 0;
    26. end
    27. while max(Cha(:))> 0 %判断是否有未分配的载波,有的话继续分配
    28. [b,indexmin] = min(Capacity1); %找出速率最小的跳
    29. i = indexmin;
    30. [c,indexmax] = max(Cha(i,:)); %给最小的跳分配载波
    31. k = indexmax;
    32. Sub(i,k) = c;
    33. [Capacity1(i),Powers1] = pwrallo(SP,Sub(i,:),SCB,N0,gammar);
    34. Cha(:,k) = 0;
    35. end
    36. end
    37. for kk = 1:length(Powers1)
    38. h1k = func_h1(Delay,Gain,Num_sc,SB,Dist_Tx_Rn(Ss),Path_loss_factor(2),kk);
    39. h2k = func_h2(Delay,Gain,Num_sc,SB,Dist_Tx_Rn(Ss),Path_loss_factor(3),kk);
    40. delta = (SNR)^2/2;
    41. a1k = (abs(h1k))^2/delta;
    42. a2k = (abs(h2k))^2/delta;
    43. Pk = Powers1(kk)+1/((a1k*a2k)/(a1k+a2k));
    44. C1(kk) = log2(1 + (a1k*a2k)/(a1k+a2k)*Pk);
    45. end
    46. C1s(q) = SB/(2*Num_sc)*sum(C1);
    47. end
    48. PA_Wo_P(Ss) = mean(C1s)/1e6;
    49. end
    50. %**************************************************************************
    51. %**************************************************************************
    52. %**************************************************************************
    53. %**************************************************************************
    54. %%
    55. %不分集OFDM的均匀功率分配带子载波配对算法下的信道容量;
    56. %uniform PA without pairing without diversity
    57. for Ss = 1:length(Dist_Tx_Rn)
    58. Ss
    59. %利用蒙特卡洛算法思想,进行多次的循环,再计算平均
    60. for q=1:Simu_Times
    61. %通过注水法得到的每个Powers1,然后进行sub_carrier pairing
    62. %通过注水法得到的每个Powers1,然后进行sub_carrier pairing
    63. Num_sc1 = randperm(Num_sc);
    64. Num_sc2 = randperm(Num_sc);
    65. for kk = 1:length(Num_sc2)
    66. h1k(kk)= func_h1(Delay,Gain,Num_sc,SB,Dist_Tx_Rn(Ss),Path_loss_factor(2),Num_sc1(kk));
    67. h2k(kk)= func_h2(Delay,Gain,Num_sc,SB,Dist_Tx_Rn(Ss),Path_loss_factor(3),Num_sc2(kk));
    68. hk(kk) = h1k(kk)*h2k(kk)/(h1k(kk) + h2k(kk));
    69. delta = (SNR)^2/2;
    70. a1k(kk)= (abs(h1k(kk)))^2/delta;
    71. a2k(kk)= (abs(h2k(kk)))^2/delta;
    72. end
    73. %排序
    74. A1k = sort(a1k);
    75. A2k = sort(a2k);
    76. for kk = 1:Num_sc
    77. %均匀分配
    78. Pk = SP/Num_sc;
    79. tmp1(kk)=(A1k(kk)*A2k(kk))/(A1k(kk)+A2k(kk));
    80. C1(kk) = log2(1 + tmp1(kk)*Pk);
    81. end
    82. C1s(q) = SB/(2*Num_sc)*sum(C1);
    83. end
    84. uPA_W_P(Ss) = mean(C1s)/1e6;
    85. end
    86. %**************************************************************************
    87. %**************************************************************************
    88. %**************************************************************************
    89. %**************************************************************************
    90. %%
    91. %不分集OFDM的均匀功率分配不带子载波配对算法下的信道容量;
    92. %uniform PA without pairing without diversity
    93. for Ss = 1:length(Dist_Tx_Rn)
    94. Ss
    95. %利用蒙特卡洛算法思想,进行多次的循环,再计算平均
    96. for q=1:Simu_Times
    97. Num_sc1 = randperm(Num_sc);
    98. Num_sc2 = randperm(Num_sc);
    99. for kk = 1:Num_sc
    100. h1k(kk) = func_h1(Delay,Gain,Num_sc,SB,Dist_Tx_Rn(Ss),Path_loss_factor(2),Num_sc1(kk));
    101. h2k(kk) = func_h2(Delay,Gain,Num_sc,SB,Dist_Tx_Rn(Ss),Path_loss_factor(3),Num_sc2(kk));
    102. delta = (SNR)^2/2;
    103. a1k(kk) = (abs(h1k(kk)))^2/delta;
    104. a2k(kk) = (abs(h2k(kk)))^2/delta;
    105. %均匀分配
    106. Pk = SP/Num_sc;
    107. tmp2(kk) =(a1k(kk)*a2k(kk))/(a1k(kk)+a2k(kk));
    108. C1(kk) = log2(1 + tmp2(kk)*Pk);
    109. end
    110. C1s(q) = SB/(2*Num_sc)*sum(C1);
    111. end
    112. uPA_Wo_P(Ss) = mean(C1s)/1e6;
    113. end
    114. 01_064_m

    4.完整MATLAB程序

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

    V

  • 相关阅读:
    LCHub 6 月低代码平台排行榜发布
    【WINDOWS / DOS 批处理】IF命令之比较运算符证明实例
    温度对免疫代谢调节和癌症进展的影响
    【STM32学习】 基于STM32 USB存储设备的w25qxx自动判断容量检测
    vue中使用vant的几种引入方式-(全局引入,按需引入,页面中引入)
    Golang 互斥锁
    Tomcat信创平替之TongWEB(东方通),安装步骤
    【深度学习】Pytorch torch.autograd 自动差分引擎
    多线程Synchronized锁的使用与线程之间的通讯
    园子的现代化建设-博客版本控制:发布博客设置历史版本功能
  • 原文地址:https://blog.csdn.net/hlayumi1234567/article/details/128021773