Python深度学习:最全的RML2018a数据集处理代码,你想要的数据集都可容易获取

文章目录

    • 1. 拆分比较细的版本
    • 2. 最终留下的万能版本

1. 拆分比较细的版本

import h5py
import numpy as np
import scipy.io as io
import os# 数据集:RML2018a (24种调制方式 * 26种信噪比* 4096个样本)=2555904
class ReadData():# 初始化def __init__(self,path): self.path=pathself.data=self.read_raw_data()self.X=self.data['X']self.Y=self.data['Y']self.Z=self.data['Z']self.mods=['OOK', '4ASK', '8ASK', 'BPSK', 'QPSK', '8PSK', '16PSK', '32PSK','16APSK', '32APSK','64APSK', '128APSK', '16QAM', '32QAM', '64QAM','128QAM', '256QAM', 'AM-SSB-WC', 'AM-SSB-SC', 'AM-DSB-WC', 'AM-DSB-SC', 'FM', 'GMSK', 'OQPSK'] # 24种调制方式self.snrs = list(range(-20, 31, 2)) # 26种信噪比self.len_mods=len(self.mods) # 24种调制方式self.len_snrs=len(self.snrs) # 26种信噪比self.sample_num=4096 # 单一信噪比下单一调制方式的样本个数# 读取数据,并返回一个字典def read_raw_data(self):data={}with h5py.File(self.path, 'r') as h5file:  data['X'] = h5file['X'][:]  # ndarray(2555904, 1024, 2)data['Y'] = h5file['Y'][:]  # ndarray(2555904*24),标签,one-hot形式data['Z'] = h5file['Z'][:]  # ndarray(2555904*1),信噪比print('数据维度 X:',data['X'].shape)   print('标签维度one-hot形式 Y:',data['Y'].shape)   print('信噪比 Z:',data['Z'].shape) return data# 将原始数据拆分为:一种信噪比下的一种调制方式就是一个单独的文件(共有24*26=624)def split_snr_mod_data(self):snr_mod_folder='data/snr_mod_data' # 创建保存数据的文件夹if not os.path.exists(snr_mod_folder):os.makedirs(snr_mod_folder)n = 0for i in range(0, self.len_mods, 1):for j in range(0, self.len_snrs, 1):IQ = self.X[n * self.sample_num:(n + 1) * self.sample_num, :, :]path = 'data/snr_mod_data/'+ self.mods[i] + "_SNR=" + str(self.snrs[j]) + "dB.mat"io.savemat(path, {'IQ_data': IQ})n = n + 1print('END')# 将原始数据保存到单个的文件中,一种信噪比就是一个单独的文件def split_snr_data(self):snr_folder='data/snr_data' # 创建保存数据的文件夹if not os.path.exists(snr_folder):os.makedirs(snr_folder)# 每种调制方式和信噪比组合的数据量samples_per_mod_snr = self.sample_numtotal_mods = len(self.mods) # 24total_snrs = len(self.snrs) # 26# 按信噪比保存数据for snr_index, snr in enumerate(self.snrs):# 创建存储当前信噪比下所有调制方式数据的列表combined_IQ = []for mod_index in range(total_mods):# 计算当前信噪比和调制方式下的索引范围start_index = mod_index * total_snrs * samples_per_mod_snr + snr_index * samples_per_mod_snrend_index = start_index + samples_per_mod_snr# 提取对应的IQ数据IQ = self.X[start_index:end_index, :, :]combined_IQ.append(IQ)# 将所有调制方式的数据合并为一个大数组combined_IQ = np.concatenate(combined_IQ, axis=0)# 保存数据到MAT文件path = f'data/snr_data/SNR={snr}dB.mat'io.savemat(path, {'IQ_data': combined_IQ})print('END')    # 将原始数据保存到单个的文件中,一种调制方式就是一个单独的文件def split_mod_data(self):snr_folder='data/mod_data' # 创建保存数据的文件夹if not os.path.exists(snr_folder):os.makedirs(snr_folder)# 每种调制方式和信噪比组合的数据量samples_per_mod_snr = self.sample_numtotal_snrs = self.len_snrs # 26# 按调制方式保存数据for mod_index, mod in enumerate(self.mods):# 创建存储当前调制方式下所有信噪比数据的列表combined_IQ = []for snr_index in range(total_snrs):# 计算当前信噪比和调制方式下的索引范围start_index = mod_index * total_snrs * samples_per_mod_snr + snr_index * samples_per_mod_snrend_index = start_index + samples_per_mod_snr# 提取对应的IQ数据IQ = self.X[start_index:end_index, :, :]combined_IQ.append(IQ)# 将所有信噪比的数据合并为一个大数组combined_IQ = np.concatenate(combined_IQ, axis=0)# 保存数据到MAT文件path = f'data/mod_data/{mod}_all_SNRs.mat'io.savemat(path, {'IQ_data': combined_IQ})print('END')    # 将所需要的数据集保存到单个的文件中(调制方式的范围和信噪比的范围)
def split_snr_mod_choice_data(data_folder,choice_mods,choice_snrs):save_folder='data/snr_mod_choice_data' # 创建保存数据的文件夹if not os.path.exists(save_folder):os.makedirs(save_folder)# 先计算出要取的文件的文件名name_list=[]for mod in choice_mods:for snr in choice_snrs:file_name=mod+'_SNR='+str(snr)+'dB.mat'name_list.append(file_name)print(name_list)# 再遍历取出对应文件 data_list=[]for root, dirs, files in os.walk(data_folder):  for file in files:  if file in name_list:data=io.loadmat(os.path.join(root, file))['IQ_data']print(data.shape)  data_list.append(data)stacked_array = np.concatenate(data_list, axis=0) print(stacked_array.shape)  str_mod='-'.join(choice_mods)  choice_snrs_str=[str(snr) for snr in choice_snrs]str_snr='-'.join(choice_snrs_str)name=str_mod+'+'+str_snrprint(name)path = f'data/snr_mod_choice_data/{name}.mat'io.savemat(path, {'IQ_data': stacked_array})if __name__ == '__main__':# 初次执行的话,先执行Step1切分数据,以后再筛选不同数据集时直接执行Step2即可# ------------------------Step1 切分数据集 ------------------------------# raw_data_path='data/GOLD_XYZ_OSC.0001_1024.hdf5'# read_data=ReadData(path=raw_data_path)# read_data.split_snr_mod_data()# read_data.split_snr_data()# read_data.split_mod_data()# # ------------------------Step2 挑选数据集  ----------------------------choice_mods=['OOK', '4ASK', '8ASK']choice_snrs=[0,2,4]data_folder='data/snr_mod_data' # 存放原始数据的地方split_snr_mod_choice_data(data_folder,choice_mods,choice_snrs)

