RadioML2018.01a数据拆分

RadioML2018.01a数据拆分

支持选择不同调制类型、不同SNR、不同样本的组合输出,输出的文件保存为npy文件

项目地址:GitHub - daetz-coder/split_radioML2018_tools: Split RadioML2018 Tools

一、前言

在调制信号识别的过程中,难免需要使用不同信噪比或不同调制类型的数据,但是完整的数据过于庞大,本文提供一种可选参数的数据集划分方法。支持单一类型或多类型数据的输出,输出的结果保存到npy文件这种,方便后续加载,可选参数如下:

  • --hdf5_path: 输入 HDF5 文件的路径(必填)。
  • --output_dir: 输出数据保存的根目录(必填)。
  • --modulations: 目标调制类型列表(可选)。如果未指定,则默认选择所有 24 种调制类型。
  • --snrs: 目标 SNR 列表(必填)。
  • --samples: 每种条件下提取的样本数量(默认 1000)。

数据集包含24种调制样式:‘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’

信噪比范围:SNR = 【-20:32:2】 -20到30间隔2,共26种信噪比,具体【-20,-18…28,30】

每个调制,每个信噪比有4096条数据,共计2555904(24*26*4096)条数据,IQ数据,数据格式为(1024, 2)

在数据集存放文件hdf5文件,存在3个参数X(IQ信号),Y(调制方式),Z(信噪比)
X——>[24*26*4096,1024,2]
Y——>[24*26*4096,24] 采用onehot,所以不是[24*26*4096,1] ,顺序为上述顺序(class-fixed.txt修正后的 )
Z——>[24*26*4096,1]

【AMR自动调制识别数据预处理】DeepSig RadioML 2018.01A 处理为单信噪比单调制数据_radioml2018.01a-CSDN博客

二、项目构建

由于GOLD_XYZ_OSC.0001_1024.hdf5 文件较大,需要内存大于20GB

git clone https://github.com/daetz-coder/split_radioML2018_tools

1、项目结构

project/
│
├── data/
│
├── scripts/
│   ├── data_extractor.py
│   ├── data_saver.py
│   └── main.py
│
├── tests/
│   └── check_npy.ipynb
│
├── requirements.txt
└── README.md

2、安装依赖

pip install requirements.txt

3、运行

  • --hdf5_path: 输入 HDF5 文件的路径(必填)。
  • --output_dir: 输出数据保存的根目录(必填)。
  • --modulations: 目标调制类型列表(可选)。如果未指定,则默认选择所有 24 种调制类型。
  • --snrs: 目标 SNR 列表(必填)。
  • --samples: 每种条件下提取的样本数量(默认 1000)。
1、指定SNR、不指定调制类型(处理所有调制类型)
python scripts/main.py \
    --hdf5_path '../GOLD_XYZ_OSC.0001_1024.hdf5' \
    --output_dir './data/selected_data' \
    --snrs 6 \
    --samples 10
2、指定多种SNR、不指定调制类型(处理所有调制类型)
python scripts/main.py \
    --hdf5_path '../GOLD_XYZ_OSC.0001_1024.hdf5' \
    --output_dir './data/selected_data' \
    --snrs -20 30 \
    --samples 10
3、指定SNR 、指定调制类型
python scripts/main.py \
    --hdf5_path '../GOLD_XYZ_OSC.0001_1024.hdf5' \
    --output_dir './data/selected_data' \
    --modulations 'QPSK' 'BPSK' \
    --snrs 6 \
    --samples 10
4、结果
project/
│
├── data/
│   └── selected_data/
│       ├── SNR_6/
│       │   ├── X_SNR_6_mod_QPSK.npy
│       │   └── X_SNR_6_mod_BPSK.npy
│       └── SNR_10/
│           ├── X_SNR_10_mod_QPSK.npy
│           └── X_SNR_10_mod_BPSK.npy
│
├── scripts/
│   ├── data_extractor.py
│   ├── data_saver.py
│   └── main.py
│
├── tests/
│   └── check_npy.ipynb
│
├── requirements.txt
└── README.md

三、方法介绍

1、data_extractor.py

  • 功能: 提取指定调制类型和 SNR 下的 X 数据样本。
  • 主要函数
    • extract_X_data: 根据调制类型和 SNR 筛选 X 数据,并随机选择指定数量的样本。

