ymd18192510392 2017-04-26 08:51
浏览 576

各位大神,看看哪里有问题,运行不出来。开环功控matlab

clear:clc:
function [parameter_access, control_power] = OpenPowerControl(~,rec_power,init_trans_power,target_power1,target_power2;distans1,distans2,Gt,Gr,freq,SINRtarget,noise_power,interfere_power,last_trans_power)
% ===============================================================================
% 函数说明:开环功率控制函数,节点1给节点2发送,此前节点2已经发给过节点1,节点1根据收到的节点2信息推算发射功率
% 输入输出说明:
% 输入:
% parameter_access: 接入参数
% rec_power: 节点接收功率
% init_trans_power: 节点初始发射功率
% target_power1: 节点1最低接收功率(发送节点)
% target_power2: 节点2最低接收功率(接受节点)
% distans1: 上次通信距离
% distans2: 此刻通信距离
% Gt: 发射增益
% Gr: 接受增益
% freq: 通信频率
% SINRtarget: 目标信干噪比
% noise_power: 噪声功率
% interfere_power: 干扰功率
% last_trans_power: 节点此链路上次发射功率
% 输出:
% parameter_access: 接入参数
% control_power: 节点发射功率
% ================================================================================

%功控调整范围,单位dBm
PowerMin = 0;
PowerMax = 50;

link_margin = 2;%链路余量

%估算损耗
Lsm = PL_free_Envir(freq,distans2);

%节点1以功率 P(init_trans_power)给节点2发送,节点2接收功率与其最低接收功率进行比较,返回节点的发射功率,标志是否接入的接入参数
if rec_power < target_power1 %若未能够接收到,按照基于距离功率控制
parameter_access = 0;%若接收不到对方节点信号,接入参数置为0
control_power = target_power1+Lsm -Gt-Gr+link_margin;%保留一定的通信余量,天线馈线损耗估算

else %能够接收到信号
parameter_access = 1;%若接收到对方节点信号,接入参数置为1
%计算信干燥比所需发射功率
noise_interfere_noise = 10.^(noise_power/10) + 10.^(interfere_power/10);%先将dbm转化为mW
noise_interfere_noise = 10.* log10(noise_interfere_noise);%再将mW转化为dBm
target_snr_power = SINRtarget + noise_interfere_noise;
%判断根据信干燥比所需发射功率和目标功率的大小,对目标功率做出相应调整
if target_snr_power > target_power2
target_power2 = target_snr_power;
end
Lsm = init_trans_power - rec_power; %路径损耗,单位:dB
control_power = target_power2 + Lsm ; %发射功率

%损耗差值补偿
LS_before = PL_free_Envir(freq,distans1);
LS_After = PL_free_Envir(freq,distans2);
step_openloop = LS_After-LS_before;

%天线增益补偿(默认为0)
G = 0;
%计算发射功率
control_power = control_power+step_openloop+G+link_margin;%末尾加2dB的通信余量

if nargin > 12+1
    if (control_power-last_trans_power) > 0
        control_power = last_trans_power +1;
    elseif (control_power - last_trans_power) < -1
        control_power = last_trans_power -1;
    else
        control_power = last_trans_power;
    end
end

end

if control_power > PowerMax
control_power = PowerMax;%当发射功率值过大时,发送功率以系统最大发射功率为准
%fprintf('The Power is too High');
end
if control_power < PowerMin
control_power = PowerMin;%当发射功率值过小时,发送功率以系统最小发射功率为准
%fprintf('The Power is too Low');
end

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
    • ¥50 汇编语言除法溢出问题
    • ¥65 C++实现删除N个数据列表共有的元素
    • ¥15 Visual Studio问题
    • ¥15 state显示变量是字符串形式,但是仍然红色,无法引用,并显示类型不匹配
    • ¥20 求一个html代码,有偿
    • ¥100 关于使用MATLAB中copularnd函数的问题
    • ¥20 在虚拟机的pycharm上
    • ¥15 jupyterthemes 设置完毕后没有效果
    • ¥15 matlab图像高斯低通滤波