主要内容

基于深度学习的雷达和通信波形分类

这个例子展示了如何使用Wigner-Ville分布(WVD)和深度卷积神经网络(CNN)对雷达和通信波形进行分类。

调制分类是智能接收机的一个重要功能。调制分类有许多应用,如认知雷达和软件无线电。通常,为了识别这些波形并根据调制类型对它们进行分类,必须定义有意义的特征并将其输入到分类器中。虽然有效,但这个过程需要大量的努力和领域知识来产生准确的分类。这个例子探索了一个框架,自动提取信号的时频特征,并使用深度学习网络进行信号分类。

本例的第一部分模拟了一个雷达分类系统,该系统综合了三种脉冲雷达波形并对它们进行分类。雷达波形为:

  • 矩形的

  • 线性调频

  • 巴克码

雷达分类系统不存在隔离。相反,它驻留在越来越占用的频谱中,与其他传输源相竞争,例如通信系统,无线电和导航系统。该示例的第二部分扩展了网络以包括附加通信调制类型。除了第一组雷达波形之外,扩展网络还合成并识别这些通信波形:

  • 高斯频移键控

  • 连续相移频键控

  • 广播调频(B-FM)

  • 双边带幅度调制(DSB-AM)

  • 单边带幅度调制(SSB-AM)

该示例主要集中在雷达波形上,分类扩展到包括一小部分幅度和频率调制通信信号。看基于深度学习的调制分类(通讯工具箱)用于调制分类的完整工作流程,具有广泛的通信信号阵列。

生成雷达波形

生成3000个信号,采样率为One hundred.每个调制类型的MHz。使用逐步淘汰对于矩形脉冲,分阶段。LinearFMWaveform对于LFM,和分阶段。PhaseCodedWaveform用于巴克码相位编码脉冲。

每个信号都有独特的参数,并通过各种损伤进行增强,使其更加逼真。对于每个波形,将随机生成脉冲宽度和重复频率。对于LFM波形,随机生成扫描带宽和方向。对于巴克波形,随机生成芯片宽度和数量。所有信号ls受到高斯白噪声的影响,使用AWGN.函数的随机信噪比在[- 6,30]dB范围内。的范围内具有随机载频的一种频率偏移[FS / 6,Fs / 5]使用comm.PhaseFrequencyOffset对象。最后,每个信号通过一个多径Rician衰落信道,comm.RicianChannel

提供的辅助函数helperGenerateRadarWaveforms创建和增加每种调制类型。

rng默认的[wav, modType] = helperGenerateRadarWaveforms();

绘制一些LFM波形的傅里叶变换图,以显示生成集的方差。

idLFM = find(modType == .“从”,3);nfft = 2 ^ nextpow2(长度(Wav {1}));f =(0:(nfft / 2-1))/ nfft * 100e6;图形子图(1,3,1)z = FFT(WAV {IDLFM(1)},NFFT);情节(f / 1 e6、abs (Z (1: nfft / 2)))包含(‘频率(兆赫)’); ylabel ('振幅');轴正方形子图(1,3,2)Z=fft(wav{idLFM(2)},nfft);图(f/1e6,abs(Z(1:nfft/2)))xlabel(‘频率(兆赫)’); ylabel ('振幅');轴正方形subplot(1,3,3) Z = fft(wav{idLFM(3)},nfft);情节(f / 1 e6、abs (Z (1: nfft / 2)))包含(‘频率(兆赫)’); ylabel ('振幅');轴正方形

基于Wigner-Ville分布的特征提取

为了提高机器学习算法的分类性能,通常的方法是输入提取的特征代替原始信号数据。该特征提供了输入数据的表示,其使分类算法更容易识别在类上。Wigner-Ville分布表示对时间变化信号有用的原始数据的时频视图。两个时间和频率的高分辨率和局部性都提供了良好的特征,用于识别类似的调制类型。使用函数计算每种调制类型的平滑伪WVD。

