1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/ZJiclJxv
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
SWAP(Sleep-Work-Active-Power)是一种适用于NB-IoT网络的资源管理策略,它通过设备的睡眠、工作和活跃三种状态的切换来实现能量的节约和通信质量的保证。在睡眠状态下,设备仅仅保持最小的能量消耗,可以大大延长设备的寿命;在工作状态下,设备会进行数据采集和传输;在活跃状态下,设备会占用更多的资源进行高速的数据传输。SWAP策略可以平衡设备的能量消耗和通信质量,因此成为了一种适合NB-IoT网络的资源管理策略。
4.部分源码
.......................................................................
figure;
load GS\R2.mat
plot(N2,SUCC,'-bs',...
'LineWidth',1,...
'MarkerSize',6,...
'MarkerEdgeColor','k',...
'MarkerFaceColor',[0.9,0.0,0.0]);
hold on
load SWAP\R2.mat
plot(N2,SUCC,'-r>',...
'LineWidth',1,...
'MarkerSize',6,...
'MarkerEdgeColor','k',...
'MarkerFaceColor',[0.9,0.9,0.0]);
hold on
legend('GS','SWAP');
xlabel('UE数量');
ylabel('连接成功率');
grid on
ylim([0.1,1]);
figure;
load GS\R3.mat
plot(M2,SUCC,'-bs',...
'LineWidth',1,...
'MarkerSize',6,...
'MarkerEdgeColor','k',...
'MarkerFaceColor',[0.9,0.0,0.0]);
hold on
load SWAP\R3.mat
plot(M2,SUCC,'-r>',...
'LineWidth',1,...
'MarkerSize',6,...
'MarkerEdgeColor','k',...
'MarkerFaceColor',[0.9,0.9,0.0]);
hold on
legend('GS','SWAP');
xlabel('Num of channels');
ylabel('连接成功率');
grid on
figure;
load SWAP\R1.mat
plot(P2,'-bs',...
'LineWidth',1,...
'MarkerSize',6,...
'MarkerEdgeColor','k',...
'MarkerFaceColor',[0.9,0.0,0.0]);
hold on
load GS\R1.mat
plot(P2,'-r>',...
'LineWidth',1,...
'MarkerSize',6,...
'MarkerEdgeColor','k',...
'MarkerFaceColor',[0.9,0.9,0.0]);
hold on
xlabel('时间段');
ylabel('各个时段频谱占用率');
grid on
legend(['SWAP频谱占用率:',num2str(mean(P2))],['GS频谱占用率:',num2str(mean(P2))]);
figure;
subplot(121)
load GS\R1.mat
bar3(Nbt2);
xlabel('各个时段');
ylabel('各个频段');
zlabel('服务用户数量');
title(['GS']);
subplot(122)
load SWAP\R1.mat
bar3(Nbt2);
xlabel('各个时段');
ylabel('各个频段');
zlabel('服务用户数量');
title(['SWAP']);
..............................................................................
%提出最偏好的RB
UEn = [];
UEn = find(UNMATCH==0);
best = [];
for i = 1:length(UEn)
best(i) = UELIST(UEn(i));%重新计算偏好列表
end
%SWAP
%GA得到的初始匹配状态
bestf=best;
%初始化列表?记录当前每一个资源块已匹配的用户设备数目
Q = [];
for i=1:M
Q(i)=length(find(bestf==i));
end
for n = 1:N
%表示资源块中可获得的空位置
for n_ = 1:N
%表示资源块中可获得的空位置
if n~=n_
l = UNMATCH(n);
l_= UNMATCH(n_);
%满足(3.7a)~(3.7h) %c,d和f本身就是设置0和1了,所以不用重复判决
if t>=0 & t<=T-1 & t+Nr<=T & sum(RB)<=qmax;
%更新匹配状态
UNMATCH(n)=l_;
end
end
end
end
idxf = find(UNMATCH==1);
bestf = [];
for i = 1:length(idxf)
bestf(i) = UELIST(idxf(i));%重新计算偏好列表
end
%显示要求的两个指标
for ij = 1:M
tmps = find(bestf==ij);
%设置成功率
Perf = rand;
Nbt(ij,jj,mk) = round(Perf*length(tmps));
end
P(jj,mk) = length(unique(Nbt(:,jj,mk)))/M;
end
end
P2 = zeros(T,1);
for mk = 1:MTKL
Nbt2 = Nbt2+Nbt(:,:,mk);
P2 = P2+P(:,mk);
end
Nbt2 = Nbt2/MTKL;
P2 = P2/MTKL;
% %输出则是各个频段在不同时间段的服务用户初始化定义
% Nbt = zeros(M,T);
% %整个频谱的利用率,这里按时段划分,计算每个时段的整体利用率,并输出整体的平均领用率
% P = zeros(1,T);
figure;
plot(P2,'b-o');
xlabel('时间段');
ylabel('各个时段频谱利用率');
grid on
title(['整体频谱利用率:',num2str(mean(P2))]);
figure;
bar3(Nbt2);
xlabel('各个时段');
ylabel('各个频段');
zlabel('服务用户数量');
save R1.mat Nbt2 P2
12_054_m