利用深度学习进行雷达波形分类

这个例子展示了如何使用Wigner-Ville distribution (WVD)和deep convolutional neural network (CNN)对生成的合成数据的radar波形类型进行分类。

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

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

  • 矩形

  • 线性调频

  • 巴克码

雷达分类系统并不是孤立存在的。相反,它存在于一个日益被占用的频谱中,与其他传输源竞争,如通信系统、无线电和导航系统。本示例的第二部分扩展了网络,以包括其他通信调制类型。除了第一组雷达波形外,扩展网络还综合并识别了这些通信波形:

  • 高斯频移键控(GFSK)

  • 连续相位频移键控(CPFSK)

  • 广播调频(B-FM)

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

  • 单边带调幅(SSB-AM)

本实施例中主要集中于雷达波形,其分类为被扩展到包括一小的幅度和频率调制的通信信号。看到调制分类与深度学习(通讯工具箱),用于调制分类的具有宽阵列的通信信号的一个完整的工作流程。

生成雷达波形

产生3000个信号,采样率为100每种调制类型的兆赫。使用phased.RectangularWaveform为矩形脉冲,phased.LinearFMWaveform为LFM,和phased.PhaseCodedWaveform用于相位编码脉冲与巴克码。

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

提供的辅助功能helperGenerateRadarWaveforms创建并增强每个调制类型。

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

绘制几个LFM波形的傅里叶变换,以显示生成的集合中的方差。

idLFM =查找(modType ==“LFM”,3);NFFT = 2 ^ nextpow2(长度(WAV {1}));F =(0:(N FFT / 2-1))/ NFFT * 100e6;图副区(1,3,1)Z = FFT(WAV {idLFM(1)},N FFT个);情节(f / 1 e6、abs (Z (1: nfft / 2)))包含(“频率(MHz)”);ylabel (“振幅”);轴广场subplot(1,3,2) Z = fft(wav{idLFM(2)},nfft);情节(f / 1 e6、abs (Z (1: nfft / 2)))包含(“频率(MHz)”);ylabel (“振幅”);轴广场subplot(1,3,3) Z = fft(wav{idLFM(3)},nfft);情节(f / 1 e6、abs (Z (1: nfft / 2)))包含(“频率(MHz)”);ylabel (“振幅”);轴广场

使用Wigner-Ville分布进行特征提取

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

figure subplot(1,3,1) wvd(wav{find(modType ==)“矩形”100 e6, 1)},“smoothedPseudo”)轴广场;彩条;标题(“矩形”) subplot(1,3,2) wvd(wav{find(modType ==“LFM”100 e6, 1)},“smoothedPseudo”)轴广场;彩条;标题(“从”) subplot(1,3,3) wvd(wav{find(modType ==“巴克”100 e6, 1)},“smoothedPseudo”)轴广场;彩条;标题(“剥皮”)

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

parentDir = tempdir;dataDir ='TFDDatabase';helperGenerateTFDfiles(parentDir,DATADIR,WAV,modType,100e6)

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

文件夹=完整文件(parentDir,DATADIR,{“矩形”,“从”,“剥皮”});imd = imageDatastore(文件夹,'FileExtensions',“巴纽”,'LABELSOURCE',“foldernames”,“ReadFcn”,@readTFDForSqueezeNet);

的网络进行训练用数据的80%,并用10%的测试上。剩余的10%用于验证。使用splitEachLabel函数来划分imageDatastore培训、验证和测试集。

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

设置深层学习网

在深度学习网络可以训练之前,定义网络架构。这个例子使用了transfer learning SqueezeNet,一个用于图像分类的深度CNN。转移学习是对已有的神经网络进行再训练,对新目标进行分类的过程。这个网络接受大小为227×227×3的图像输入。在输入到网络之前,自定义读取功能readTFDForSqueezeNet将二维时频分布变换为正确大小的RGB图像。SqueezeNet在其默认配置中执行1000个类别的分类。

负载SqueezeNet。

