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 求帮我调试一下freefem代码
    • ¥15 R语言Rstudio突然无法启动
    • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
    • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
    • ¥15 用windows做服务的同志有吗
    • ¥60 求一个简单的网页(标签-安全|关键词-上传)
    • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
    • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
    • ¥100 为什么这个恒流源电路不能恒流?
    • ¥15 有偿求跨组件数据流路径图