图subplot(1,3,1) wvd(wav{find(modType ==“矩形”100 e6, 1)},“smoothedPseudo”)轴正方形;彩色栏;标题(“矩形”)子图(1,3,2)WVD(WAV {find(modtype ==“从”100 e6, 1)},“smoothedPseudo”)轴正方形;彩色栏;标题('lfm')子图(1,3,3)wvd(wav{find(modType==“巴克”100 e6, 1)},“smoothedPseudo”)轴正方形;彩色栏;标题('Barker')

要存储信号的平滑伪Wigner-Ville分布,首先要创建目录TFDDatabase在您的临时目录中tempdir。然后在中创建子目录TFDDatabase对于每种调制类型。对于每种信号,计算平滑的伪Wigner-Ville分布,并将结果下采样到227×227矩阵。将矩阵另存为. png子目录中与信号调制类型相对应的图像文件。辅助函数helperGenerateTFDfiles执行所有这些步骤。由于数据库的大小和复杂性,这个过程需要几分钟算法。你可以替换tempdir使用您具有写入权限的另一个目录。

parentDir = tempdir;dataDir ='tfddatabase';helperGenerateTFDfiles (parentDir dataDir, wav, modType 100 e6)

为创建的文件夹创建一个图像数据存储对象,用于管理用于深度学习网络训练的图像文件。这个步骤避免了将所有图像加载到内存中。将标签源指定为文件夹名称。这将根据文件夹名称分配每个信号的调制类型。

文件夹= fullfile(parentdir,datadir,{“矩形”,'lfm','Barker'});imd = imageDatastore(文件夹,...'fileextensions',“使用”,“LabelSource”,“foldernames”,“ReadFcn”,@readtfdforsquezenet);

用80%的数据训练网络,用10%的数据测试网络。剩下的10%用于验证。使用拆分标签函数来划分imageageAtastore.培训、验证和测试集。

[imdsTrain, imdsTest imdsValidation] = splitEachLabel (imd, 0.8, 0.1);

建立深度学习网络

在对深度学习网络进行训练之前,请定义网络结构。本例使用转移学习挤压网(transfer learning SqueezeNet),这是一种为图像分类而创建的深度CNN。转移学习是重新训练现有神经网络以对新目标进行分类的过程。该网络接受大小为227×227×3的图像输入t到网络,自定义读取功能readTFDForSqueezeNet将二维时频分布转换为尺寸正确的RGB图像。在默认配置中,SqueezeNet执行1000个类别的分类。

负载SqueezeNet。

net =挤压;

从网络中提取图层图。确认Squeezenet配置为大小227-by-227-3的图像。

lgraphSqz = layerGraph(净);lgraphSqz.Layers (1)
ans=ImageInputLayer,具有以下属性:名称:'data'InputSize:[227 227 3]超参数数据增强:'none'规格化:'zerocenter'规格化维度:'auto'平均值:[1×1×3 single]

为了调整SqueezeNet以满足我们的需求,需要对最后六层中的三层进行修改,将感兴趣的三种雷达调制类型进行分类。检查最后六个网络层。

lgraphSqz.Layers(录得5个:结束)
ans = 6×1 Layer array with layers:1“drop9”辍学50%辍学2 conv10卷积1000 1×1×512旋转步[1]和填充[0 0 0 0]3‘relu_conv10 ReLU ReLU 4“pool10”二维全球平均池二维全球平均池5“概率”Softmax Softmax 6“ClassificationLayer_predictions”分类输出crossentropyex“鲤鱼”和999其他的类

替换掉'drop9'层,网络中的最后一个退出层,用一个概率为0.6的退出层。

tmpLayer = lgraphSqz.Layers(录得5个);newDropoutLayer = dropoutLayer (0.6,“姓名”,“new_dropout”);lgraphSqz = replaceLayer (lgraphSqz tmpLayer.Name newDropoutLayer);

在SqueezeNet中,最后一个可学习的层是一个1乘1的卷积层“conv10”。将该层替换为一个新的卷积层,其滤波器的数量等于调制类型的数量。还增加了新层的学习率因子。