2. 最终留下的万能版本

import h5py
import numpy as np
import scipy.io as io
import os# 数据集:RML2018a (24种调制方式 * 26种信噪比* 4096个样本)=2555904
class ReadData():# 初始化def __init__(self,path): self.path=pathself.data=self.read_raw_data()self.X=self.data['X']self.Y=self.data['Y']self.Z=self.data['Z']self.mods=['OOK', '4ASK', '8ASK', 'BPSK', 'QPSK', '8PSK', '16PSK', '32PSK','16APSK', '32APSK','64APSK', '128APSK', '16QAM', '32QAM', '64QAM','128QAM', '256QAM', 'AM-SSB-WC', 'AM-SSB-SC', 'AM-DSB-WC', 'AM-DSB-SC', 'FM', 'GMSK', 'OQPSK'] # 24种调制方式self.snrs = list(range(-20, 31, 2)) # 26种信噪比self.len_mods=len(self.mods) # 24种调制方式self.len_snrs=len(self.snrs) # 26种信噪比self.sample_num=4096 # 单一信噪比下单一调制方式的样本个数self.snr_mod_folder='data/split' # 保存数据的文件夹# 读取数据,并返回一个字典def read_raw_data(self):data={}with h5py.File(self.path, 'r') as h5file:  data['X'] = h5file['X'][:]  # ndarray(2555904, 1024, 2)data['Y'] = h5file['Y'][:]  # ndarray(2555904*24),标签,one-hot形式data['Z'] = h5file['Z'][:]  # ndarray(2555904*1),信噪比print('数据维度 X:',data['X'].shape)   print('标签维度one-hot形式 Y:',data['Y'].shape)   print('信噪比 Z:',data['Z'].shape) return data# 将原始数据拆分为:一种信噪比下的一种调制方式就是一个单独的文件(共有24*26=624)def split_data(self):if not os.path.exists(self.snr_mod_folder):os.makedirs(self.snr_mod_folder)n = 0for i in range(0, self.len_mods, 1):for j in range(0, self.len_snrs, 1):IQ = self.X[n * self.sample_num:(n + 1) * self.sample_num, :, :]path = self.snr_mod_folder+ '/'+self.mods[i] + "_SNR=" + str(self.snrs[j]) + "dB.mat"io.savemat(path, {'IQ_data': IQ})n = n + 1print('END')  # 将所需要的数据集保存到单个的文件中(调制方式的范围和信噪比的范围)
def choice_data(data_folder,choice_mods,choice_snrs):save_folder='data/choice' # 创建保存数据的文件夹if not os.path.exists(save_folder):os.makedirs(save_folder)# 先计算出要取的文件的文件名name_list=[]for mod in choice_mods:for snr in choice_snrs:file_name=mod+'_SNR='+str(snr)+'dB.mat'name_list.append(file_name)print(name_list)# 再遍历取出对应文件 data_list=[]for root, dirs, files in os.walk(data_folder):  for file in files:  if file in name_list:data=io.loadmat(os.path.join(root, file))['IQ_data']print(data.shape)  data_list.append(data)stacked_array = np.concatenate(data_list, axis=0) print(stacked_array.shape)  # 获取文件名str_mod='-'.join(choice_mods)  choice_snrs_str=[str(snr) for snr in choice_snrs]str_snr='-'.join(choice_snrs_str)name=str_mod+'+'+str_snrprint(name)path = save_folder+f'/{name}.mat'io.savemat(path, {'IQ_data': stacked_array})if __name__ == '__main__':# 初次执行的话,先执行Step1切分数据,以后再筛选不同数据集时直接执行Step2即可# ------------------------Step1 切分数据集 ------------------------------# raw_data_path='data/raw/GOLD_XYZ_OSC.0001_1024.hdf5'# read_data=ReadData(path=raw_data_path)# read_data.split_data()# # ------------------------Step2 挑选数据集  ----------------------------choice_mods=['OOK', '4ASK', '8ASK']# choice_snrs=[0,2,4]choice_snrs=list(range(0, 31, 2)) # 15种信噪比data_folder='data/split' # 存放原始数据的地方choice_data(data_folder,choice_mods,choice_snrs)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/14178.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最新腾讯音乐人挂机脚本,号称日赚300+【永久脚本+使用教程】

