此示例显示如何使用Wigner-Ville分布(WVD)和深卷积神经网络(CNN)对雷达和通信波形进行分类。
调制分类是智能接收器的重要功能。调制分类具有许多应用,例如认知雷达和软件定义的无线电。通常,为了识别这些波形并通过调制类型对它们进行分类,必须定义有意义的功能并将其输入分类器。虽然有效,但该程序可能需要广泛的努力和域名知识来产生准确的分类。该示例探讨了一个框架,以自动从信号中提取时间频率特征并使用深度学习网络执行信号分类。
该示例的第一部分模拟了雷达分类系统,该系统合成三个脉冲雷达波形并对其进行分类。雷达波形是:
矩形的
线性频率调制(LFM)
巴克代码
雷达分类系统不存在隔离。相反,它驻留在越来越占用的频谱中,与其他传输源相竞争,例如通信系统,无线电和导航系统。该示例的第二部分扩展了网络以包括附加通信调制类型。除了第一组雷达波形之外,扩展网络还合成并识别这些通信波形:
高斯频移键控(GFSK)
连续相位频移键控(CPFSK)
广播频率调制(B-FM)
双边带幅度调制(DSB-AM)
单边带幅度调制(SSB-AM)
该示例主要集中在雷达波形上,分类扩展到包括一小部分幅度和频率调制通信信号。看深度学习调制分类(通讯工具箱)对于具有多种通信信号的调制分类的完整工作流程。
使用采样率生成3000个信号100.
每个调制类型的MHz。采用逐步.Rectangularwaveform.
对于矩形脉冲,相位阶段.Linearfmwaveform.
对于LFM,和逐步.PhaseCodedWaveForm.
对于具有Barker代码的相位编码脉冲。
每个信号都有独特的参数,并以各种损伤增强,使其更加逼真。对于每个波形,将随机生成脉冲宽度和重复频率。对于LFM波形,随机生成扫描带宽和方向。对于Barker波形,随机生成芯片宽度和数量。所有信号都使用白色高斯噪声损害AWGN.
在[-6,30] dB范围内的随机信噪比功能。在范围内具有随机载波频率的频率偏移[FS / 6
那FS / 5]
使用该信号应用于每个信号comm.phasefrequencyoffset.
目的。最后,每个信号通过多径Rician衰落通道来传递,comm.ricianchannel.
。
提供的辅助功能Helpergenerateradarwaveforms.
创建并增强每个调制类型。
RNG.默认[Wav,Modtype] = HelpergenerateradarWaveForms();
绘制傅里叶变换,用于一些LFM波形,以在所生成的集合中显示差异。
idlfm = find(modtype ==“lfm”,3);nfft = 2 ^ nextpow2(长度(Wav {1}));f =(0:(nfft / 2-1))/ nfft * 100e6;图形子图(1,3,1)z = FFT(WAV {IDLFM(1)},NFFT);图(F / 1E6,ABS(Z(1:NFFT / 2)))XLabel('频率(MHz)'); ylabel('振幅');轴正方形子图(1,3,2)z = FFT(WAV {IDLFM(2)},NFFT);图(F / 1E6,ABS(Z(1:NFFT / 2)))XLabel('频率(MHz)'); ylabel('振幅');轴正方形子图(1,3,3)z = FFT(WAV {IDLFM(3)},NFFT);图(F / 1E6,ABS(Z(1:NFFT / 2)))XLabel('频率(MHz)'); ylabel('振幅');轴正方形
为了提高机器学习算法的分类性能,通常的方法是输入提取的特征代替原始信号数据。该特征提供了输入数据的表示,其使分类算法更容易识别在类上。Wigner-Ville分布表示对时间变化信号有用的原始数据的时频视图。两个时间和频率的高分辨率和局部性都提供了良好的特征,用于识别类似的调制类型。使用WVD.
用于计算每个调制类型的平滑伪WVD的功能。
图形子图(1,3,1)WVD(WAV {find(modtype ==“僵局”,1)},100e6,'smoothedpseudo')轴正方形;彩色栏离开;标题('rect')子图(1,3,2)WVD(WAV {find(modtype ==“lfm”,1)},100e6,'smoothedpseudo')轴正方形;彩色栏离开;标题('lfm')子图(1,3,3)WVD(WAV {find(modtype ==“巴克”,1)},100e6,'smoothedpseudo')轴正方形;彩色栏离开;标题('Barker')
要存储信号的平滑伪Wigner-Ville分布,首先创建目录tfddatabase.
在您的临时目录中Tempdir.
。然后创建子目录tfddatabase.
对于每种调制类型。对于每个信号,计算平滑伪Wigner-Ville分布,然后将结果下调到227×227矩阵。保存矩阵是一个.png.
图像文件在子目录中对应于信号的调制类型。辅助功能HelpergeneratetTefdfiles.
执行所有这些步骤。由于数据库尺寸的大量和复杂性,此过程需要几分钟WVD.
算法。你可以替换Tempdir.
使用您具有写入权限的另一个目录。
parentdir = tempdir;datadir =.'tfddatabase';Helpergeneratetfdfiles(parentdir,datadir,wav,modtype,100e6)
创建创建文件夹的图像数据存储对象以管理用于培训深度学习网络的图像文件。此步骤避免必须将所有图像加载到内存中。将标签源指定为文件夹名称。这根据文件夹名称分配每个信号的调制类型。
文件夹= fullfile(parentdir,datadir,{'rect'那'lfm'那'Barker'});imds = imageageataStore(文件夹,......'fileextensions'那'.png'那'labelsource'那'foldernames'那'readfcn',@ readtfdforsqueezenet);
网络培训,80%的数据培训并以10%进行测试。剩下的10%用于验证。使用spliteachlabel.
划分的功能imageageAtastore.
进入培训,验证和测试集。
[IMDStrain,IMDST,IMDSValidation] = SpliteachLabel(IMDS,0.8,0.1);
在可以接受培训深度学习网络之前,定义网络架构。此示例利用传输学习挤压,为图像分类创建的深CNN。转移学习是培训现有神经网络来对新目标进行分类的过程。该网络接受大小227-×227-3的图像输入。在输入到网络之前,自定义读取功能readtfdforsqueezenet.
会将二维时频分布转换为正确尺寸的RGB图像。Screezenet以其默认配置执行1000类的分类。
负载挤压罩。
net =挤压;
从网络中提取图层图。确认Squeezenet配置为大小227-by-227-3的图像。
lgraphsqz = layergraph(网);lgraphsqz.layers(1)
ans =具有属性的ImageInputLayer:名称:'Data'输入:[227 227 3] HyperParameters DataAugmentation:'无'归一化:'Zerocenter'标准化Dimension:'Auto'均值:[1×1×3单身]
要为我们的需求调整挤压Zenet,需要修改最后六层的三层,以分类三种雷达调制类型的兴趣。检查最后六个网络层。
LGRAPRSQZ.Layers(最终-5:结束)
ANS = 6×1层阵列,图层:1'DAPL9'丢失50%丢失2'CONV10'卷积1000 1×1×512卷绕卷发[11]和填充[0 0 0 0] 3'Relu_Conv10'Relu Relu4'POOL10'全球平均池全球平均池5'Prob'Softmax Softmax 6'ClassificationLayer_Predictions'分类输出CrossentRopyex与“Tench”和999其他类
替换“DROP9”层,网络中的最后一个丢弃层,概率丢弃层0.6。
tmplayer = lgraphsqz.layers(端5);newdropoutlayer = dropoutlayer(0.6,'名称'那'new_dropout');lgraphsqz = replaceElayer(Lgraphsqz,TMPlayer.Name,NewDropOutLayer);
挤压Zenet中的最后一次学习层是一个1比1的卷积层,'conv10'。用新的卷积层替换层,滤波器数量等于调制类型的数量。还增加了新层的学习率因子。
numclasses = 3;tmplayer = lgraphsqz.layers(结束-4);newlearnablelayer =卷积2dlayer(1,numcrasses,......'名称'那'new_conv'那......'wexerlearnratefactor'20,......'biaslearnratefactor'20);lgraphsqz = replaceElayer(Lgraphsqz,TMPlayer.name,NewLearnablayer);
用没有类标签的新一个替换分类层。
tmplayer = lgraphsqz.Layers(END);newclasslayer = classificationlayer('名称'那'new_classoutpul');lgraphsqz = replaceElayer(lgraphsqz,tmplayer.name,newclasslayer);
检查网络的最后六层。确认已更改丢帧,卷积和输出层。
LGRAPRSQZ.Layers(最终-5:结束)
ANS = 6×1层阵列具有图层:1'NEW_DROPOUT'丢弃60%丢失2'NEW_CONV'卷积3 1×1卷绕卷曲[1 1]和填充[0 0 0 0] 3'Relu_Conv10'Relu Relu 4'POM10'全球平均池全球平均池5'Prob'SoftMax Softmax 6'New_ClassOutput'分类输出CrossentRopyex
选择培训过程的选项,以确保良好的网络性能。参考培训选项
每个选项的描述的文档。
选项=培训选项('sgdm'那......'minibatchsize',128,......'maxepochs',5,......'italllearnrate',1e-3,......'洗牌'那'每个时代'那......'verbose',错误的,......'plots'那'培训 - 进步'那......'vightationdata',IMDSValidation);
使用Trainnetwork.
命令培训创建的CNN。由于数据集的大尺寸,过程可能需要几分钟。如果您的机器具有GPU和并行计算工具箱™,则Matlab会自动使用GPU进行培训。否则,它使用CPU。图中的训练精度图显示了网络跨所有迭代的学习的进展。在三种雷达调制类型上,网络正确分类近100%的训练信号。
trousainnet = trainnetwork(Imdstrain,lgraphsqz,选项);
使用培训的网络使用训练网络对测试数据进行分类分类
命令。混淆矩阵是可视化分类性能的一种方法。使用困惑的园林
命令计算和可视化分类准确性。对于输入到网络的三种调制类型,通过网络正确地识别了几乎所有相位编码,LFM和矩形波形。
预测=分类(TrountaInnet,Indstest);Figure ConfusionChart(预测,IMDStest.Labels,'正常化'那'列 - 归一化')
雷达分类系统的频谱必须与其他传输源竞争。让我们了解创建的网络如何扩展以结合其他模拟调制类型。另一个MathWorks示例,深度学习调制分类(通讯工具箱),使用通信工具箱™执行多种不同调制类型的调制分类。辅助功能Helpergeneratecommswaveforms.
生成并增强该示例中使用的调制类型的子集。由于WVD失去相位信息,因此仅使用幅度和频率调制类型的子集。
有关数字和模拟调制分类所需的工作流程的深入描述,以及用于创建这些波形的技术,请参阅示例链接。对于每种调制类型,使用WVD.
提取时间频率特征和可视化。
[wav,modtype] = helpergeneratecommswaveforms();图形子图(2,3,1)WVD(WAV {find(modtype ==“gfsk”,1)},200e3,'smoothedpseudo')轴正方形;彩色栏离开;标题('gfsk')子图(2,3,2)WVD(WAV {find(modtype ==“cpfsk”,1)},200e3,'smoothedpseudo')轴正方形;彩色栏离开;标题('cpfsk')子图(2,3,3)WVD(WAV {find(modtype ==“b-fm”,1)},200e3,'smoothedpseudo')轴正方形;彩色栏离开;标题('b-fm')子图(2,3,4)wvd(wav {find(modtype ==“SSB-AM”,1)},200e3,'smoothedpseudo')轴正方形;彩色栏离开;标题('ssb-am')子图(2,3,5)WVD(WAV {find(modtype ==“dsb-am”,1)},200e3,'smoothedpseudo')轴正方形;彩色栏离开;标题('dsb-am')
使用辅助功能HelpergeneratetTefdfiles.
再次为每个输入信号计算平滑的伪WVD。创建图像数据存储对象以管理所有调制类型的图像文件。
HelperGeneratetFdfiles(parentdir,datadir,wav,modtype,200e3)文件夹= fullfile(parentdir,datadir,{'rect'那'lfm'那'Barker'那'gfsk'那'cpfsk'那'b-fm'那'ssb-am'那'dsb-am'});imds = imageageataStore(文件夹,......'fileextensions'那'.png'那'labelsource'那'foldernames'那'readfcn',@ readtfdforsqueezenet);
再次,将数据划分为培训集,验证集和使用的测试集spliteachlabel.
功能。
RNG.默认[IMDStrain,IMDST,IMDSValidation] = SpliteachLabel(IMDS,0.8,0.1);
以前,设置了网络架构以对三种调制类型进行分类。必须更新这一点以允许分类雷达和通信信号的所有八种调制类型。这是一个如前所述的过程,但除了全康统计层
现在需要输出大小的八个。
numclasses = 8;net =挤压;lgraphsqz = layergraph(网);tmplayer = lgraphsqz.layers(端5);newdropoutlayer = dropoutlayer(0.6,'名称'那'new_dropout');lgraphsqz = replaceElayer(Lgraphsqz,TMPlayer.Name,NewDropOutLayer);tmplayer = lgraphsqz.layers(结束-4);newlearnablelayer =卷积2dlayer(1,numcrasses,......'名称'那'new_conv'那......'wexerlearnratefactor'20,......'biaslearnratefactor'20);lgraphsqz = replaceElayer(Lgraphsqz,TMPlayer.name,NewLearnablayer);tmplayer = lgraphsqz.Layers(END);newclasslayer = classificationlayer('名称'那'new_classoutpul');lgraphsqz = replaceElayer(lgraphsqz,tmplayer.name,newclasslayer);
创建新的培训选项。
选项=培训选项('sgdm'那......'minibatchsize',150,......'maxepochs'10,......'italllearnrate',1e-4,......'洗牌'那'每个时代'那......'verbose',错误的,......'plots'那'培训 - 进步'那......'vightationdata',IMDSValidation);
使用Trainnetwork.
命令培训创建的CNN。对于所有调制类型,训练收敛的精度约为95%的正确分类。
trousainnet = trainnetwork(Imdstrain,lgraphsqz,选项);
使用分类
命令以对保存的信号进行分类以进行测试。再次,可视化性能困惑的园林
。
预测=分类(TrountaInnet,Indstest);数字;ConfusionChart(预测,IMDStest.Labels,'正常化'那'列 - 归一化')
对于输入到网络的八种调制类型,正确分类了超过99%的B-FM,CPFSK,GFSK,Barker和LFM调制类型。平均而言,正确识别出超过85%的AM信号。从混淆矩阵,将高百分比的SSB-AM信号被错误分类为DSB-AM,以及DSB-AM信号作为SSB-AM。
让我们调查一些这些错误分类,以了解网络的学习过程。使用阅读贴图
函数在图像数据存储上从测试数据集从每个类中提取单个图像。显示的WVD视觉上看起来非常相似。由于DSB-AM和SSB-AM信号具有非常相似的签名,这在网络方面解释了正确分类这两种类型的难度。进一步的信号处理可以使这两个调制类型之间的差异更加清晰地达到网络并导致改进的分类。
dsb_dsb = ReadImage(IMDStest,find((imdstest.labels =='dsb-am')(预测=='dsb-am'),1));dsb_ssb = ReadImage(IMDStest,find((imdstest.labels =='dsb-am')(预测=='ssb-am'),1));ssb_dsb = ReadImage(IMDStest,find((imdstest.labels =='ssb-am')(预测=='dsb-am'),1));ssb_ssb = ReadImage(IMDStest,find((imdstest.labels =='ssb-am')(预测=='ssb-am'),1));图形子图(2,2,1)ImageC(DSB_DSB(:,:,1))轴正方形;标题({'实际课程:DSB-AM'那'预测的课程:DSB-AM'})子图(2,2,2)ImageC(DSB_SSB(:,:,1))轴正方形;标题({'实际课程:DSB-AM'那'预测的课程:SSB-AM'})子图(2,2,3)ImageC(SSB_DSB(:,:,1))轴正方形;标题({'实际课程:SSB-AM'那'预测的课程:DSB-AM'})子图(2,2,4)ImageC(SSB_SSB(:,:,1))轴正方形;标题({'实际课程:SSB-AM'那'预测的课程:SSB-AM'})
该示例显示了如何通过使用时频技术和深度学习网络来分类雷达和通信调制类型。通过利用小波工具箱™中可用的时频分析以及信号处理工具箱™中可用的额外傅立叶分析,可以进一步研究额外改进的进一步努力。
[1] Brynolfsson,Johan和Maria Sandsten。“使用Wigner-Ville分布在卷积神经网络中的一维非静止信号分类。”第25欧洲信号处理会议(EUSIPCO)。IEEE,2017年。
[2]刘,小玉,迪宇杨和艾丽的Gamal。“用于调制分类的深度神经网络架构。”第51号信号,系统和计算机上的七零字会议。2017年。
[3]“王,昭,建王和徐东张。“基于时频分析和卷积神经网络的自动雷达波形识别。”IEEE国际会议声学,语音和信号处理(ICASSP)。2017年。