numClasses = 3;tmpLayer = lgraphSqz.Layers (end-4);numClasses newLearnableLayer = convolution2dLayer (1,...“姓名”,“新康”,...'wexerlearnratefactor', 20岁,...“BiasLearnRateFactor”,20);lgraphSqz=replaceLayer(lgraphSqz,tmpLayer.Name,newLearnableLayer);

将分类层替换为一个没有类标签的新层。

tmpLayer = lgraphSqz.Layers(结束);newClassLayer = classificationLayer (“姓名”,“new_classoutput”);lgraphSqz = replaceLayer (lgraphSqz tmpLayer.Name newClassLayer);

检查网络的最后六层。确认dropout, convolutional, and output layers have been changed。

lgraphSqz.Layers(录得5个:结束)
ans=6×1带层的层阵列:1“新建-退出”退出60%退出2“新建-转换”卷积3 1×1带跨步[1]和填充[0 0 0 0 0]的卷积3“新建-转换”10“新建-转换”4“池10”2-D全局平均池2-D全局平均池5“prob”Softmax Softmax 6“新建-类输出”分类输出交叉熵

为确保良好的网络性能的训练过程选择选项。指的是trainingOptions每个选项的描述的文档。

选择= trainingOptions (“个”,...“MiniBatchSize”, 128,...“MaxEpochs”,5,...“初始学习率”1 e - 3,...“洗牌”,“every-epoch”,...“详细”假的,...“情节”,“训练进步”,...“ValidationData”, imdsValidation);

培训网络

使用列车网络命令来训练创建的CNN。由于数据集很大,这个过程可能需要几分钟。如果你的机器有GPU和并行计算工具箱™,那么MATLAB®会自动使用GPU进行训练。否则,使用CPU。图中的训练精度图显示了网络在所有迭代中学习的进度。在三种雷达调制类型上,网络对训练信号的分类几乎100%正确。

trainedNet = trainNetwork (imdsTrain、lgraphSqz选项);

评估雷达波形的性能

使用训练过的网络对测试数据进行分类分类混淆矩阵是可视化分类性能的一种方法confusionchart命令来计算和可视化分类精度。对于输入到网络的三种调制类型,几乎所有的相位编码、线性调频和矩形波形都能被网络正确识别。

预测=分类(trainedNet,imdsTest);图形混淆图(imdsTest.标签,预测,“归一化”,“列规格化”)

生成通信波形和提取特征

雷达分类系统的频谱必须与其他传输源竞争。让我们了解创建的网络如何扩展以结合其他模拟调制类型。另一个MathWorks®示例,基于深度学习的调制分类(通讯工具箱),使用通信工具箱™执行多种不同调制类型的调制分类。辅助函数Helpergeneratecommswaveforms.生成并扩展该示例中使用的调制类型的子集。由于WVD丢失相位信息,因此仅使用振幅和频率调制类型的子集。

有关数字和模拟调制分类所需的工作流程以及用于创建这些波形的技术的详细描述,请参见示例链接。对于每种调制类型,使用提取时频特征并可视化。

