精华内容
下载资源
问答
  • 调制识别

    2020-12-01 10:51:15
    @调制识别 #调制识别 第一次记录 关于基于人工神经网络的一些调制识别的看法与思考 最近在做开题报告,有一些问题实在想不通,希望和大家共同进步和讨论。 问题 所做课题《基于卷积神经网络的调制信号识别》到底是...

    @调制识别

    #调制识别

    第一次记录
    关于基于人工神经网络的一些调制识别的看法与思考
    最近在做开题报告,有一些问题实在想不通,希望和大家共同进步和讨论。

    问题

    1. 所做课题《基于卷积神经网络的调制信号识别》到底是做什么呢? ,曾经一个老师问我是做调制还是解调?我那时候觉得自己是做调制的,毕竟题目里写的是调制嘛,后来我觉得自己是做解调的,因为我的目的是最后把收到的未知信号给识别出来,其实和解调差不多。最近,不知道在哪看到几句话,大概是我既不属于调制也不属于解调,做的是中间部分,为后面的解调提供方便。。。。
    2. 关于神经网络处理信号到底是怎么处理的?,我一直也很困惑,尝试了解过IQ调制,好像和我深度学习并没有关系,我不知道这个黑匣子到底是怎么运作的。
      IQ调制基本上属于是标准配置,因为利用IQ调制可以做出所有的调制方式。对于IQ调制,从两个方面直观理解:一是向量,一是三角函数。首先说一说向量,对于通信的传输过程而言,其本质是完成了信息的传递。信息如何传递?信息本身是无法传递的,必须要以信号为载体,以物理世界中的信号某个特征来表示这个信息。那么有哪些特征可以表示呢,对于一个物理世界中存在的信号而已,无非就三个特征:相位、幅度、频率。其中频率和相位可以通过一定的关系等价出来。那么主要就是相位和幅度了。
      在我看来,就是在网上找了一个公开的数据集,或者也可以自己用matlab生成一些数据集,进行训练测试验证集的划分,放入神经网络里进行训练,最后看正确率就行了。在一个二维平面里面,一个向量的信息同样可以转换为幅度(模)和相位(夹角)来表示。反过来时候,一个给定的向量,由于其模和夹角不同,可以通过该给定的向量表示一定的信息。如下图所示的QPSK调制:
      QPSK
      四个向量由于和X轴正半轴的夹角不同,可以分别表示出4个值。

    再来看另外一个问题,如何生成这样一个夹角不同的向量呢?这其实有时一个很简单的数学问题:正交分解。任何一个向量都可以投影到X轴和Y轴上面做出两个向量来。这样我们就只需要改变X轴和Y轴上面的分量大小,就可以生成任意的向量。如X=1,y=-1时,就可以生成和X轴夹角315°模为根号2的这个向量。这条性质有什么用呢?后面我会解释。

    好了,到目前为止,这都是数学分析,所谓的正交分解,那首先是要找到两个正交向量。在我们真实的物理世界里面去哪里找这两个正交的向量呢。呵呵,还真有,而且是现成的。就是sin和cos。有性质cos(α+π/2)=sinα,二者正好相差九十度。至于这二者的正交性如何证明,我想这是数学老师的事情。反正现在已知有了这么两个正交的东西了。有这两个东西就太好了……为什么这么说呢,因为有了整个东西之后,抽象的正交分解就变成了高中都学过的三角函数了。

    对于cos(wt+α)=cos(α)cos(wt)-sin(α)sin(wt),其中cos(α)和sin(α)都是常数,其实就变成了cos(wt)和sin(wt)的幅度了。换言之,改变cos(wt)和sin(wt)幅度,就可以得到任意的相位α。如果再狠一点,加一个系数Acos(wt+α)=Acos(α)cos(wt)-Asin(α)sin(wt),这其实还是改变的cos(wt)和sin(wt)幅度。就可以得到任意幅度、任意相位的cos函数,并可以利用这些函数去表示不同的信息。对此,通信原理上通常会用一种抽象的说法来约定表示方式,就是所谓的星座图。

    如果要识别A和α,其本质其实上是识别Acos(α)和Asin(α)即可。

    而这如何识别呢,考虑Acos(wt+α)cos(wt)=Acos(α)cos(wt)cos(wt)+Asin(α)sin(wt)cos(wt)=1/2×Acos(α)(cos(2wt)+1)+1/2Asin(α)sin(2wt)。对于这样一个结果,我们很高兴的发现,有一个常数项1×1/2Acos(α),而另外两个属于是高频项。对于此,任何学过信号与系统的同学都应该明白,只需要用一个低通滤波器就可以把1/2×Acos(α)提取出来。1/2×Asin(α)的提取方法类似。

    1. 有什么可以做的新的点呢?,感觉做不出什么新花样,无非提取特征(我不会这方面),改善神经网络(魔改参数,层数,等等),改损失函数(有什么理论证明吗?)。。。。我想不到自己还能研究一些什么?
    展开全文
  • 简要介绍了通信信号调制识别的概念、作用及基本方法框架,详细论述了两类调制识别方法—基于似然比判决理论的识别和基于统计模式的识别的原理、特点和发展。考虑到日趋复杂的电磁环境对调制识别的影响,深入分析了...
  • 利用matlab和神经网络进行信号调制识别的程序,程序很完整,能够进行信号选择并且输出识别率。
  • 自动调制识别在认知无线电、智能解调器、电子侦察等各种民用及军事应用中扮演重要角色。自动调制识别属于分类问题,常见的方法有KNN、DT、SVM、CNN。为了提高自动调制识别的准确度,基于GNU Radio生成20种信噪比8种...
  • MPSK信号调制识别程序

    2018-11-12 10:40:12
    用matlab对MPSK信号进行调制识别的程序,内容完整,能够修改各种数据
  • OFDM信号检测与调制识别OFDM信号检测与调制识别OFDM信号检测与调制识别
  • 通信信号的自动调制识别
  • 16qam调制识别matlab

    2018-04-15 10:38:48
    整套16QAM调制识别matlab源代码,包括调制识别,加噪声,以及体统整体效果图展示
  • 为识别当前卫星通信系统所采用的主要调制方式,提出了一种基于多端卷积神经网络的通信信号调制识别算法。利用信号的先验信息以及对网络拓扑结构的认知,将信号时域波形转化为眼图和矢量图,作为信号的浅层特征表达,...
  • 无线电信号的调制识别在无线电监测及频谱管理中有着至关重要的作用。人工神经网络中的深度学习网络由于具有强大的表征学习能力,可以自动从原始数据中提取出各种复杂的特征,因此,探索基于深度学习的无线电信号调制...
  • 基于软件无线电的调制识别方法
  • 卫星通信信号体系调制识别技术,文章内容很详实,非常适合初学者从宏观的角度去理解信号调制方式识别的过程,特征参数等。
  • 提出了频率选择性衰落信道条件下区分GLSFBC 结构的多载波信号(OFDM)和单载波信号(MFSK、MPSK、MQAM)的调制识别算法。该算法基于接收信号的高阶累积量,只需直接对接收的中频信号进行识别处理,不需要发射信号和...
  • 基于特征提取和模式识别的多体制通信信号自动调制识别技术是软件无线电领域中的重要研究课题,是复杂电磁环境下频谱管理、频谱检测等非协作通信领域的关键技术之一。提出一种基于深度学习的通信信号调制模式识别算法...
  • 基于CNN的调制识别.py

    2019-12-23 19:46:32
    基于CNN的调制识别,keras框架,tensorflow后端,数据集为github通用数据集。 We survey the latest advances in machine learning with deep neural networks by applying them to the task of radio modulation...
  • 同频频率和杂波辐射频率干扰对传统系统精准识别影响较大,为了解决该问题,提出了非协调通信信号自动调制识别系统设计。架构总体结构框图,使用TMS320VC5510A型号芯片设计DSP数字信号处理器,并对内部连接示意图进行...
  • 介绍基于改进的特征函数的调制识别算法,用于通信信号调制方式的识别。
  • 不仅如此,其实在通信信号处理领域对数字调制信号地应用也越来越多,因此对数字信号调制识别的研究也越来越多。传统的调制识别的判决方法有:决策判决法、高阶累积量算法和人工神经网络算法等。但是决策判决法在低...
  • 先对信号进行短时滤波,以提高处理信噪比,后在分析常用6类脉内调制信号单频正弦波生成条件差异的基础上,定义了信号能量聚焦效率特征,并据此实现调制识别。推导了信号能量聚焦效率的统计检验方法。计算机仿真结果...
  • 基于软件无线电的调制识别方法.pdf
  • 基于FPGA的调制识别技术研究.pdf
  • 可以实现 信号调制识别程序 matlab
  • 基于深度学习的数字信号调制识别研究
  • 基于SCHKS-SSVM的通信信号调制识别
  • 针对雷达信号脉内调制识别算法存在着准确率低的问题,提出一种新的雷达脉内调制类型自动识别方法,该方法首先提取雷达信号时频图像的形状特征和纹理特征构成融合特征,然后将融合特征输入随机森林分类器,实现信号的...
  • 使用ResNet模型进行无线电调制识别

    万次阅读 多人点赞 2019-06-05 15:57:09
    传统的无线电调制识别方法通常是计算无线电信号的各种特征,如高阶矩,通过构建一棵分类树,对比不同的调制类型特点,最终将信号分类。这种方法实现复杂,需要极强的专业知识。深度学习的大热将神经网络模型带入...

    一、前言

        传统的无线电调制识别方法通常是计算无线电信号的各种特征,如高阶矩,通过构建一棵分类树,对比不同的调制类型特点,最终将信号分类。这种方法实现复杂,需要极强的专业知识。深度学习的大热将神经网络模型带入无线电通讯领域,如图1所示,不同的调制类型产生的IQ信号在时域上表现出不同的形状特征,类似于图像中的分类任务,研究者们发现使用神经网络模型也能很好地完成无线电调制类型分类,且效果要比传统方法还好。

    图1 不同调制类型的IQ时域信号图

          这篇文章主要基于Tim O’Shea的两篇论文:

            ① Convolutional Radio Modulation Recognition Networks

            ② Over the Air Deep Learning Based Radio Signal Classification

         论文①提出了进行无线电信号分类的卷积神经网络模型,公开了训练的模型和代码,并发布了一个用于深度学习的无线电信号仿真数据集数据集生成脚本,这个公开数据集后来被广泛地使用于相关的使用深度学习方法进行调制识别的研究中。

         论文②提出了深层的残差网络模型进行调制分类,效果较论文①有很大的提升,在②中还做了大量的超参对比试验,且使用了新的数据集

    二、用于调制识别的卷积神经网络模型(论文一)

        Convolutional Radio Modulation Recognition Networks这篇论文是较早使用深度学习技术进行调制识别的研究之一,且取得了相当可观的识别效果,该论文主要有两个成果:

    1、仿真数据集

        论文中提出了一个高质量的无线电型信号仿真数据集,数据集基于GNU Radio环境生成,相关链接:RML2016.10a.tar.bz2数据集生成脚本

        数据集中共包含如图1所示的11类调制信号,每种调制包含20种信噪比,每种信噪比有1000个样本,每个样本有I和Q两路信号,每路信号包含128个点,所以数据集大小为:220000×2×128。

    2、卷积神经网络模型

        作者提出了如图2所示的卷积神经网络模型,在论文中被称为CNN模型,包含两个卷积层和两个全连接层。此外,作者还通过增加卷积层的卷积核数量,构建了CNN2模型,CNN2模型结构与CNN模型相同,只是两个卷积层的卷积核数量分别增加为256和80,第一个全连接层神经元个数增加为256个,CNN2的源码已经公开,因此不再追究其中的细节,需要的自己看代码更加清楚,源码地址:RML2016.10a_VTCNN2_example.ipynb

    图2 调制识别卷积神经网络模型

        值得注意的是,作者在代码中首先将2×128的数据reshape成1×2×128,对应图像中的channel×width×height,可见是将IQ数据看成单通道的2×128大小的图像数据进行处理。由于公开的数据集只有22w条数据,数据量相对来说较小,因此训练完成后的模型分类准确率也只有73%左右,测试集分类准确率如图3所示。

    图3 CNN2模型测试集准确率随snr变化图

    作者在论文中指出,增加数据集的大小会使准确率进一步上升,在使用1200万的数据集进行训练和测试后,模型能够达到87.4%的准确率,有硬件条件的大佬可以试试。至此,论文①中的内容大概介绍完毕。

    三、用于调制识别的深度残差网络模型(论文二)

        论文二的主要内容有:提出新的数据集,提出调制识别深度残差网络,对比不同超参数下模型的性能,在真实数据上测试模型效果并提出使用迁移学习优化模型在真实数据上的表现。

    1、数据集

        作者在论文二中使用了新的数据集,相对于之前的数据集,这个数据集包含24种调制,每种调制包含26种信噪比,每种信噪比下包含4096条数据,每条数据包含IQ两路信号,每路信号包含1024个点,所以新数据集的大小变为:2555904×1024×2(不是2555904×2×1024,其实两者没有区别,只是作者公开的数据集就是这个维度),新的数据集大小高达20G。

    数据集:2018.01.OSC.0001_1024x2M.h5.tar.gz

    2、残差网络模型

        作者提出了用于调制识别的残差神经网络模型,模型的结构如图4所示,其中Residual Unit就是我们熟悉的残差网络中的残差块,在残差块的基础上,作者构建了Residual Stack单元,每个Residual Stack包括一个卷积核大小为1×1的卷积层,用于在channel维度上做计算,此外还包含两个残差块,以及一个Max Pooling层。在整个模型中又包含6个Residual Stack单元,数据每经过一个Residual Stack单元维度减半。模型中所有卷积层的卷积核数量均为32,而卷积核大小则并未说明。

    图4 残差网络模型结构图

        使用Keras实现上述模型,代码如下:

    """建立模型"""
    classes = ['32PSK',
     '16APSK',
     '32QAM',
     'FM',
     'GMSK',
     '32APSK',
     'OQPSK',
     '8ASK',
     'BPSK',
     '8PSK',
     'AM-SSB-SC',
     '4ASK',
     '16PSK',
     '64APSK',
     '128QAM',
     '128APSK',
     'AM-DSB-SC',
     'AM-SSB-WC',
     '64QAM',
     'QPSK',
     '256QAM',
     'AM-DSB-WC',
     'OOK', 
     '16QAM']
    data_format = 'channels_first'
    
    def residual_stack(Xm,kennel_size,Seq,pool_size):
        #1*1 Conv Linear
        Xm = Conv2D(32, (1, 1), padding='same', name=Seq+"_conv1", kernel_initializer='glorot_normal',data_format=data_format)(Xm)
        #Residual Unit 1
        Xm_shortcut = Xm
        Xm = Conv2D(32, kennel_size, padding='same',activation="relu",name=Seq+"_conv2", kernel_initializer='glorot_normal',data_format=data_format)(Xm)
        Xm = Conv2D(32, kennel_size, padding='same', name=Seq+"_conv3", kernel_initializer='glorot_normal',data_format=data_format)(Xm)
        Xm = layers.add([Xm,Xm_shortcut])
        Xm = Activation("relu")(Xm)
        #Residual Unit 2
        Xm_shortcut = Xm
        Xm = Conv2D(32, kennel_size, padding='same',activation="relu",name=Seq+"_conv4", kernel_initializer='glorot_normal',data_format=data_format)(Xm)
        X = Conv2D(32, kennel_size, padding='same', name=Seq+"_conv5", kernel_initializer='glorot_normal',data_format=data_format)(Xm)
        Xm = layers.add([Xm,Xm_shortcut])
        Xm = Activation("relu")(Xm)
        #MaxPooling
        Xm = MaxPooling2D(pool_size=pool_size, strides=pool_size, padding='valid', data_format=data_format)(Xm)
        return Xm
    
    
    in_shp = X_train.shape[1:]   #每个样本的维度[1024,2]
    #input layer
    Xm_input = Input(in_shp)
    Xm = Reshape([1,1024,2], input_shape=in_shp)(Xm_input)
    #Residual Srack
    Xm = residual_stack(Xm,kennel_size=(3,2),Seq="ReStk0",pool_size=(2,2))   #shape:(512,1,32)
    Xm = residual_stack(Xm,kennel_size=(3,1),Seq="ReStk1",pool_size=(2,1))   #shape:(256,1,32)
    Xm = residual_stack(Xm,kennel_size=(3,1),Seq="ReStk2",pool_size=(2,1))   #shape:(128,1,32)
    Xm = residual_stack(Xm,kennel_size=(3,1),Seq="ReStk3",pool_size=(2,1))   #shape:(64,1,32)
    Xm = residual_stack(Xm,kennel_size=(3,1),Seq="ReStk4",pool_size=(2,1))   #shape:(32,1,32)
    Xm = residual_stack(Xm,kennel_size=(3,1),Seq="ReStk5",pool_size=(2,1))   #shape:(16,1,32)
    
    #############################################################################
    #      多次尝试发现减少一层全连接层能使loss下降更快
    #      将AlphaDropout设置为0.3似乎比0.5效果更好
    #############################################################################
    #Full Con 1
    Xm = Flatten(data_format=data_format)(Xm)
    Xm = Dense(128, activation='selu', kernel_initializer='glorot_normal', name="dense1")(Xm)
    Xm = AlphaDropout(0.3)(Xm)
    #Full Con 2
    Xm = Dense(len(classes), kernel_initializer='glorot_normal', name="dense2")(Xm)
    #SoftMax
    Xm = Activation('softmax')(Xm)
    #Create Model
    model = Model.Model(inputs=Xm_input,outputs=Xm)
    adam = keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)
    model.compile(loss='categorical_crossentropy', optimizer=adam)
    model.summary()

    训练代码:

    """训练模型"""
    #############################################################################
    #      当val_loss连续10次迭代不再减小或总迭代次数大于100时停止
    #      将最小验证损失的模型保存
    #############################################################################
    print(tf.test.gpu_device_name())
    filepath = 'drive/RadioModulationRecognition/Models/ResNet_Model_72w.h5'
    history = model.fit(X_train,
        Y_train,
        batch_size=1000,
        epochs=100,
        verbose=2,
        validation_data=(X_test, Y_test),
        #validation_split = 0.3,
        callbacks = [
            keras.callbacks.ModelCheckpoint(filepath, monitor='val_loss', verbose=0, save_best_only=True, mode='auto'),
            keras.callbacks.EarlyStopping(monitor='val_loss', patience=10, verbose=0, mode='auto')
        ])
    
    # we re-load the best weights once training is finished
    model.load_weights(filepath)

        由于硬件限制,无法将250多万条的数据都拿来训练,所以我从完整数据集中按照分层抽样的规则抽取出部分数据(约74w条)组成训练集和测试集,并且与论文一中提供的代码一样使用3×2大小(或者2×3)的卷积核,训练完成后的模型在测试集上的分类准确率最高达到了94.3%,模型在测试集上的分类准确率随信噪比的变化如图5所示。而图6所示的是作者对比不同数据集大小所训练的模型效果图,可以看出,当数据量为72w时达到94.3%的准确率是符合预期的,如果使用完整数据集可以使准确率更高。源码已发布到github:ResNet-for-Radio-Recognition

    图5 模型分类准确率虽snr变化图
    图6 不同数据集大小训练的模型表现对比图

        值得注意的是,论文中指出使用的ResNet模型包含23w个参数,而我在早期的代码中使用3*2的卷积核构建的模型同样有23w个可训练参数,依此来看,作者使用的卷积核大小应该是3*2。我在Colaboratory平台上训练模型,迭代一次需要488秒,整个训练下来花了7-8个小时,可以说是非常慢了。而我之后也进行了优化,减少了训练参数,也减少了大量的训练时间。

    3. 自己的改进

        之前提到的,使用神经网络对信号调制进行分类,就是借鉴了图像分类的思想。而一张图片的维度一般是width*height*channel,对应到无线电的IQ信号就是:1024*2*1,即将IQ信号数据看成是单个通道的1024*2大小的“图片”,1024*2的数据再经过一个2*2的max pooling后维度变为512*1,之后使用的应该时3*1大小的卷积核而非3*2(卷积核的维度不应该比数据还大),因此,我考虑将除了第一个residual_stack单元之外的其余residual_stack单元中卷积核设置为3*1大小,这样可以大大减少参数数量。

        对比两种实现方式,作者指出论文中的模型拥有23w个参数,而改进后的模型只有14w个参数,迭代一次的时间从488s下降至171s,而准确率反而略有提升。两种实现代码分别是ResNet_Model.ipynb(改进前)和ResNet_incomplete_dataset.ipynb(改进后)。注意,ResNet_Model.ipynb只是早期对论文的粗略实现,仅模型部分有参考价值,主要代码还是见改进后的版本。

        当然,上述的所谓“改进”纯粹主观想法,因为作者并未提供源代码,而“改进前”的模型也是博主自己构建,但从参数数量来看,14w的可训练参数量相对于23w的训练参数的确有很大下降,而且经过验证准确率也的确不受影响,说明改进和优化是有的,只是改进的量无法确定。

    4、真实数据测试

        博主使用过真实信号源和接收机测试过模型,的确模型是可用的,且高信噪比下准确率的确很高,这依归功于仿真数据集做得比较好,但是有一个致命的缺点!!!!准确率严重依赖信号源的参数!也就是说,模型只有在信号源设置成与生成仿真数据集相同参数的情况下才可用,但在非合作式通信情况下,不可能知道信号源参数,所以,尽管模型训练和测试效果很好,但是应用到真实通信环境是一个很大的问题。

        再解释一下:不同的调制产生的信号其IQ数据会表现出不同的形状特征,神经网络模型通过这种不同的特征来识别调制方式,但致命的是,同一调制下不同调制参数也会产生不同的形状特征,如不同的调制深度、符号率等,所以当真实信号的调制参数与数据集的参数不一样时,模型就难以识别。下图表示两个不同的符号率产生的同一调制信号,从形状上来看,300ks/s的信号显得更为”密集“。目前我尚未找到彻底的解决办法,如有想法或思路的同僚还请告知。

    符号率为150kS/s时的IQ图
    符号率为300kS/s时的IQ图

       

    展开全文
  • 针对传感器网络节点的分布式结构, 给出了基于特征融合的多节点联合调制识别方法。首先利用似然比推导了特征融合的联合识别准则; 然后依据准则给出了多节点调制识别的仿真性能; 最后和基于决策融合的多节点调制识别...
  • PSK信号调制识别的似然算法研究,石方舟,刘雪松,调制方式识别是非协作通信研究中的重要内容,本文研究了基于决策理论的数字通信信号调制方式识别技术,并给出了基于检测理论的调��
  • 一种新的混合模式调制识别算法,姚旭清 ,王华奎,随着信号种类的增加,信号调制方式的多样,在低信噪比下对未知的信号进行准确的识别成为当前调制识别的主要任务。本文主要是基于
  • 数字调制识别的FPGA实现方法研究.pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,693
精华内容 7,477
关键字:

调制识别