项目介绍 首先需要认证腾讯音乐人,上传自己的歌曲,然后用小号通过脚本去刷自己的歌曲 ,赚取播放量 ,1万播放大概就是50到130之间 腾讯认证不需要露脸,不吞量,不封号 脚本,全自动无脑挂机&…

pyecharts 输出空白不显示图形的解决办法

20240520补充: pyecharts在JupyterLab中无法显示的解决方案-CSDN博客 可以不用再看下面降级 notebook 的方法了,主要的原因是 pyecharts 在 notebook 7 之后使用了 JUPYTER_LAB 来画图了,看上面篇文章就可以了。 问题: 全新安…

Redis篇 有关Redis的认识和Redis的特性应用场景

Redis 一. Redis的基本概念1.1 应用/系统1.2 模块/组件1.3 分布式1.4 集群1.5 主/从1.6 中间件1.7 可用性1.8 响应时长1.9 吞吐 二.Redis的特性三.使用场景 一. Redis的基本概念 1.1 应用/系统 一个应用就是一个组,一个服务器程序 1.2 模块/组件 一个应用,里面有很多功能,每个…

用户态网络缓冲区设计

基于数组实现的环形缓冲区: 优点 使用固定大小的连续空间做用户态缓冲区,利用了内存访问的局部性,可以提高缓存命中率,提高程序性能,在处理大量数据时,缓存的利用率对性能有着很大的影响 正是基于性能的…

Ceph集群RBD块存储:快照与Copy-on-Write克隆的基本操作

文章目录 1.RBD块存储镜像克隆概念2.copy-on-write克隆的基本使用2.1.在块存储中创建一个快照2.2.将快照配置成保护模式2.3.基于快照克隆出镜像2.4.使用克隆的镜像2.5.查看一个快照下有哪些克隆的镜像 1.RBD块存储镜像克隆概念 镜像克隆官方文档:https://docs.ceph…

飞睿智能超宽带UWB标签模组,简化设备开发流程,实时高速率数传交互应用

