目录

  • 一、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数据集读取和处理相关推荐

  1. RML2016.10a数据集生成环境配置

    1.前言 为了修改RML2016.10a数据集的一些参数,需要自己配置gnuradio的开发环境,尤其是gr-mapper和gr-mediatools的两个插件很麻烦.之前很多人写过了具体怎么配置了, ...

  2. 调制识别数据集RML2016.10a的调制信号参数(采样率)

    一.前言 最近在做调制识别的FPGA实现,一个人走了很多弯路,把自己走过的弯路记录一下. 很多人都用Tim O'Shea的数据集RML2016.10a.tar.bz2,大家都是直接拿来训练但是关于该数 ...

  3. python数据挖掘笔记】二十.KNN最近邻分类算法分析详解及平衡秤TXT数据集读取

    #2018-04-06 07:57:00 April Friday the 14 week, the 096 day SZ SSMR python数据挖掘笔记]二十.KNN最近邻分类算法分析详解及平衡 ...

  4. 人工智能学习:PASCAL VOC数据集读取(6)

    PASCAL VOC是一个国际的计算机视觉挑战赛,数据集包含了20个分类的3万多张图片.挑战赛及其数据集基础上涌现不少知名的目标检测模型如R-CNN,YOLO,SSD等.可以通过下载和读取的方法载入P ...

  5. 西瓜数据集读取的详细解决方案

      大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.喜 ...

  6. pytorch实现数据集读取/下载

    #pic_center =400x 系列文章: 文章目录 数据集读取本地 Dataset基类介绍 数据加载案例 DataLoader类的使用详解 数据集在线下载 数据集读取本地 Dataset基类介绍 ...

  7. 【python数据挖掘课程】二十.KNN最近邻分类算法分析详解及平衡秤TXT数据集读取

    这是<Python数据挖掘课程>系列文章,也是我这学期上课的部分内容及书籍的一个案例.本文主要讲述KNN最近邻分类算法.简单实现分析平衡秤数据集,希望这篇文章对大家有所帮助,同时提供些思路 ...

  8. TensorFlow学习笔记(二十四)自制TFRecord数据集 读取、显示及代码详解

    在跑通了官网的mnist和cifar10数据之后,笔者尝试着制作自己的数据集,并保存,读入,显示. TensorFlow可以支持cifar10的数据格式, 也提供了标准的TFRecord 格式,而关于 ...

  9. 学习《Building Applications with FME Objects》 之四 从数据集读取要素

    FMEOReader可以访问任何支持格式的数据. FMEOReader返回两类要素:schema(模式)要素和数据要素,模式要素用于描述数据集模型.每种支持的格式都有一个模式,一个模式要素是一类要素的 ...

最新文章

  1. smart700iev3 程序下载设置_西门子PLC基础:S7-200 SMART PLC程序下载
  2. 在SQL Server上该做的和不该做的
  3. (八)React原理
  4. 前端学习(1615):前端系列实战课程之javascript简介
  5. 给面试官讲明白:一致性Hash的原理和实践
  6. 我是这样理解HTTP和HTTPS区别的
  7. 1650显卡和1050T显卡差距大吗?
  8. 用批处理开启或关闭windows 服务
  9. html制作省市区三级联动,js实现省市区三级联动
  10. linux安装杰奇远程采集,杰奇linux远程采集,采集器网站分离
  11. GitHub生成token
  12. Linux系统下Lame环境的搭建
  13. Linux:理论 面试
  14. 零散专题31 JS中的日期对象
  15. deep-daze给你一个五彩斑斓的黑
  16. ...mapMutations的使用
  17. 小白都能学会的Python基础 第四讲:Python函数与模块
  18. 网页中嵌套QQ代码设置在线状态无需加好友聊天
  19. Flurry:2012年美国和中国移动市场最具潜力
  20. UVM中的TLM通信

热门文章

  1. 普歌 - SpringSecurity入门(1)
  2. proxy_cache_purge 清除nginx缓存返回404
  3. 告别“人工智障”:苹果人工智能研究团队正在升级Siri
  4. 满足Ai-Aj=C的条件数对(分治法)
  5. 2018年全国计算机网络大赛,2018年全国职业技能大赛高职组计算机网络应用赛项真题-I卷.docx...
  6. svn地址改了,小乌龟怎么更改地址
  7. Django 基础(12)-Django drf 分页查询(批量查询)、自定义分页器
  8. 程序员的焦虑-终身学习
  9. 简单实现一个 js 多线程
  10. AutoJs学习-亲戚关系计算器