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

不同程度多径效应影响下的无线通信网络电磁信号仿真数据生成程序

生成.mat数据:

%创建时间:2025年6月19日
%zhouzhichao
%遍历生成不同程度多径效应影响的无线通信网络拓扑推理数据用于测试close all
clearsnr = 40;
n = 30;dataset_n = 100;for bias = 0.1:0.1:0.9nodes_P = ones(n,1);Sampling_M = 3000;%获取一帧信号及对应功率[ack,~] = 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);  % 计算当前噪声的能量a_slot_N = round(7*ack_L);ave_edge = round(1.5*n);L = ave_edge*3*a_slot_N;Signals = 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);  % 计算缩放因子for k=1:dataset_ndisp(["bias: ",bias,"  k: ",k])c = 0;%待生成内容:tp,tp_list,signals[tp,tp_list] = large_nodes_tp(nodes_P,n);signals = zeros(n,L);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 = 1 - bias + 2*bias * 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 = 1 - bias + 2*bias * 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,:) + alpha*randn(1, L);endSignals(k,:,:) = signals;Tp(k,:,:) = tp;Tp_list{k} = tp_list;endsave("D:\无线通信网络认知\论文1\大修意见\Reviewer2-3 多径传输实验\diff var mat\bias_"+num2str(bias)+"_dataset.mat","Tp","Tp_list","Signals")
end

 

转换为PyG可用数据:

#作者:zhouzhichao
#创建时间:2025/6/19
#内容:生成多径效应影响数据集用于实验import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)
import os
import h5py
import matplotlib.pyplot as plt
import numpy as np
import torch
from torch_geometric.data import InMemoryDataset, Data
from torch_geometric.utils import negative_samplingbase_dir = "D:\无线通信网络认知\论文1\大修意见\Reviewer2-3 多径传输实验\diff var mat\\"N = 30
grapg_size = N
train_n = 20class graph_data(InMemoryDataset):def __init__(self, root, signals=None, tp_list = None, transform=None, pre_transform=None):self.signals = signalsself.tp_list = tp_listsuper().__init__(root, transform, pre_transform)self.data = torch.load(self.processed_paths[0])# 返回process方法所需的保存文件名。你之后保存的数据集名字和列表里的一致@propertydef processed_file_names(self):return ['gcn_data.pt']# 生成数据集所用的方法def process(self):signals = self.signalstp_list =self.tp_list#matlab的index是从1开始的,pytorch的index应当从0开始tp_list = tp_list - 1X = torch.tensor(signals, dtype=torch.float)# 所有的边Edge_index = torch.tensor(tp_list, dtype=torch.long)# 所有的边1标签edge_label = np.ones((tp_list.shape[1]))Edge_label = torch.tensor(edge_label, dtype=torch.float)neg_edge_index = negative_sampling(edge_index=Edge_index, num_nodes=grapg_size,num_neg_samples=Edge_index.shape[1], method='sparse')# 拼接正负样本索引Edge_label_index = Edge_indexperm = torch.randperm(Edge_index.size(1))Edge_index = Edge_index[:, perm]Edge_index = Edge_index[:, :train_n]# neg_edge_index = neg_edge_index[:, :train_n]Edge_label_index = torch.cat([Edge_label_index, neg_edge_index],dim=-1,)# 拼接正负样本Edge_label = torch.cat([Edge_label,Edge_label.new_zeros(neg_edge_index.size(1))], dim=0)data = Data(x=X, edge_index=Edge_index, edge_label_index=Edge_label_index, edge_label=Edge_label)torch.save(data, self.processed_paths[0])# data_list.append(data)# data_, slices = self.collate(data_list)  # 将不同大小的图数据对齐,填充# torch.save((data_, slices), self.processed_paths[0])if __name__ =="__main__":# for b in np.arange(0.1, 1.0, 0.1):#     print("b: ",b)for b in np.arange(0.1, 1.0, 0.1):bias = round(b,1)mat_file = h5py.File(base_dir + 'bias_'+str(bias)+'_dataset.mat', 'r')# 获取数据集Signals = mat_file["Signals"][()]Tp = mat_file["Tp"][()]Tp_list = mat_file["Tp_list"][()]n = 100for i in range(n):signals = Signals[:, :, i]tp_list = np.array(mat_file[Tp_list[0, i]])root = 'diff var graph/bias_'+str(bias)+'_data_'+str(i)graph_data(root, signals = signals, tp_list = tp_list)print("")print("...图数据生成完成...")

相关文章:

  • 【lenovo】LEGION 2020款跳过windows账号登录
  • 【MySQL篇01】补充:索引体系大总结(数据库原理篇)
  • C++ 性能分析工具:Valgrind 与 perf
  • Redis 的优势有哪些,它是CP 还是 AP?CAP 理论又是什么?
  • 据字典是什么?和数据库、数据仓库有什么关系?
  • bfs广度优先搜索
  • 微服务学习
  • 【mongoose8.x】mongoose8.x入门教程(二):express中mongoose的链接
  • 23种设计模式--简单工厂模式理解版
  • Flutter中FutureBuilder和StreamBuilder
  • Haproxy搭建web集群
  • 使用 Prometheus 访问 TDengine ---
  • 计算机导论期末快速复习指南
  • 第一章 SQL编程系列-数据库介绍与安装
  • Unity UI 核心类解析之Graphic
  • crawl4ai 框架的入门讲解和实战指南——基于Python的智能爬虫框架,集成AI(如NLP/OCR)实现自动化数据采集与处理
  • DDS 问题排查
  • 基于自然语言处理的智能问答系统(模型训练+部署测试)
  • 【图片识别改名】批量识别图片中的文字对图片进行改名,识别文字对图片重新命名的操作步骤和注意事项
  • python学智能算法(十四)|机器学习朴素贝叶斯方法进阶-CountVectorizer文本处理简单测试
  • 衡水网站推广/高端大气网站建设
  • wordpress中英双语插件/已矣seo排名点击软件
  • 如何查询网站服务商/代运营一家店铺多少钱
  • 平面设计公司调研报告/百度关键词排名优化
  • 做众筹网站要什么资质/seo推广优化方案
  • 网站建设骗子/全国人大常委会