在科技飞速发展的今天,UWB超宽带技术因其高精度、低功耗和高安全性的特点,正逐渐成为智能设备定位和数据传输的新宠。 UWB技术是一种无线通信技术,它通过使用非常宽的频带进行数据传输,从而实现高数据传输速率和高精度定位。 飞…

qt designer 依赖库 QMessageBox

目录 qt designer 依赖库配置实例 单步调试快捷键 f10 QMessageBox 使用方法 背景图设置

【机器学习】基于核的机器学习算法应用

大数据时代下,基于核的机器学习算法:原理、应用与未来展望 一、引言二、核函数的概念与重要性三、基于核的算法原理与步骤四、基于核的算法应用实例五、总结与展望 一、引言 在大数据时代的浪潮下,数据的价值被无限放大,而如何高…

java操作Redis缓存设置过期时间

如何用java操作Redis缓存设置过期时间?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 在应用中我们会需要使用redis设置过期时间&…

c++中 std::iterator_traits与if constexpr 语句用法

std::iterator std::iterator_traits 是 C 标准库中的一个模板类,用于提取迭代器的特征(traits)。它提供了一种统一的方式来访问迭代器的特征,比如迭代器的值类型、指针类型、引用类型等。 std::iterator_traits 的定义如下&…

华为云认证和阿里云认证区别在哪?建议考哪个?

在云计算的浪潮中,专业认证成为提升个人技能和职场竞争力的重要途径。 华为云认证和阿里云认证,作为两大国内云服务商提供的专业技术认证,各自承载着不同的特点和行业认可度,各自以独特的优势服务于企业和个人。 对于追求专业成长…

vue三级联动组件

背景 项目中经常出现三级下拉框组件的要求,这种组件其中一级发生变化,子级的组件就会发生变化如果这一个组件,单独作为搜索条件使用,很好写,同时作为搜索条件和form回写组件,回显就比较困难 子组件代码 将与…

FaceFusion源码框架解读

FaceFusion源码框架解读 我的视频讲解:FaceFusion入门教学 FaceFusion官网 FaceFusion是一款开源的AI换脸工具,一款非常好用的换脸工具,操作简单,上手容易。 Facefusion:GitHub - facefusion/facefusion: Next gene…

我怎么使用AI大语言模型学英语

今天已经是我开始英语拉练任务的第39天了,一直在笃定的、雷打不动的、机械笨拙的重复做一件事,那就是使用AI工具,将我想要说的话翻译成英文,生成语音文件,每天朗读三小时,最终整个背下来。我也在思考&#…

【Java】手把手学会数组的使用

数组的基本用法 创建数组 基本语法: // 动态初始化 数据类型 [] 数组名称 new 数据类型 [] { 初始化数据 }; // 静态初始化 数据类型 [] 数组名称 { 初始化数据 }; 代码示例: int[] array1 {1,2,3,4,5};int[] array2 new int[]…

JS、Go、Rust 错误处理的不同 - JS 可以不用 Try/Catch 吗?

原文:Mateusz Piorowski - 2023.07.24 先来了解一下我的背景吧。我是一名软件开发人员,有大约十年的工作经验,最初使用 PHP,后来逐渐转向 JavaScript。 大约五年前,我开始使用 TypeScript,从那时起&#…

Flume 的基本介绍和安装部署

一、Flume 概述 Flume 是 Cloudera 提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的框架服务 Flume 基于流式架构,灵活简单,能够实时读取服务器本地磁盘的数据,将数据写入到 HDFS 二、Flume 基础架构…

Cloneable 接口和深拷贝,浅拷贝

目录 一.Cloneable 接口 二.浅拷贝 三.深拷贝 四.comparable接口、 五.comparator接口 1.Java 中内置了一些很有用的接口 , Cloneable 就是其中之一 . Object 类中存在一个 clone 方法 , 调用这个方法可以创建一个对象的 " 拷贝 ". 2.来说说调用 clone 方法…

基于深度学习的表情识别系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着人工智能技术的快速发展,表情识别成为了人机交互领域的一个研究热点。表情识别技术旨…

Python数字比大小获取大的数

目录 一、引言 二、数字比较的基本语法 三、获取较大的数 使用条件语句 使用内置函数 四、处理特殊情况 比较非数字类型 处理无穷大和NaN 五、应用实例 在游戏开发中比较分数 在数据分析中找出最大值 六、优化与性能 七、总结 一、引言 在Python编程的广阔天地中…