无人机通信网络资源分配与优化matlab源码

无人机通信网络资源优化:基于Matlab的SIR提升策略
该文探讨了无人机通信网络中的资源优化问题,特别是如何最小化CDMA系统的总功率。通过Matlab仿真,对比了移除用户和移动用户策略对信号干扰比(SIR)的影响,旨在改善网络性能。实验结果显示不同用户数量下,两种策略对SIR的提升效果。

​✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信       无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机 

⛄ 内容介绍

近年来,无人机已广泛应用到许多的研究领域,不久的将来大量的无人机会如同雨后春笋般涌现.多个无人机协作能够为无线通信带来许多应用前景,但同时也面临严峻的技术挑战.本文关注无人机通信网络中的资源优化问题。

⛄ 部分代码

%% Objective: minimize the total power for CDMA system

clear; clc;

%% ======Parameters========

ITER = 500;

%ITER = 1;

users_sets = 10:5:30;

%users_sets = 50;

r_N_remove = zeros(length(users_sets),1); % removing algorithm

remove_N = zeros(length(users_sets),1); % the removing number

r_N_move = zeros(length(users_sets),1); % moving algorithm

r_org = zeros(length(users_sets),1); %without any algorithm

h = 50;

for N_users_idex = 1:length(users_sets)  % the number of users.

    N_users = users_sets(N_users_idex);

r_acc_remove = 0;

r_acc_move=0;

remove_all = 0;

r_acc_org = 0;

    for iter = 1:ITER

u_distance = 100;  %%all the users are distributed in a 100 * 100 square

k_center = 4; %% the number of base stations.

centerpoint = u_distance*rand(k_center,2);

all_users = u_distance*rand(N_users,2);

%  plot(all_users(:,1), all_users(:,2),'*'); hold on

%  plot(centerpoint(:,1), centerpoint(:,2),'o','MarkerSize',12)

%% grouping the users to centerpoints

label = zeros(N_users,1);

dist_all = zeros(N_users,1);

for u = 1:N_users

    dist_u = zeros(k_center,1);

    for N =  1:k_center

            dist_u(N) = norm(all_users(u,:) - centerpoint(N,:));

    end

    [N_dist, N_belong] = min(dist_u);

    label(u) =  N_belong;

    dist_all(u) = N_dist;

%     plot([all_users(u,1); centerpoint(N_belong,1)], [all_users(u,2), centerpoint(N_belong,2)])

end

%%

%------the matrix G = [D_11 D_12 …… D_1,N_users; D_21 D_22 …… D_2,N_users;……]

G = funcGenerateG(all_users, centerpoint, label,h);

%%

%----find positive eigen value(r) and eigenvector(p). 

    [p,r] = funcSINRandPower(G);

    r_acc_org = r_acc_org + db(r)/2/ITER;

    %%

%----removing the user with maximal interference until the SIR satisfies

%---------the threshhold

    remove_user = 0;

    r_remove = r;

    p_remove = p;

    G_remove = G;

    while db(r_remove)/2<-10

        remove_user = remove_user +1;

        interference_all = G_remove*p_remove;

        [~,max_index_interf] = max(interference_all);

        G_remove(max_index_interf,:) = [];

        G_remove(:,max_index_interf) = [];

        [p_remove,r_remove] = funcSINRandPower(G_remove);

    end

        r_acc_remove = r_acc_remove+db(r_remove)/2/ITER;  % transfer Ratio to dB.

        remove_all = remove_all + remove_user/ITER;

        

    %%

 %---------moving the user with maximal interference and calculate the new

 %SIR to check if it satisfies the threshold

    move_user = 0;

    r_move = r;

    p_move = p;

    flag = 0;

    G_move= G;

    t=0;

    while db(r_move)/2<-10

        t=t+1;

        r_move_old = r_move;

        move_user = move_user+1;

        interference_all = G_move*p_move;

         [~,max_index_interf] = max(interference_all);

         r_collect = zeros(k_center,1);

         for N_center = 1:k_center

                label(max_index_interf) = N_center;

                G_move = funcGenerateG(all_users, centerpoint, label,h);

                [p_move,r_move] = funcSINRandPower(G_move);

                r_collect(N_center) = r_move;

                if db(r_move)/2>-10

                    flag = 1;

                    break

                end

         end

         if max(r_collect) ==r_move_old || t>100

             r_move = max(r_collect);

             %disp('Cannot find the satisfied grouping method');

             break;

         end

    end

        r_acc_move = r_acc_move+db(r_move)/2/ITER;  % transfer Ratio to dB.

        

    end

    r_N_remove(N_users_idex) = r_acc_remove;

    remove_N(N_users_idex) = remove_all;

    r_N_move(N_users_idex) = r_acc_move;

    r_org(N_users_idex) = r_acc_org;

end

hold on;

plot(users_sets,r_N_remove,'LineWidth',1.5);

plot(users_sets, r_N_move,'LineWidth',1.5); 

plot(users_sets, r_org,'LineWidth',1.5)

legend('removing', 'moving', 'original');

 title(' Distance Based Power Control Algorithm');

 xlabel('Number of Users');

 ylabel('SIR');

   

%%

⛄ 运行结果

⛄ 参考文献

⛳️ 代码获取关注我

❤️部分理论引用网络文献,若有侵权联系博主删除

❤️ 关注我领取海量matlab电子书和数学建模资料

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值