這個思想是簡化考慮問題模型,并考慮歷史TPC命令,先得到當前TPC命令,與歷史TPC命令比較,然后才決定功率增減的步長值:
clear;clc;
G=0.7;%路徑增益
I=2.5;%總干擾功率
SIR0=7;%目標信干比
simTime=1;%模擬的仿真時間,以秒為單位
freq=1500;%功率調(diào)節(jié)的頻率,1500Hz
iter=freq*simTime;%總迭代次數(shù)
userNum=5;%用戶數(shù)
power=rand(userNum,iter)+25;% power(userNum,1)為初始發(fā)送功率
SIR(userNum,iter)=0;%基站處接收信干比
TPC(userNum,iter)=0;%功率控制命令
deltaP=0.5;%定步長情況的步長值
sign=1;
powerControlError(iter)=0;
tic;
for k=1
iter-1)
SIR(:,k)=G*power(:,k)/I;%基站估計接收信干比
powerControlError(k)=sqrt(1/userNum*((SIR(1,k)-SIR0)^2+(SIR(2,k)-SIR0)^2+(SIR(3,k)-SIR0)^2+(SIR(4,k)-SIR0)^2+(SIR(5,k)-SIR0)^2));
for t=1:userNum
if SIR(t,k)>=SIR0
TPC(t,k)=0;
else
TPC(t,k)=1;
end
%以下是兩種狀態(tài)劃分和兩種步長結合的變步長控制方式
if k~=1
preTPC=TPC(t,k-1);%獲得歷史TPC命令
else
preTPC=0;
end
if TPC(t,k)==preTPC%這種情況取為狀態(tài)0,減少一個步長值
sign=-1;%這個值可調(diào)整
deltaP=0.5;%這個值可調(diào)整
else %這種情況取為狀態(tài)1,增加一個步長值
sign=1;%這個值可調(diào)整
deltaP=1;%這個值可調(diào)整
end
power(t,k+1)=power(t,k)+sign*deltaP;
end
end
k=k+1;
SIR(:,k)=G.*power(:,k)./I;%估計接收信干比
powerControlError(k)=sqrt(1/userNum*((SIR(1,k)-SIR0)^2+(SIR(2,k)-SIR0)^2+(SIR(3,k)-SIR0)^2+(SIR(4,k)-SIR0)^2+(SIR(5,k)-SIR0)^2));
for t=1:userNum
if SIR(t,k)>=SIR0
TPC(t,k)=0;
else
TPC(t,k)=1;
end
end
fprintf('均方誤差是%f\n',sum(powerControlError)/k);
toc;