1.软件版本
matlab2017b
2.本算法理论知识
[1] Ying W , Qu X C , Tong W , et al. Power Allocation and Subcarrier Pairing Algorithm for Regenerative OFDM Relay System[C]// IEEE Vehicular Technology Conference-vtc-spring. IEEE, 2007.
3.部分源码
clc;
clear;
close all;
warning off;
%参数初始化
d0 = 10;
Distance = 1000;
Path_loss_factor = [4;4;4];
SP = 5;
Fre_carrier = 2e9;
SB = 1.92e6;
Num_sc = 128;
SCB = 15e3;
Delay = [0,0.2,0.8,1.2,2.3,3.7];
Gain = [0,-0.9,-4.9,-8,-7.8,-23.9];
Dist_Tx_Rn = [300:40:660];
SNR = 0.8;
Simu_Times = 20;%循环次数越多,最后得到的曲线越光滑
N_hop = 2;
gammar = 0.152;
Time_Slot = 1;
PA_W_P = zeros(length(Dist_Tx_Rn),1);
PA_Wo_P = zeros(length(Dist_Tx_Rn),1);
uPA_W_P = zeros(length(Dist_Tx_Rn),1);
uPA_Wo_P = zeros(length(Dist_Tx_Rn),1);
dirl = zeros(length(Dist_Tx_Rn),1);
%%
%不分集OFDM的功率分配带子载波配对算法下的信道容量;
%PA with pairing without diversity
C1 = 0;
C1s = 0;
for Ss = 1:length(Dist_Tx_Rn)
Ss
%利用蒙特卡洛算法思想,进行多次的循环,再计算平均
for q=1:Simu_Times
for Ts = 1:Time_Slot
Cha = 0.5e-1*random('rayleigh',1,N_hop/Time_Slot,Num_sc);
Sub = zeros(N_hop/Time_Slot,Num_sc);%每跳的子载波分布向量
Capacity = zeros(1,N_hop/Time_Slot); %定义容量向量
for i=1:N_hop/Time_Slot
%每一跳噪声设定
n0 = randn(1,10000)*sqrt(SCB*0.5e-10);
N0 = std(n0,1,2)^2/SCB;
%选择其中的min值
[a,ind] = min(Cha(:,Time_Slot));
%将选中的载波的信道因子赋值给该跳的子载波分布向量
Sub(i,ind)= a;
%进行注水功率分配
[Capacity1(i),Powers1] = pwrallo(SP,Sub(i,:),SCB,N0,gammar);
%载波被某一跳占用,将所有跳上的该载波信道因子设为0
Cha(:,ind) = 0;
end
while max(Cha(:))> 0 %判断是否有未分配的载波,有的话继续分配
[b,indexmin] = min(Capacity1); %找出速率最小的跳
i = indexmin;
[c,indexmax] = max(Cha(i,:)); %给最小的跳分配载波
k = indexmax;
Sub(i,k) = c;
[Capacity1(i),Powers1] = pwrallo(SP,Sub(i,:),SCB,N0,gammar);
Cha(:,k) = 0;
end
end
%通过注水法得到的每个Powers1,然后进行sub_carrier pairing
%通过注水法得到的每个Powers1,然后进行sub_carrier pairing
Num_sc1 = randperm(Num_sc);
Num_sc2 = randperm(Num_sc);
for kk = 1:length(Num_sc2)
h1k(kk)= func_h1(Delay,Gain,Num_sc,SB,Dist_Tx_Rn(Ss),Path_loss_factor(2),Num_sc1(kk));
h2k(kk)= func_h2(Delay,Gain,Num_sc,SB,Dist_Tx_Rn(Ss),Path_loss_factor(3),Num_sc2(kk));
hk(kk) = h1k(kk)*h2k(kk)/(h1k(kk) + h2k(kk));
delta = (SNR)^2/2;
a1k(kk)= (abs(h1k(kk)))^2/delta;
a2k(kk)= (abs(h2k(kk)))^2/delta;
end
%中继功率分配
[Capacity1,Powers1s] = pwrallo(SP,abs(hk),SCB,N0,gammar);
%排序
A1k = sort(a1k);
A2k = sort(a2k);
for kk = 1:length(Powers1)
Pk = Powers1s(kk)+1/((A1k(kk)*A2k(kk))/(A1k(kk)+A2k(kk)));
C1(kk) = log2(1 + (A1k(kk)*A2k(kk))/(A1k(kk)+A2k(kk))*Pk);
end
C1s(q) = SB/(2*Num_sc)*sum(C1);
end
PA_W_P(Ss) = mean(C1s)/1e6;
end
%**************************************************************************
%**************************************************************************
%**************************************************************************
%**************************************************************************
%%
%不分集OFDM的功率分配不带子载波配对算法下的信道容量;
%PA without pairing without diversity
C1 = 0;
C1s = 0;
for Ss = 1:length(Dist_Tx_Rn)
Ss
%利用蒙特卡洛算法思想,进行多次的循环,再计算平均
for q=1:Simu_Times
for Ts = 1:Time_Slot
Cha = 0.5e-1*random('rayleigh',1,N_hop/Time_Slot,Num_sc);
Sub = zeros(N_hop/Time_Slot,Num_sc);%每跳的子载波分布向量
Capacity = zeros(1,N_hop/Time_Slot); %定义容量向量
for i=1:N_hop/Time_Slot
%每一跳噪声设定
n0 = randn(1,10000)*sqrt(SCB*0.5e-10);
N0 = std(n0,1,2)^2/SCB;
%选择其中的min值
[a,ind] = min(Cha(:,Time_Slot));
%将选中的载波的信道因子赋值给该跳的子载波分布向量
Sub(i,ind)= a;
%进行注水功率分配
[Capacity1(i),Powers1] = pwrallo(SP,Sub(i,:),SCB,N0,gammar);
%载波被某一跳占用,将所有跳上的该载波信道因子设为0
Cha(:,ind) = 0;
end
while max(Cha(:))> 0 %判断是否有未分配的载波,有的话继续分配
[b,indexmin] = min(Capacity1); %找出速率最小的跳
i = indexmin;
[c,indexmax] = max(Cha(i,:)); %给最小的跳分配载波
k = indexmax;
Sub(i,k) = c;
[Capacity1(i),Powers1] = pwrallo(SP,Sub(i,:),SCB,N0,gammar);
Cha(:,k) = 0;
end
end
for kk = 1:length(Powers1)
h1k = func_h1(Delay,Gain,Num_sc,SB,Dist_Tx_Rn(Ss),Path_loss_factor(2),kk);
h2k = func_h2(Delay,Gain,Num_sc,SB,Dist_Tx_Rn(Ss),Path_loss_factor(3),kk);
delta = (SNR)^2/2;
a1k = (abs(h1k))^2/delta;
a2k = (abs(h2k))^2/delta;
Pk = Powers1(kk)+1/((a1k*a2k)/(a1k+a2k));
C1(kk) = log2(1 + (a1k*a2k)/(a1k+a2k)*Pk);
end
C1s(q) = SB/(2*Num_sc)*sum(C1);
end
PA_Wo_P(Ss) = mean(C1s)/1e6;
end
%**************************************************************************
%**************************************************************************
%**************************************************************************
%**************************************************************************
%%
%不分集OFDM的均匀功率分配带子载波配对算法下的信道容量;
%uniform PA without pairing without diversity
for Ss = 1:length(Dist_Tx_Rn)
Ss
%利用蒙特卡洛算法思想,进行多次的循环,再计算平均
for q=1:Simu_Times
%通过注水法得到的每个Powers1,然后进行sub_carrier pairing
%通过注水法得到的每个Powers1,然后进行sub_carrier pairing
Num_sc1 = randperm(Num_sc);
Num_sc2 = randperm(Num_sc);
for kk = 1:length(Num_sc2)
h1k(kk)= func_h1(Delay,Gain,Num_sc,SB,Dist_Tx_Rn(Ss),Path_loss_factor(2),Num_sc1(kk));
h2k(kk)= func_h2(Delay,Gain,Num_sc,SB,Dist_Tx_Rn(Ss),Path_loss_factor(3),Num_sc2(kk));
hk(kk) = h1k(kk)*h2k(kk)/(h1k(kk) + h2k(kk));
delta = (SNR)^2/2;
a1k(kk)= (abs(h1k(kk)))^2/delta;
a2k(kk)= (abs(h2k(kk)))^2/delta;
end
%排序
A1k = sort(a1k);
A2k = sort(a2k);
for kk = 1:Num_sc
%均匀分配
Pk = SP/Num_sc;
tmp1(kk)=(A1k(kk)*A2k(kk))/(A1k(kk)+A2k(kk));
C1(kk) = log2(1 + tmp1(kk)*Pk);
end
C1s(q) = SB/(2*Num_sc)*sum(C1);
end
uPA_W_P(Ss) = mean(C1s)/1e6;
end
%**************************************************************************
%**************************************************************************
%**************************************************************************
%**************************************************************************
%%
%不分集OFDM的均匀功率分配不带子载波配对算法下的信道容量;
%uniform PA without pairing without diversity
for Ss = 1:length(Dist_Tx_Rn)
Ss
%利用蒙特卡洛算法思想,进行多次的循环,再计算平均
for q=1:Simu_Times
Num_sc1 = randperm(Num_sc);
Num_sc2 = randperm(Num_sc);
for kk = 1:Num_sc
h1k(kk) = func_h1(Delay,Gain,Num_sc,SB,Dist_Tx_Rn(Ss),Path_loss_factor(2),Num_sc1(kk));
h2k(kk) = func_h2(Delay,Gain,Num_sc,SB,Dist_Tx_Rn(Ss),Path_loss_factor(3),Num_sc2(kk));
delta = (SNR)^2/2;
a1k(kk) = (abs(h1k(kk)))^2/delta;
a2k(kk) = (abs(h2k(kk)))^2/delta;
%均匀分配
Pk = SP/Num_sc;
tmp2(kk) =(a1k(kk)*a2k(kk))/(a1k(kk)+a2k(kk));
C1(kk) = log2(1 + tmp2(kk)*Pk);
end
C1s(q) = SB/(2*Num_sc)*sum(C1);
end
uPA_Wo_P(Ss) = mean(C1s)/1e6;
end
%**************************************************************************
%**************************************************************************
%**************************************************************************
%**************************************************************************
%%
%不分集OFDM的不使用功率分配和子载波配对算法下的信道容量;
%direct link
for Ss = 1:length(Dist_Tx_Rn)
dirl(Ss) = SB*log(1+SNR)/1e6;
end
%**************************************************************************
%**************************************************************************
%**************************************************************************
%**************************************************************************
figure;
plot(Dist_Tx_Rn,PA_W_P,'k-^','LineWidth',2);
hold on
plot(Dist_Tx_Rn,PA_Wo_P,'b-*','LineWidth',2);
hold on
plot(Dist_Tx_Rn,uPA_W_P,'r-o','LineWidth',2);
hold on
plot(Dist_Tx_Rn,uPA_Wo_P,'m-s','LineWidth',2);
hold on
plot(Dist_Tx_Rn,dirl,'g-+','LineWidth',2);
hold off
legend('PA with Pairing','PA without Pairing','Uniform PA with Pairing','Uniform PA without Pairing','Direct link');
grid on;
xlabel('The distance between TX and RN(without diversity)');
ylabel('Capacity bps/Hz');
axis([300,660,1,2]);
axis square
4.仿真结论
·不分集OFDM的功率分配带子载波配对算法下的信道容量;
·不分集OFDM的功率分配不带子载波配对算法下的信道容量;
·不分集OFDM的均匀功率分配带子载波配对算法下的信道容量;
·不分集OFDM的均匀功率分配不带子载波配对算法下的信道容量;
·不分集OFDM的不使用功率分配和子载波配对算法下的信道容量;
我们的仿真结果如下所示:
这个部分主要是仿真如下的五个部分内容:
·分集OFDM的功率分配带子载波配对算法下的信道容量;
·分集OFDM的功率分配不带子载波配对算法下的信道容量;
·分集OFDM的均匀功率分配带子载波配对算法下的信道容量;
·分集OFDM的均匀功率分配不带子载波配对算法下的信道容量;
·分集OFDM的不使用功率分配和子载波配对算法下的信道容量;
我们的仿真结果如下所示:
这个部分主要是仿真如下的五个部分内容:
·不分集2跳OFDM的功率分配带子载波配对算法下的信道容量(SIR);
·不分集2跳OFDM的功率分配不带子载波配对算法下的信道容量(SIR);
·不分集2跳OFDM的均匀功率分配带子载波配对算法下的信道容量(SIR);
·不分集2跳OFDM的均匀功率分配不带子载波配对算法下的信道容量(SIR);
·不分集2跳OFDM的不使用功率分配和子载波配对算法下的信道容量(SIR);
我们的仿真结果如下所示:
·不分集3跳OFDM的功率分配带子载波配对算法下的信道容量(SIR);
·不分集3跳OFDM的功率分配不带子载波配对算法下的信道容量(SIR);
·不分集3跳OFDM的均匀功率分配带子载波配对算法下的信道容量(SIR);
·不分集3跳OFDM的均匀功率分配不带子载波配对算法下的信道容量(SIR);
·不分集3跳OFDM的不使用功率分配和子载波配对算法下的信道容量(SIR);
我们的仿真结果如下所示:
·分集2跳OFDM的功率分配带子载波配对算法下的信道容量(SIR);
·分集2跳OFDM的功率分配不带子载波配对算法下的信道容量(SIR);
·分集2跳OFDM的均匀功率分配带子载波配对算法下的信道容量(SIR);
·分集2跳OFDM的均匀功率分配不带子载波配对算法下的信道容量(SIR);
·分集2跳OFDM的不使用功率分配和子载波配对算法下的信道容量(SIR);
我们的仿真结果如下所示:
5.参考文献
[1] Ying W , Qu X C , Tong W , et al. Power Allocation and Subcarrier Pairing Algorithm for Regenerative OFDM Relay System[C]// IEEE Vehicular Technology Conference-vtc-spring. IEEE, 2007.A01-64