净= squeezenet;

提取从网络层图形。确认SqueezeNet配置为尺寸227由-227×3的图像。

lgraphSqz = layerGraph(净);lgraphSqz.Layers (1)
超参数数据扩充:‘none’归一化:‘zerocenter’归一化维度:‘auto’平均:[1×1×3 single]

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

lgraphSqz.Layers(录得5个:结束)
ANS = 6×1层阵列层:1 'drop9' 降50%漏失2 'conv10' 卷积1000个1x1x512卷积步幅[1 1]和填充[0 0 0 0] 3 'relu_conv10' RELU RELU 4 'pool10' 全局平均池全球平均池5“的概率”使用SoftMax SOFTMAX 6“ClassificationLayer_predictions”分类输出crossentropyex与“丁鲷”和999的其他类

将“drop9”层替换为概率为0.6的dropout层,这是网络中的最后一个dropout层。

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,“名字”,“new_conv”,“WeightLearnRateFactor”,20岁,“BiasLearnRateFactor”,20);lgraphSqz = replaceLayer (lgraphSqz tmpLayer.Name newLearnableLayer);

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

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

检查网络的最后六层。确认dropout、convolutional和output layer都已经更改。

lgraphSqz.Layers(录得5个:结束)
ans x1 = 6层阵列层:1“new_dropout”辍学60%辍学2 new_conv的卷积3 1 x1旋转步[1]和填充[0 0 0 0]3‘relu_conv10 ReLU ReLU 4“pool10”全球平均分担全球平均池5“概率”Softmax Softmax 6 new_classoutput crossentropyex分类输出

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

选项= trainingOptions(“个”,“MiniBatchSize”,128,“MaxEpochs”5,“InitialLearnRate”1 e - 3,“洗牌”,“每个历元”,“详细”,假,“阴谋”,“训练进步”,“ExecutionEnvironment”,“汽车”,'ValidationData',imdsValidation);

培训网络

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

trainedNet = trainNetwork(imdsTrain,lgraphSqz,选项);

评估雷达波形性能

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

预测=分类(trainedNet imdsTest);图confusionchart (imdsTest.Labels预测,“归一化”,“column-normalized”)

生成通信波形并提取特征

雷达分类系统的频谱必须与其他发送源竞争。让我们来看看如何创建的网络延伸到合并其它模拟调制类型。另一个MathWorks公司例如,调制分类与深度学习(通信工具箱),使用通信工具箱™对几种不同的调制类型进行调制分类。辅助函数helperGenerateCommsWaveforms生成并扩展该示例中使用的调制类型的子集。由于WVD丢失相位信息,只使用振幅和频率调制类型的子集。

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

[wav, modType] = helperGenerateCommsWaveforms();figure subplot(2,3,1) wvd(wav{find(modType ==)“GFSK”1)},200年e3,“smoothedPseudo”)轴广场;彩条;标题(“GFSK”)副区(2,3,2)WVD(WAV {查找(modType ==“CPFSK”1)},200年e3,“smoothedPseudo”)轴广场;彩条;标题(“CPFSK”) subplot(2,3,3) wvd(wav{find(modType ==“B-FM”1)},200年e3,“smoothedPseudo”)轴广场;彩条;标题(“B-FM”) subplot(2,3,4) wvd(wav{find(modType ==“SSB-AM”1)},200年e3,“smoothedPseudo”)轴广场;彩条;标题(“SSB-AM”)子图(2,3,5)wvd(wav{find(modType ==)“DSB-AM”1)},200年e3,“smoothedPseudo”)轴广场;彩条;标题('DSB-AM')

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

helperGenerateTFDfiles(parentDir,DATADIR,WAV,modType,200e3)文件夹=完整文件(parentDir,DATADIR,{“矩形”,“从”,“剥皮”,“GFSK”,“CPFSK”,“B-FM”,“SSB-AM”,'DSB-AM'});imd = imageDatastore(文件夹,'FileExtensions',“巴纽”,'LABELSOURCE',“foldernames”,“ReadFcn”,@readTFDForSqueezeNet);