2、data_saver.py

  • 功能: 提供保存数据的工具函数。
  • 主要函数
    • save_to_npy: 将数据保存为 .npy 文件。
    • create_directory: 创建目录,如果目录不存在。

3、main.py

  • 功能: 主脚本,负责解析命令行参数,调用数据提取和保存函数。
  • 主要流程:
    1. 解析命令行参数: 使用 argparse 解析输入参数,包括输入文件路径、输出目录、目标调制类型(默认所有)、目标 SNR、每种条件下的样本数量。
    2. 设置随机种子: 确保随机选择的可重复性。
    3. 创建输出目录: 使用 create_directory 函数创建输出文件夹。
    4. 读取 HDF5 文件: 使用 h5py 读取输入 HDF5 文件中的 X, Y, Z 数据集。
    5. 遍历每个 SNR
      • 为每个 SNR 创建一个文件夹。
      • 在每个 SNR 文件夹内,遍历所有指定的调制类型,提取 X 数据,并保存为 .npy 文件。
  • 参数说明:
    • --hdf5_path: 输入 HDF5 文件的路径(必填)。
    • --output_dir: 输出数据保存的根目录(必填)。
    • --modulations: 目标调制类型列表(可选)。如果未指定,则默认选择所有 24 种调制类型。
    • --snrs: 目标 SNR 列表(必填)。
    • --samples: 每种条件下提取的样本数量(默认 1000)。

四、终端日志

python scripts/main.py \
    --hdf5_path '../GOLD_XYZ_OSC.0001_1024.hdf5' \
    --output_dir './data/selected_data' \
    --snrs 6 \
    --samples 10
