1.算法概述
如圖1表示一個潛伏式認知中繼網絡碰凶,在這個場景中有一對主用戶和一對次級用戶暮芭,主用戶由一個發(fā)射器和一個接收器組成,次級用戶由一個發(fā)射器欲低、一個接收器和n個中繼節(jié)點組成辕宏。次級用戶的認知節(jié)點之間沒有直接鏈路,中繼節(jié)點采用放大轉發(fā)工作模式砾莱。假設場景中涉及到的信道都是相互獨立的塊衰落信道瑞筐,也就是說即時功率增益在每個傳輸塊之間是保持不變的,但是當一個傳輸塊變化到另一個傳輸塊時是可能發(fā)生改變的腊瑟。
在現有捕獲信道狀態(tài)信息的技術支持下聚假,假設次級用戶能夠獲取完美的信道狀態(tài)信息,即次級用戶發(fā)射端和中繼節(jié)點能通過不同的方法獲取信道即時功率增益闰非,從而使次級用戶發(fā)射端和中繼節(jié)點能夠實現發(fā)射功率的最優(yōu)分配以獲得次級用戶的最大吞吐量膘格。
主用戶在通信過程中可以采取不同的發(fā)射方案。為了計算的方便财松,本文假設主用戶采用恒定功率的分配方案瘪贱。為了從總體上保護主用戶的通信質量,在主用戶接收端考慮一個長時間平均的SINR約束條件辆毡。這個約束條件在本文中稱為平均SINR約束條件菜秦,表述如下:
為了保護主用戶的實時傳輸,使其不會因為最大化次級用戶的吞吐量而被中斷舶掖,確保主用戶的傳輸質量球昨,進而保證主用戶的業(yè)務質量,本文也對主用戶接收端的每個傳輸狀態(tài)的SINR強加一個約束访锻。這個約束稱為谷值SINR約束褪尝,表述如下: ?
本文的優(yōu)化標是在平均SINR約束、谷值SINR約束以及平均發(fā)射功率約束下期犬,充分的利用共享的頻譜資源河哑,獲取盡可能大的次級用戶吞吐量。
2.仿真效果預覽
matlab2022a仿真結果如下:
3.核心MATLAB代碼預覽
%次用戶發(fā)射端到中繼節(jié)點功率增益
f3 ??= 2;
%中繼節(jié)點到次用戶接收端功率增益
f4 ??= 3;
%中繼節(jié)點到主用戶接收端之間的信道即時功率增益
f5 ??= 3;
%預先確定的主用戶能夠接受的最小的平均SINR閾值
A1 = 3.6;
A2 = 2.5;
%次級用戶發(fā)射端和中繼節(jié)點的平均發(fā)射功率預算
Q1 = 3.48;
Q2 = 3.3;
%**************************************************************************
%%
%先確定lemda1龟虎,lemda2璃谨,lemda3,lemda4
Num ????= 2000;
beta1 ??= zeros(1,Num);
beta2 ??= zeros(1,Num);
beta3 ??= zeros(1,Num);
beta4 ??= zeros(1,Num);
lemdas1 = zeros(1,Num);
lemdas2 = zeros(1,Num);
lemdas3 = zeros(1,Num);
lemdas4 = zeros(1,Num);
lemda1 ?= 0;
lemda2 ?= 0;
lemda3 ?= 0;
lemda4 ?= 0;
for k = 1:Num-1
%步長的動態(tài)調整
alpha ???????= 0.15;
beta1(k) ????= alpha*((Num-k+1)/Num)^k;
beta2(k) ????= alpha*((Num-k+1)/Num)^k;
beta3(k) ????= alpha*((Num-k+1)/Num)^k;
beta4(k) ????= alpha*((Num-k+1)/Num)^k;
lemdas1(k+1) = lemdas1(k) - beta1(k)*(mean((P1*f1)./(P2*f2 + N0))-A1);
lemdas2(k+1) = lemdas2(k) - beta2(k)*(mean((P1*f1)./(P3*f5 + N0))-A2);
lemdas3(k+1) = lemdas3(k) - beta3(k)*(Q1 - mean(P2));
lemdas4(k+1) = lemdas4(k) - beta4(k)*(Q2 - mean(P3));
end
%通過迭代,獲得四個lemda
lemda1 ?= lemdas1(end);
lemda2 ?= lemdas2(end);
lemda3 ?= lemdas3(end);
lemda4 ?= lemdas4(end);
figure(1);
plot(lemdas1,'b','linewidth',2);
hold on
plot(lemdas2,'r','linewidth',2);
hold on
plot(lemdas3,'k','linewidth',2);
hold on
plot(lemdas4,'g','linewidth',2);
grid on
legend('lemda1','lemda2','lemda3','lemda4');
xlabel('迭代次數');
ylabel('lemda');
axis([0,Num,-2,2]);
%%
%通過優(yōu)化佳吞,計算得到最后最佳的功率分配情況
%先通過遺傳優(yōu)化獲得最佳的P2和P3
%**********************首先通過我使用的優(yōu)化過程計算**************************
%根據中繼節(jié)點數目拱雏,產生每個次用戶-中繼的信道參數
SNR0 = 15;
SNR ?= [8,12,15,20,4,11];
%測試發(fā)送數據
Signal = 1e6*rand(1,2);
x ?????= 2*Signal-1;
for jAFN = 1:AFN
jAFN
zsnl ??= sqrt(1/(10^((SNR(jAFN))/10)));
zsnl0 ?= sqrt(1/(10^((SNR0)/10)));
%如下為需要擬合的參數
P2o ???= 3;
P3o ???= 3;
%根據遺傳算法進行參數的擬合
MAXGEN = 200;
NIND ??= 600;
Chrom ?= crtbp(NIND,2*10);
%14個變量的區(qū)間
Areas ?= [0 ?,0;
20 ,20];
FieldD = [rep([10],[1,2]);Areas;rep([0;0;0;0],[1,2])];
P2x_NIND ???= zeros(NIND,1);
P3x_NIND ???= zeros(NIND,1);
P2x ????????= zeros(MAXGEN,1);
P3x ????????= zeros(MAXGEN,1);
T ??????????= zeros(MAXGEN,1);
gen ????????= 0;
for a=1:1:NIND
P2x_NIND(a) = P2o; ?????
P3x_NIND(a) = P3o;
%計算對應的目標值
%計算不同中繼點對應的信噪比
Ysr ????= sqrt(P2x_NIND(a)*f3)*x + zsnl*randn;
Ysd ????= sqrt(P3x_NIND(a))/sqrt(P2x_NIND(a)*f3 + N0)*sqrt(f4) * Ysr + zsnl0*randn;
Rr ?????= sum(Ysd.^2)/sum(x.^2);
L ??????= func_obj(Rr,mean(P1),P2x_NIND(a),P3x_NIND(a),f1,f2,f3,f4,f5,N0,lemda1,lemda2,lemda3,lemda4);
E ??????= 1/L;
J(a,1) ?= E;
end
Objv ?= (J+eps);
gen ??= 0;
while gen < MAXGEN; ??
FitnV=ranking(Objv); ???
Selch=select('sus',Chrom,FitnV); ???
Selch=recombin('xovsp', Selch,0.9); ??
Selch=mut( Selch,0.01); ??
phen1=bs2rv(Selch,FieldD); ??
for a=1:1:NIND ?
if ?gen == 1
P2x_NIND(a) = P2o; ?????
P3x_NIND(a) = P3o;
else
P2x_NIND(a) = phen1(a,1); ?????
P3x_NIND(a) = phen1(a,2);
end
%計算不同中繼點對應的信噪比
Ysr ????= sqrt(P2x_NIND(a)*f3)*x + zsnl*randn;
Ysd ????= sqrt(P3x_NIND(a))/sqrt(P2x_NIND(a)*f3 + N0)*sqrt(f4) * Ysr + zsnl0*randn;
Rr ?????= sum(Ysd.^2)/sum(x.^2);
%計算對應的目標值 ??????????????????
L ??????= func_obj(Rr,mean(P1),P2x_NIND(a),P3x_NIND(a),f1,f2,f3,f4,f5,N0,lemda1,lemda2,lemda3,lemda4); ??????????????????????
E ??????= 1/L;
JJ(a,1) = E;
end
Objvsel=(JJ+eps); ???
[Chrom,Objv]=reins(Chrom,Selch,1,1,Objv,Objvsel); ??
gen=gen+1;
%保存參數收斂過程和誤差收斂過程以及函數值擬合結論
P2x(gen) ??= mean(P2x_NIND);
P3x(gen) ??= mean(P3x_NIND);
Ysr ????= sqrt(P2x(gen)*f3)*x + zsnl*randn;
Ysd ????= sqrt(P3x(gen))/sqrt(P2x(gen)*f3 + N0)*sqrt(f4) * Ysr + zsnl0*randn;
Rr ?????= sum(Ysd.^2)/sum(x.^2);
%計算對應的吞吐量
T(gen) ????= log2(1+Rr);
end
%計算對應的目標值 ???
Ysr ??????????= sqrt(P2x(end)*f3)*x + zsnl*randn;
Ysd ??????????= sqrt(P3x(end))/sqrt(P2x(end)*f3 + N0)*sqrt(f4) * Ysr + zsnl0*randn;
Rr ???????????= sum(Ysd.^2)/sum(x.^2);
Tp2p3(jAFN) ??= log2(1+Rr);
P2_best(jAFN) = P2x(end); ?????
P3_best(jAFN) = P3x(end);
end
%獲得最佳中繼點
[V,I] = max(Tp2p3);
disp('最優(yōu)中繼點:');
I
disp('最優(yōu)功率分配結果:');
P2_best(I)
P3_best(I)
disp('吞吐量:');
Tp2p3(I)
01_088_m