当前位置: 首页 > news >正文

MATLAB仿真生成无线通信网络拓扑推理数据集

一、数据集生成程序

%创建时间:2025年6月3日
%用途:生成不同节点样本,统计稀疏性约束情况
%zhouzhichaoclose all
clearfor n = [20,30,40,50]dataset_n = 100;nodes_P = ones(n,1);for Sampling_M = [3000]%获取一帧信号及对应功率[ack,fs] = ack_generate(Sampling_M);ack_L = length(ack);signal = ack;P_signal = sum(abs(signal).^2);ack_noise = randn(ack_L, 1);P_noise_1 = sum(ack_noise.^2);  % 计算当前噪声的能量as_slot_N = round(7*ack_L);ave_edge = round(1.5*n);L = ave_edge*3*a_slot_N;signals = zeros(n,L);%         for snr=14:-2:0for snr=14:14Signals = zeros(dataset_n,n,L);Tp = zeros(dataset_n,n,n);Tp_list = cell(dataset_n,1);A = 10^(snr/10);P_noise = P_signal/A;alpha = sqrt(P_noise / P_noise_1);  % 计算缩放因子noise = alpha*randn(1, L);for k=1:dataset_ndisp(["k: ",k])pause(0.01)switch ncase 20[tp,tp_list] = a20nodes_tp(nodes_P);case 30[tp,tp_list] = a30nodes_tp(nodes_P);case 40[tp,tp_list] = a40nodes_tp(nodes_P);case 50[tp,tp_list] = a50nodes_tp(nodes_P);endc = 0;% alpha = 0.01;n_edge = length(tp_list);for epoch=1:3index_list = randperm(n_edge);for i =index_listthis_slot_start_point = c*a_slot_N+1;p = tp_list(i,1);q = tp_list(i,2);P1 = nodes_P(p);P2 = nodes_P(q);%三次响应for m=1:3r_P = 0.9 + (1.1 - 0.9) * rand;signal = r_P*P1*ack;signals(p,this_slot_start_point+(2*m-2)*ack_L:this_slot_start_point+(2*m-1)*ack_L-1) = signal;r_P = 0.9 + (1.1 - 0.9) * rand;signal = r_P*P2*ack;signals(q,this_slot_start_point+(2*m-1)*ack_L:this_slot_start_point+(2*m)*ack_L-1) = signal;endc = c + 1;endendfor i=1:nsignals(i,:) = signals(i,:) + noise;endaa = tp*tp;D_list = zeros(n,1);for i=1:nD_list(i) = aa(i,i);endSignals(k,:,:) = signals;Tp(k,:,:) = tp;Tp_list{k} = tp_list;%             set(gca, 'FontName', 'Times New Roman');save("D:\无线通信网络认知\论文1\大修意见\Reviewer1-3 稀疏性约束统计\graph of differ nodes\"+num2str(n)+"_nodes_dataset_snr-"+num2str(snr)+"_M_"+num2str(Sampling_M)+".mat","Tp","Tp_list","Signals")endendend
end
disp("数据集生成完成")

二、核心函数

1.生成20个节点的拓扑

%创建时间:2024年9月2日
%最后修改:2024年9月2日
%zhouzhichao
%自然生长出20节点网络function [tp,tp_list] = a20nodes_tp(P_list)% close all
% clear
N = 20;
% P_list = ones(N,1);tp = zeros(N);
count = 0;x = zeros(N,1);
y = zeros(N,1);%%
%中心节点附近的节点,2级别
x(1) = 0;
y(1) = 0;r2_list = [2,3,4];
a_list = zeros(N,1);a_list(2) = 0;
a_list(3) = 120/360*2*pi;
a_list(4) = 240/360*2*pi;x(2) = 1*cos(a_list(2));
y(2) = 1*sin(a_list(2));
x(3) = 1*cos(a_list(3));
y(3) = 1*sin(a_list(3));
x(4) = 1*cos(a_list(4));
y(4) = 1*sin(a_list(4));tp(1,2)=1;
tp(1,3)=1;
tp(1,4)=1;%%
%3级节点
m = 5;
r3_list = [];
alpha = 2*pi/m;
for i=1:mindex = i+4;r3_list = [r3_list,index];a = 60/360*2*pi+i*alpha;a_list(index) = a;x(index)=2*cos(a);y(index)=2*sin(a);p = min_d_node(index,r2_list,x,y);tp(index,p) = 1;
end%%
%4级节点
m = 8;
r4_list = [];
alpha = 2*pi/m;
for i=1:mindex = i+9;r4_list = [r4_list,index];a = 60/360*2*pi+i*alpha;a_list(index) = a;x(index)=3*cos(a);y(index)=3*sin(a);p = min_d_node(index,r3_list,x,y);tp(index,p) = 1;
end%%
m = 3;
% r4_list = [];
alpha = 2*pi/m;
for i=1:mindex = i+17;
%     r4_list = [r4_list,index];a = 60/360*2*pi+i*alpha;a_list(index) = a;x(index)=4*cos(a);y(index)=4*sin(a);p = min_d_node(index,r4_list,x,y);tp(index,p) = 1;
end%%
%补环
x = x + (rand(size(x)) - 0.5) * 0.6;
y = y + (rand(size(y)) - 0.5) * 0.6;tp = tp + tp';
tp = add_circle(tp,x,y);
tp = add_circle(tp,x,y);
% tp = add_circle(tp,x,y);%%
%绘图% tp = tp + tp';% hold on;
% 
% for i = 1:N
%     for j = i+1:N
%         if tp(i, j) == 1
%             plot([x(i) x(j)], [y(i) y(j)], 'b', 'Color', [125/255, 178/255, 251/255]);
%         end
%     end
% end
% 
% for i =1:length(x)
% %     scatter(x(i), y(i), 100*P_list(i), [47/255, 132/255, 248/255], 'filled', 'MarkerFaceAlpha', P_list(i));
%     scatter(x(i), y(i), 100, [47/255, 132/255, 248/255], 'filled', 'MarkerFaceAlpha', P_list(i));
%     text(x(i)-0.1, y(i)+0.4, num2str(i), 'FontSize', 8, 'Color', [0/255, 0/255, 248/255]);
% end
% % scatter(x, y, [], [47/255, 132/255, 248/255], 'filled');
% xlabel('X');
% ylabel('Y');
% x_min = round(min(x)-1);
% x_max = round(max(x)+1);
% y_min = round(min(y)-1);
% y_max = round(max(y)+1);
% xlim([x_min x_max]);
% ylim([y_min y_max]);
% set(gca, 'FontName', 'Times New Roman');
% 
% 
% axis off;tp_list = [];% 遍历拓扑矩阵,找到所有有连接的节点对for i = 1:Nfor j = i+1:Nif tp(i, j) == 1% 添加节点对 [i, j] 到 nodePairs 矩阵tp_list = [tp_list; i, j];endendend

2.生成30个节点的拓扑

%创建时间:2024年8月28日
%最后修改:2024年9月2日
%zhouzhichao
%自然生长出N节点网络function [tp,tp_list] = a30nodes_tp(P_list)% close all
% clearN = 30;
tp = zeros(N);
count = 0;x = zeros(N,1);
y = zeros(N,1);%%
%中心节点附近的节点,2级别
x(1) = 0;
y(1) = 0;r2_list = [2,3,4];
a_list = zeros(N,1);a_list(2) = 0;
a_list(3) = 120/360*2*pi;
a_list(4) = 240/360*2*pi;x(2) = 1*cos(a_list(2));
y(2) = 1*sin(a_list(2));
x(3) = 1*cos(a_list(3));
y(3) = 1*sin(a_list(3));
x(4) = 1*cos(a_list(4));
y(4) = 1*sin(a_list(4));tp(1,2)=1;
tp(1,3)=1;
tp(1,4)=1;%%
%3级节点
m = 5;
r3_list = [];
alpha = 2*pi/m;
for i=1:mindex = i+4;r3_list = [r3_list,index];a = 60/360*2*pi+i*alpha;a_list(index) = a;x(index)=2*cos(a);y(index)=2*sin(a);p = min_d_node(index,r2_list,x,y);tp(index,p) = 1;
end%%
%4级节点
m = 8;
r4_list = [];
alpha = 2*pi/m;
for i=1:mindex = i+9;r4_list = [r4_list,index];a = 60/360*2*pi+i*alpha;a_list(index) = a;x(index)=3*cos(a);y(index)=3*sin(a);p = min_d_node(index,r3_list,x,y);tp(index,p) = 1;
end%%
m = 13;
% r4_list = [];
alpha = 2*pi/m;
for i=1:mindex = i+17;
%     r4_list = [r4_list,index];a = 60/360*2*pi+i*alpha;a_list(index) = a;x(index)=4*cos(a);y(index)=4*sin(a);p = min_d_node(index,r4_list,x,y);tp(index,p) = 1;
end%%
%补环
x = x + (rand(size(x)) - 0.5) * 0.6;
y = y + (rand(size(y)) - 0.5) * 0.6;tp = tp + tp';
tp = add_circle(tp,x,y);
tp = add_circle(tp,x,y);
% tp = add_circle(tp,x,y);%%
%绘图tp_list = [];% 遍历拓扑矩阵,找到所有有连接的节点对for i = 1:Nfor j = i+1:Nif tp(i, j) == 1% 添加节点对 [i, j] 到 nodePairs 矩阵tp_list = [tp_list; i, j];endendend

3.生成40个节点的拓扑

%创建时间:2024年9月2日
%最后修改:2024年9月2日
%zhouzhichao
%自然生长出N节点网络function [tp,tp_list] = a40nodes_tp(P_list)% close all
% clearN = 40;
% P_list = ones(N,1);tp = zeros(N);count = 0;x = zeros(N,1);
y = zeros(N,1);%%
%中心节点附近的节点,2级别
x(1) = 0;
y(1) = 0;r2_list = [2,3,4];
a_list = zeros(N,1);a_list(2) = 0;
a_list(3) = 120/360*2*pi;
a_list(4) = 240/360*2*pi;x(2) = 1*cos(a_list(2));
y(2) = 1*sin(a_list(2));
x(3) = 1*cos(a_list(3));
y(3) = 1*sin(a_list(3));
x(4) = 1*cos(a_list(4));
y(4) = 1*sin(a_list(4));tp(1,2)=1;
tp(1,3)=1;
tp(1,4)=1;%%
%3级节点
m = 5;
r3_list = [];
alpha = 2*pi/m;
for i=1:mindex = i+4;r3_list = [r3_list,index];a = 60/360*2*pi+i*alpha;a_list(index) = a;x(index)=2*cos(a);y(index)=2*sin(a);p = min_d_node(index,r2_list,x,y);tp(index,p) = 1;
end%%
%4级节点
m = 8;
r4_list = [];
alpha = 2*pi/m;
for i=1:mindex = i+9;r4_list = [r4_list,index];a = 60/360*2*pi+i*alpha;a_list(index) = a;x(index)=3*cos(a);y(index)=3*sin(a);p = min_d_node(index,r3_list,x,y);tp(index,p) = 1;
end%%
m = 13;
r5_list = [];
alpha = 2*pi/m;
for i=1:mindex = i+17;r5_list = [r5_list,index];a = 60/360*2*pi+i*alpha;a_list(index) = a;x(index)=4*cos(a);y(index)=4*sin(a);p = min_d_node(index,r4_list,x,y);tp(index,p) = 1;
end%%
m = 10;
% r4_list = [];
alpha = 2*pi/m;
for i=1:mindex = i+30;
%     r4_list = [r4_list,index];a = 60/360*2*pi+i*alpha;a_list(index) = a;x(index)=5*cos(a);y(index)=5*sin(a);p = min_d_node(index,r5_list,x,y);tp(index,p) = 1;
end%%
%补环
x = x + (rand(size(x)) - 0.5) * 0.6;
y = y + (rand(size(y)) - 0.5) * 0.6;tp = tp + tp';
tp = add_circle(tp,x,y);
tp = add_circle(tp,x,y);
% tp = add_circle(tp,x,y);%%tp_list = [];% 遍历拓扑矩阵,找到所有有连接的节点对for i = 1:Nfor j = i+1:Nif tp(i, j) == 1% 添加节点对 [i, j] 到 nodePairs 矩阵tp_list = [tp_list; i, j];endendend

4.生成50个节点的拓扑 

%创建时间:2024年9月2日
%最后修改:2024年9月2日
%zhouzhichao
%自然生长出N节点网络function [tp,tp_list] = a50nodes_tp(P_list)% close all
% clearN = 50;
% P_list = ones(N,1);tp = zeros(N);count = 0;x = zeros(N,1);
y = zeros(N,1);%%
%中心节点附近的节点,2级别
x(1) = 0;
y(1) = 0;r2_list = [2,3,4];
a_list = zeros(N,1);a_list(2) = 0;
a_list(3) = 120/360*2*pi;
a_list(4) = 240/360*2*pi;x(2) = 1*cos(a_list(2));
y(2) = 1*sin(a_list(2));
x(3) = 1*cos(a_list(3));
y(3) = 1*sin(a_list(3));
x(4) = 1*cos(a_list(4));
y(4) = 1*sin(a_list(4));tp(1,2)=1;
tp(1,3)=1;
tp(1,4)=1;%%
%3级节点
m = 5;
r3_list = [];
alpha = 2*pi/m;
for i=1:mindex = i+4;r3_list = [r3_list,index];a = 60/360*2*pi+i*alpha;a_list(index) = a;x(index)=2*cos(a);y(index)=2*sin(a);p = min_d_node(index,r2_list,x,y);tp(index,p) = 1;
end%%
%4级节点
m = 8;
r4_list = [];
alpha = 2*pi/m;
for i=1:mindex = i+9;r4_list = [r4_list,index];a = 60/360*2*pi+i*alpha;a_list(index) = a;x(index)=3*cos(a);y(index)=3*sin(a);p = min_d_node(index,r3_list,x,y);tp(index,p) = 1;
end%%
m = 13;
r5_list = [];
alpha = 2*pi/m;
for i=1:mindex = i+17;r5_list = [r5_list,index];a = 60/360*2*pi+i*alpha;a_list(index) = a;x(index)=4*cos(a);y(index)=4*sin(a);p = min_d_node(index,r4_list,x,y);tp(index,p) = 1;
end%%
m = 20;
% r4_list = [];
alpha = 2*pi/m;
for i=1:mindex = i+30;
%     r4_list = [r4_list,index];a = 60/360*2*pi+i*alpha;a_list(index) = a;x(index)=5*cos(a);y(index)=5*sin(a);p = min_d_node(index,r5_list,x,y);tp(index,p) = 1;
end%%
%补环
x = x + (rand(size(x)) - 0.5) * 0.6;
y = y + (rand(size(y)) - 0.5) * 0.6;tp = tp + tp';
tp = add_circle(tp,x,y);
tp = add_circle(tp,x,y);
% tp = add_circle(tp,x,y);%%tp_list = [];% 遍历拓扑矩阵,找到所有有连接的节点对for i = 1:Nfor j = i+1:Nif tp(i, j) == 1% 添加节点对 [i, j] 到 nodePairs 矩阵tp_list = [tp_list; i, j];endendend

5.加载实采波形 

% close all
% clear
%zhouzhichao
%创建时间:2024年8月25日
%最后修改时间:2024年9月3日function [Ack,fs] = ack_generate(M)load("D:\无线通信网络认知\论文1\experiment\直推式拓扑推理实验\拓扑生成\Ack.mat");% M = 2000;
Ack = downsample(Ack, M);
fs = 1e6/M;

http://www.lqws.cn/news/90001.html

相关文章:

  • Ansys Zemax | 手机镜头设计 - 第 3 部分:使用 STAR 模块和 ZOS-API 进行 STOP 分析
  • Linux运维笔记:1010实验室电脑资源规范使用指南
  • PHP+mysql 美容美发预约小程序源码 支持DIY装修+完整图文搭建教程
  • Android系统进程优先级
  • 帝国CMS QQ登录插件最新版 获取QQ头像和QQ昵称
  • Python训练打卡Day41
  • 基于VLC的Unity视频播放器(四)
  • window 显示驱动开发-DirectX 视频加速 2.0
  • MATLAB实战:四旋翼姿态控制仿真方案
  • 榕壹云健身预约系统:多门店管理的数字化解决方案(ThinkPHP+MySQL+UniApp实现)
  • Ubuntu 系统部署 MySQL 入门篇
  • 碰一碰发视频-源码系统开发技术分享
  • 阿里云百炼全解析:一站式大模型开发平台的架构与行业实践
  • Dockerfile 使用多阶段构建(build 阶段 → release 阶段)后端配置
  • 深入剖析物联网边缘计算技术:架构、应用与挑战
  • mapbox高阶,生成并加载等时图
  • 【请关注】MySQL 中常见的加锁方式及各类锁常见问题及对应的解决方法
  • RNN结构扩展与改进:从简单循环网络到时间间隔网络的技术演进
  • YOLO-V2 (学习记录)
  • TDengine 的 AI 应用实战——运维异常检测
  • SpringBoot2.3.1集成Knife4j接口文档
  • Java程序员视角- NIO 到 Epoll:深度解析 IO 多路复用原理及 Select/Poll/Epoll 对
  • 基于YOLO-NAS-Pose的无人机象群姿态估计:群体行为分析的突破
  • QT 5.9.2+VTK8.0实现等高线绘制
  • electron定时任务,打印内存占用情况
  • 升级:用vue canvas画一个能源监测设备和设备的关系监测图!
  • Qt 仪表盘源码分享
  • Electron桌面应用下,在拍照、展示pdf等模块时,容易导致应用白屏
  • 不确定性分析在LEAP能源-环境系统建模中的整合与应用
  • 【QT】QString 与QString区别