RML2016.10a数据集读取和处理
目录
- 一、RadioML2016.10a数据集介绍
- 二、读取方式
- 2.1读取数据
- 2.2打印数据
- 三、原作者处理方式及代码
- 四、调制识别数据集相关阅读
- 4.1 免费内容:
- 4.2 付费内容(可节约大量时间成本,有需要可了解):
一、RadioML2016.10a数据集介绍
相信能看到这个博客的一定已经得到数据集了,网上资源也很多。
该数据集生成的代码:RML2016.10a生成代码
要使用这代码生成自己的数据集代码有点麻烦,除了需要下GNURadio,还需要下载一些包建立一些依赖(比如import gnuradio需要gr-mediatools),方法在该文章中给出。除了RML2016a外,该作者的其余公开数据集可见文章。
上述具体内容整理如下,也包括了博主整理的这些年有名的神经网络参考文献:
内容 | 链接 |
---|---|
数据集来源 | Radio Machine Learning Dataset Generation with GNU Radio |
数据集生成代码 | RML2016.10a生成代码 |
GNURadio配置 | 环境搭建 |
RML数据集 | 除了RML2016a外该作者的其余公开数据集 |
各类神经网络参考文献 | 链接 |
以下是RML2016.10a的主要配置
RML2016.10a内容 | 具体信息 |
---|---|
数据源 | 数字调制信号:莎士比亚的古腾堡作品;模拟调制信号:连续剧《Serial Episode》 |
生成方式 | Gnuradio+Python |
数据格式 | IQ(In-phaseand Quadrature)数据格式:2×128 |
样本总量 | 220000(22万) |
采样率偏移标准偏差 | 0.01Hz |
最大采样率偏移 | 50Hz |
载波频率偏移标准差 | 0.01Hz |
最大载波频率偏移 | 500Hz |
频率选择性衰落中使用的正弦波数 | 8 |
调制方式 | 8个数字调制方式: 8PSK, BPSK, CPFSK, GFSK, PAM4, 16QAM, 64QAM, QPSK;3个模拟调制方式:AM-DSB, AM-SSB, WBFM |
信噪比范围 | -20dB~18dB,间隔2dB |
采样率 | 200kHZ |
延迟设置 | [0.0, 0.9, 1.7] |
每个延迟时间对应的幅度 | [1, 0.8, 0.3] |
噪声 | 加性高斯白噪声(Additive White Gaussian Noise,AWGN) |
信道环境 | 加性高斯白噪声、选择性衰落(莱斯(Rician)+瑞利(Rayleigh))、中心频率偏移(Center Frequency Offset, CFO) 、采样率偏移(Sample Rate Offset, SRO) |
二、读取方式
由于RML2016.10a_dict.pkl的编码是latin-1(以此为例,其他的也可以类似,实在查不到,也可以最笨的方法,一个个编码格式试出来= =)
2.1读取数据
with open(r'**路径**', 'rb') as p_f:s = pickle.load(p_f,encoding="latin-1")
2.2打印数据
举个例子,看你要读取什么,根据自己要求读取(截取了部分图。。因为太长了)
for i in s.keys():
# print(i,s[i])
# print(s[i]) # 输出字典数据print(i) # 输出数据前类似于('QPSK', 2)的格式k=k+1
print(k)
三、原作者处理方式及代码
以下是原文作者的处理方式,但仍有不足
①对数据集的划分不严谨(分为训练集和测试集,理论上应该还有个验证集,由于是keras,比较轻便,使用validation_split就可以实现训练集中拆分出验证集)
②他是将数据以整体形式划分为训练集和测试集,因此单个类(调制方式)的划分的比例不均匀,这里建议分层抽样。
Xd = pickle.load(open("./database/RML2016.10a_dict.pkl", 'rb'), encoding='latin')
snrs, mods = map(lambda j: sorted(list(set(map(lambda x: x[j], Xd.keys())))), [1, 0])
X = []
lbl = []
for mod in mods:for snr in snrs:X.append(Xd[(mod, snr)])for i in range(Xd[(mod, snr)].shape[0]): lbl.append((mod, snr))X = np.vstack(X)
# %%
np.random.seed(2016) # 对预处理好的数据进行打包,制作成投入网络训练的格式,并进行one-hot编码
n_examples = X.shape[0]
n_train = n_examples * 0.7
train_idx = np.random.choice(range(0, n_examples), size=int(n_train), replace=False)
test_idx = list(set(range(0, n_examples)) - set(train_idx)) # label
X_train = X[train_idx]
X_test = X[test_idx]def to_onehot(yy):yy1 = np.zeros([len(yy), max(yy) + 1])yy1[np.arange(len(yy)), yy] = 1return yy1trainy = list(map(lambda x: mods.index(lbl[x][0]), train_idx))
Y_train = to_onehot(trainy)
Y_test = to_onehot(list(map(lambda x: mods.index(lbl[x][0]), test_idx)))
至此,已经获得了处理好的训练集和测试集(都包含单子载波的IQ信号数据和相应经过热编码的标签),后面就是设计属于自己的网络了。
投论文的建议(瞎聊):发论文的话,别只从模型角度调,魔改的模型前几年还好,现在专家看了就想吐= =如果没有特别的创意,建议最高识别精度超过91%,用准确率来弥补,另外看到一文献最高识别精度最高有93+%(不过感觉有点假,混淆矩阵都给不出)。对于RML2016a,本身算是该作者公开数据集中数据量最小的,比较难提升(博主是结合了许多方法才达到的);2016C数据量更小,几乎没人用,在这数据集上的模型精度提升比较困难;RML2016b由于数据量比较丰富,模型训练充分,一般都能到92%-94%;RML2018a由于数据量和数据大小的缘故,对硬件的要求比较比较大,当然发文相对比较容易(可能是出的图比较高大上的缘故)。
说了一堆废话,具体可以为:
①提升识别率:包括提升总体识别率、低信噪比下识别率(很有意义)、高阶调制方式的识别率
②结合算法:结合一些机器学习算法、预处理算法啥的,别仅依靠魔改无法解释的神经网络去提高性能(真的很low);
③扩展数据集:作者的数据集其实比较简单,可以进行扩展,比如创建128QAM 256QAM的5G条件(RML2018a数据集);构建多子载波信号就很有意义,当然实现也会有难度;研究其他信道缓解;模型在实测环境的信号中的表现等等~~~~(数据集生成的代码及Gnuradio配置方法在底部给出,祝各位科研顺利!)
平均准确率图:
各调制方式准确率图:
三种模拟调制都比较特殊,这里发现AMSSB识别率不受信噪比影响。
混淆矩阵(两种统计方式):
可以利用一些方法改善整体的识别性能:比如两种高阶16QAM和64QAM的识别率。
四、调制识别数据集相关阅读
4.1 免费内容:
调制识别相关数据集(RML2016a/b/c+2018a)
RML数据集制作代码
Gnuradio包导入的问题
各种神经网络及对应文献
4.2 付费内容(可节约大量时间成本,有需要可了解):
调制识别参考文献(随专栏赠送)
绘制调制识别中那些看起来高大上的图
2018数据集的相关实现↓
深度学习框架 | Tensorflow+Keras |
---|---|
模型 | 相关代码 |
CNN/ResNet | 使用CNN/ResNet实现自动调制识别(RML2018.01a) |
LSTM | 使用LSTM实现自动调制识别(RML2018.01a)) |
CLDNN | 使用CLDNN实现自动调制识别(RML2018.01a)) |
RML2016.10a数据集读取和处理相关推荐
- RML2016.10a数据集生成环境配置
1.前言 为了修改RML2016.10a数据集的一些参数,需要自己配置gnuradio的开发环境,尤其是gr-mapper和gr-mediatools的两个插件很麻烦.之前很多人写过了具体怎么配置了, ...
- 调制识别数据集RML2016.10a的调制信号参数(采样率)
一.前言 最近在做调制识别的FPGA实现,一个人走了很多弯路,把自己走过的弯路记录一下. 很多人都用Tim O'Shea的数据集RML2016.10a.tar.bz2,大家都是直接拿来训练但是关于该数 ...
- python数据挖掘笔记】二十.KNN最近邻分类算法分析详解及平衡秤TXT数据集读取
#2018-04-06 07:57:00 April Friday the 14 week, the 096 day SZ SSMR python数据挖掘笔记]二十.KNN最近邻分类算法分析详解及平衡 ...
- 人工智能学习:PASCAL VOC数据集读取(6)
PASCAL VOC是一个国际的计算机视觉挑战赛,数据集包含了20个分类的3万多张图片.挑战赛及其数据集基础上涌现不少知名的目标检测模型如R-CNN,YOLO,SSD等.可以通过下载和读取的方法载入P ...
- 西瓜数据集读取的详细解决方案
大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.喜 ...
- pytorch实现数据集读取/下载
#pic_center =400x 系列文章: 文章目录 数据集读取本地 Dataset基类介绍 数据加载案例 DataLoader类的使用详解 数据集在线下载 数据集读取本地 Dataset基类介绍 ...
- 【python数据挖掘课程】二十.KNN最近邻分类算法分析详解及平衡秤TXT数据集读取
这是<Python数据挖掘课程>系列文章,也是我这学期上课的部分内容及书籍的一个案例.本文主要讲述KNN最近邻分类算法.简单实现分析平衡秤数据集,希望这篇文章对大家有所帮助,同时提供些思路 ...
- TensorFlow学习笔记(二十四)自制TFRecord数据集 读取、显示及代码详解
在跑通了官网的mnist和cifar10数据之后,笔者尝试着制作自己的数据集,并保存,读入,显示. TensorFlow可以支持cifar10的数据格式, 也提供了标准的TFRecord 格式,而关于 ...
- 学习《Building Applications with FME Objects》 之四 从数据集读取要素
FMEOReader可以访问任何支持格式的数据. FMEOReader返回两类要素:schema(模式)要素和数据要素,模式要素用于描述数据集模型.每种支持的格式都有一个模式,一个模式要素是一类要素的 ...
最新文章
- smart700iev3 程序下载设置_西门子PLC基础:S7-200 SMART PLC程序下载
- 在SQL Server上该做的和不该做的
- (八)React原理
- 前端学习(1615):前端系列实战课程之javascript简介
- 给面试官讲明白:一致性Hash的原理和实践
- 我是这样理解HTTP和HTTPS区别的
- 1650显卡和1050T显卡差距大吗?
- 用批处理开启或关闭windows 服务
- html制作省市区三级联动,js实现省市区三级联动
- linux安装杰奇远程采集,杰奇linux远程采集,采集器网站分离
- GitHub生成token
- Linux系统下Lame环境的搭建
- Linux:理论 面试
- 零散专题31 JS中的日期对象
- deep-daze给你一个五彩斑斓的黑
- ...mapMutations的使用
- 小白都能学会的Python基础 第四讲:Python函数与模块
- 网页中嵌套QQ代码设置在线状态无需加好友聊天
- Flurry:2012年美国和中国移动市场最具潜力
- UVM中的TLM通信
热门文章
- 普歌 - SpringSecurity入门(1)
- proxy_cache_purge 清除nginx缓存返回404
- 告别“人工智障”:苹果人工智能研究团队正在升级Siri
- 满足Ai-Aj=C的条件数对(分治法)
- 2018年全国计算机网络大赛,2018年全国职业技能大赛高职组计算机网络应用赛项真题-I卷.docx...
- svn地址改了,小乌龟怎么更改地址
- Django 基础(12)-Django drf 分页查询(批量查询)、自定义分页器
- 程序员的焦虑-终身学习
- 简单实现一个 js 多线程
- AutoJs学习-亲戚关系计算器