[wav, modType] = helperGenerateCommsWaveforms();图subplot(2,3,1) wvd(wav{find(modType ==“GFSK”1)}, 200年e3,“smoothedPseudo”)轴正方形;彩色栏;标题(“GFSK”)子图(2,3,2)WVD(WAV {find(modtype ==“CPFSK”1)}, 200年e3,“smoothedPseudo”)轴正方形;彩色栏;标题(“CPFSK”) subplot(2,3,3) wvd(wav{find(modType ==“B-FM”1)}, 200年e3,“smoothedPseudo”)轴正方形;彩色栏;标题(“B-FM”)子图(2,3,4)wvd(wav{find(modType==“SSB-AM”1)}, 200年e3,“smoothedPseudo”)轴正方形;彩色栏;标题(“SSB-AM”wvd(wav{find(modType ==“DSB-AM”1)}, 200年e3,“smoothedPseudo”)轴正方形;彩色栏;标题(“DSB-AM”)

使用helper函数helperGenerateTFDfiles再次计算每个输入信号的平滑伪WVD。创建图像数据存储对象以管理所有调制类型的图像文件。

HelperGeneratetFdfiles(parentdir,datadir,wav,modtype,200e3)文件夹= fullfile(parentdir,datadir,{“矩形”,'lfm','Barker',“GFSK”,“CPFSK”,“B-FM”,“SSB-AM”,“DSB-AM”});imd = imageDatastore(文件夹,...'fileextensions',“使用”,“LabelSource”,“foldernames”,“ReadFcn”,@readtfdforsquezenet);

再次,将数据划分为培训集,验证集和使用的测试集拆分标签功能。

rng默认的[imdsTrain, imdsTest imdsValidation] = splitEachLabel (imd, 0.8, 0.1);

调整深度学习网络架构

以前,网络架构被设置为对三种调制类型进行分类。这必须进行更新,以允许对雷达和通信信号的所有八种调制类型进行分类。这是一个与以前类似的过程,但完全连接层现在需要输出大小为8。

numClasses = 8;网= squeezenet;lgraphSqz = layerGraph(净);tmpLayer = lgraphSqz.Layers(录得5个);newDropoutLayer = dropoutLayer (0.6,“姓名”,“new_dropout”);lgraphSqz = replaceLayer (lgraphSqz tmpLayer.Name newDropoutLayer);tmpLayer = lgraphSqz.Layers (end-4);numClasses newLearnableLayer = convolution2dLayer (1,...“姓名”,“新康”,...'wexerlearnratefactor', 20岁,...“BiasLearnRateFactor”,20);lgraphSqz=replaceLayer(lgraphSqz,tmpLayer.Name,newLearnableLayer);tmpLayer = lgraphSqz.Layers(结束);newClassLayer = classificationLayer (“姓名”,“new_classoutput”);lgraphSqz = replaceLayer (lgraphSqz tmpLayer.Name newClassLayer);

创建一套新的培训选项。

选择= trainingOptions (“个”,...“MiniBatchSize”,150,...“MaxEpochs”10...“初始学习率”1的军医,...“洗牌”,“every-epoch”,...“详细”假的,...“情节”,“训练进步”,...“ValidationData”, imdsValidation);

使用列车网络命令来训练创建的CNN。对于所有调制类型,训练收敛的准确率约为95%正确分类。

trainedNet = trainNetwork (imdsTrain、lgraphSqz选项);

评估所有信号的性能

使用分类命令以对保存的信号进行分类以进行测试。再次,可视化性能confusionchart

预测=分类(trainedNet imdsTest);图;confusionchart (imdsTest。标签,预测,“归一化”,“列规格化”)

对于输入到网络的八种调制类型,正确分类了大约98%的B-FM,CPFSK,GFSK,Barker和LFM调制类型。平均而言,正确识别了约85%的AM信号。从混淆矩阵,将高百分比的SSB-AM信号被错误分类为DSB-AM,以及DSB-AM信号作为SSB-AM。

让我们调查其中一些错误分类,以深入了解网络的学习过程阅读贴图函数从测试数据集中从每个类提取单个图像。显示的WVD在视觉上看起来非常相似。由于SSB-AM和SSB-AM信号具有非常相似的特征,这在一定程度上解释了网络正确区分这两种类型的困难。进一步的信号处理可以使这两种调制类型之间的差异对网络更清楚,并导致更好的分类。

DSB_DSB = readimage (imdsTest找到(imdsTest。标签= =“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));图subplot(2,2,1) imagesc(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] Liu, Xiaoyu, Diyu Yang, Aly El Gamal。调制分类的深度神经网络结构。第51届Asilomar信号、系统和计算机会议.2017年。

王超,王健,张旭东。基于时频分析和卷积神经网络的雷达波形自动识别IEEE国际会议声学,语音和信号处理(ICASSP).2017年。