2024-10-18 16:01:19,326 - INFO - 可用的调制类型: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
2024-10-18 16:01:19,327 - INFO - 打开HDF5文件: ../GOLD_XYZ_OSC.0001_1024.hdf5
2024-10-18 16:01:33,334 - INFO - 目标调制类型: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
2024-10-18 16:01:33,334 - INFO - 目标 SNR:6 dB
2024-10-18 16:01:33,334 - INFO - 每种条件下提取的样本数量:10
数据已保存到 ./data/selected_data/SNR_6/X_SNR_6_mod_OOK.npy
2024-10-18 16:01:33,379 - INFO - 提取并保存 OOK 在 6 dB 下的 10 个样本成功。
数据已保存到 ./data/selected_data/SNR_6/X_SNR_6_mod_4ASK.npy
2024-10-18 16:01:33,425 - INFO - 提取并保存 4ASK 在 6 dB 下的 10 个样本成功。
数据已保存到 ./data/selected_data/SNR_6/X_SNR_6_mod_8ASK.npy
2024-10-18 16:01:33,467 - INFO - 提取并保存 8ASK 在 6 dB 下的 10 个样本成功。
数据已保存到 ./data/selected_data/SNR_6/X_SNR_6_mod_BPSK.npy
2024-10-18 16:01:33,510 - INFO - 提取并保存 BPSK 在 6 dB 下的 10 个样本成功。
数据已保存到 ./data/selected_data/SNR_6/X_SNR_6_mod_QPSK.npy
2024-10-18 16:01:33,553 - INFO - 提取并保存 QPSK 在 6 dB 下的 10 个样本成功。
数据已保存到 ./data/selected_data/SNR_6/X_SNR_6_mod_8PSK.npy
2024-10-18 16:01:33,595 - INFO - 提取并保存 8PSK 在 6 dB 下的 10 个样本成功。
数据已保存到 ./data/selected_data/SNR_6/X_SNR_6_mod_16PSK.npy
2024-10-18 16:01:33,637 - INFO - 提取并保存 16PSK 在 6 dB 下的 10 个样本成功。
数据已保存到 ./data/selected_data/SNR_6/X_SNR_6_mod_32PSK.npy
2024-10-18 16:01:33,685 - INFO - 提取并保存 32PSK 在 6 dB 下的 10 个样本成功。
数据已保存到 ./data/selected_data/SNR_6/X_SNR_6_mod_16APSK.npy
2024-10-18 16:01:33,728 - INFO - 提取并保存 16APSK 在 6 dB 下的 10 个样本成功。
数据已保存到 ./data/selected_data/SNR_6/X_SNR_6_mod_32APSK.npy
2024-10-18 16:01:33,770 - INFO - 提取并保存 32APSK 在 6 dB 下的 10 个样本成功。
数据已保存到 ./data/selected_data/SNR_6/X_SNR_6_mod_64APSK.npy
2024-10-18 16:01:33,813 - INFO - 提取并保存 64APSK 在 6 dB 下的 10 个样本成功。
数据已保存到 ./data/selected_data/SNR_6/X_SNR_6_mod_128APSK.npy
2024-10-18 16:01:33,855 - INFO - 提取并保存 128APSK 在 6 dB 下的 10 个样本成功。
数据已保存到 ./data/selected_data/SNR_6/X_SNR_6_mod_16QAM.npy
2024-10-18 16:01:33,897 - INFO - 提取并保存 16QAM 在 6 dB 下的 10 个样本成功。
数据已保存到 ./data/selected_data/SNR_6/X_SNR_6_mod_32QAM.npy
2024-10-18 16:01:33,940 - INFO - 提取并保存 32QAM 在 6 dB 下的 10 个样本成功。
数据已保存到 ./data/selected_data/SNR_6/X_SNR_6_mod_64QAM.npy
2024-10-18 16:01:33,988 - INFO - 提取并保存 64QAM 在 6 dB 下的 10 个样本成功。
数据已保存到 ./data/selected_data/SNR_6/X_SNR_6_mod_128QAM.npy
2024-10-18 16:01:34,030 - INFO - 提取并保存 128QAM 在 6 dB 下的 10 个样本成功。
数据已保存到 ./data/selected_data/SNR_6/X_SNR_6_mod_256QAM.npy
2024-10-18 16:01:34,072 - INFO - 提取并保存 256QAM 在 6 dB 下的 10 个样本成功。
数据已保存到 ./data/selected_data/SNR_6/X_SNR_6_mod_AM-SSB-WC.npy
2024-10-18 16:01:34,115 - INFO - 提取并保存 AM-SSB-WC 在 6 dB 下的 10 个样本成功。
数据已保存到 ./data/selected_data/SNR_6/X_SNR_6_mod_AM-SSB-SC.npy
2024-10-18 16:01:34,157 - INFO - 提取并保存 AM-SSB-SC 在 6 dB 下的 10 个样本成功。
数据已保存到 ./data/selected_data/SNR_6/X_SNR_6_mod_AM-DSB-WC.npy
2024-10-18 16:01:34,200 - INFO - 提取并保存 AM-DSB-WC 在 6 dB 下的 10 个样本成功。
数据已保存到 ./data/selected_data/SNR_6/X_SNR_6_mod_AM-DSB-SC.npy
2024-10-18 16:01:34,242 - INFO - 提取并保存 AM-DSB-SC 在 6 dB 下的 10 个样本成功。
数据已保存到 ./data/selected_data/SNR_6/X_SNR_6_mod_FM.npy
2024-10-18 16:01:34,291 - INFO - 提取并保存 FM 在 6 dB 下的 10 个样本成功。
数据已保存到 ./data/selected_data/SNR_6/X_SNR_6_mod_GMSK.npy
2024-10-18 16:01:34,333 - INFO - 提取并保存 GMSK 在 6 dB 下的 10 个样本成功。
数据已保存到 ./data/selected_data/SNR_6/X_SNR_6_mod_OQPSK.npy
2024-10-18 16:01:34,375 - INFO - 提取并保存 OQPSK 在 6 dB 下的 10 个样本成功。
2024-10-18 16:01:34,376 - INFO - 所有数据提取与保存操作已完成。
python scripts/main.py \
    --hdf5_path '../GOLD_XYZ_OSC.0001_1024.hdf5' \
    --output_dir './data/selected_data' \
    --modulations 'QPSK' 'BPSK' \
    --snrs 6 \
    --samples 2
2024-10-18 15:56:47,481 - INFO - 可用的调制类型: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
2024-10-18 15:56:47,482 - INFO - 打开HDF5文件: ../GOLD_XYZ_OSC.0001_1024.hdf5
2024-10-18 15:57:01,735 - INFO - 目标调制类型:QPSK
2024-10-18 15:57:01,735 - INFO - 目标 SNR:6 dB
2024-10-18 15:57:01,735 - INFO - 每种条件下提取的样本数量:2
数据已保存到 ./data/selected_data/SNR_6/X_SNR_6_mod_QPSK.npy
2024-10-18 15:57:01,772 - INFO - 提取并保存 QPSK 在 6 dB 下的 2 个样本成功。
2024-10-18 15:57:01,772 - INFO - 所有数据提取与保存操作已完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值