方法将数据划分为训练集、验证集和测试集splitEachLabel函数。

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

调整深度学习网络架构

在此之前,网络结构被建立来区分三种调制类型。这必须更新,以允许分类所有八种调制类型的雷达和通信信号。这是一个与前面类似的过程,除了fullyConnectedLayer现在需要八个输出尺寸。

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,“名字”,“new_conv”,“WeightLearnRateFactor”,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“InitialLearnRate”1的军医,“洗牌”,“每个历元”,“详细”,假,“阴谋”,“训练进步”,“ExecutionEnvironment”,“汽车”,'ValidationData',imdsValidation);

使用trainNetwork命令训练创建的CNN。对于所有调制类型,训练收敛的正确率约为95%。

trainedNet = trainNetwork(imdsTrain,lgraphSqz,选项);

评估上的所有信号的性能

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

预测=分类(trainedNet imdsTest);图;imdsTest.Labels confusionchart(预测,“归一化”,“column-normalized”)

对于输入网络的8种调制类型,超过99%的B-FM、CPFSK、GFSK、Barker和LFM调制类型被正确分类。平均而言,超过85%的AM信号被正确识别。从混淆矩阵可以看出,很大比例的SSB-AM信号被误分类为DSB-AM,而DSB-AM信号被误分类为SSB-AM。

让我们研究其中的一些错误分类,以深入了解网络的学习过程。使用readimage函数对图像数据存储进行处理,以从测试数据集中从每个类中提取单个图像。显示的WVD在视觉上看起来非常相似。由于DSB-AM和SSB-AM信号有非常相似的签名,这在一定程度上解释了网络对这两种类型进行正确分类的困难。进一步的信号处理可以使这两种调制方式之间的差异更清晰地呈现在网络中,从而改善分类。

DSB_DSB = readimage (imdsTest找到(imdsTest。标签= ='DSB-AM')和(预测=='DSB-AM'),1));DSB_SSB = readimage (imdsTest找到(imdsTest。标签= ='DSB-AM')和(预测==“SSB-AM”),1));SSB_DSB = readimage (imdsTest找到(imdsTest。标签= =“SSB-AM”)和(预测=='DSB-AM'),1));SSB_SSB = readimage(imdsTest,发现((imdsTest.Labels ==“SSB-AM”)和(预测==“SSB-AM”),1));figure subplot(2,2,1) imagesc(DSB_DSB(:,:,1))轴广场;标题({“实际的类:DSB-AM”,'预测类别:DSB-AM'})副区(2,2,2)于imagesc(DSB_SSB(:,:,1))轴广场;标题({“实际的类:DSB-AM”,“预测类:SSB-AM”) subplot(2,2,3) imagesc(SSB_DSB(:,:,1))轴广场;标题({'实际的类:SSB-AM','预测类别:DSB-AM') subplot(2,2,4) imagesc(SSB_SSB(:,:,1))轴广场;标题({'实际的类:SSB-AM',“预测类:SSB-AM”})

摘要

此实施例表明如何雷达和通信调制类型可以通过使用时间 - 频率的技术和深学习网络进行分类。为进一步改善进一步努力可利用小波工具箱™和信号处理工具箱提供额外的傅立叶分析™可用时频分析进行调查。

参考

[1] Brynolfsson, Johan和Maria Sandsten。使用卷积神经网络中的维格纳-维尔分布对一维非平稳信号进行分类。第25届欧洲信号处理会议(EUSIPCO)。IEEE 2017。

[2]刘,小玉,地榆杨和阿里厄尔尼诺贾迈勒。“深层神经网络结构的调制分类。”第51届阿西洛玛信号、系统和计算机会议。2017年。

Wang, Chao, Jian Wang,和Xudong Zhang。基于时频分析和卷积神经网络的雷达波形自动识别。IEEE国际会议声学,语音和信号处理(ICASSP)。2017年。