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
- 功能: 主脚本,负责解析命令行参数,调用数据提取和保存函数。
- 主要流程:
- 解析命令行参数: 使用
argparse
解析输入参数,包括输入文件路径、输出目录、目标调制类型(默认所有)、目标 SNR、每种条件下的样本数量。 - 设置随机种子: 确保随机选择的可重复性。
- 创建输出目录: 使用
create_directory
函数创建输出文件夹。 - 读取 HDF5 文件: 使用
h5py
读取输入 HDF5 文件中的X
,Y
,Z
数据集。 - 遍历每个 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 - 所有数据提取与保存操作已完成。