主要内容

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

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

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

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

  • 矩形

  • 线性调频(LFM)

  • 巴克码

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

  • 高斯频移键控

  • 连续相位移频键控

  • 广播频率调制(B-FM)

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

  • 单边带调幅

本示例主要关注雷达波形,并将分类扩展到包括一小组幅度和频率调制通信信号。看到基于深度学习的调制分类(通信工具箱)为调制分类的完整工作流程与广泛的通信信号阵列。

生成雷达波形

为每种调制类型生成3000个采样率为100 MHz的信号。使用分阶段。RectangularWaveform对于矩形脉冲,分阶段。LinearFMWaveform中频采样,分阶段。PhaseCodedWaveform用于用巴克码进行相位编码的脉冲。

每个信号都有独特的参数,并通过各种损伤增强,使其更真实。对于每个波形,脉冲宽度和重复频率将随机生成。对于线性调频波形,扫描带宽和方向是随机产生的。对于巴克波形,芯片宽度和数量是随机产生的。所有信号都被高斯白噪声削弱情况下随机信噪比范围为[- 6,30]dB的函数。的范围内的随机载波频率的频率偏移[Fs / 6Fs / 5]对每个信号应用comm.PhaseFrequencyOffset对象。最后,每个信号通过一个多径的专家级衰落信道,comm.RicianChannel

辅助函数helperGenerateRadarWaveforms创建和扩充每个调制类型。

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

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

idLFM = find(modType ==“从”3);nfft = 2 ^ nextpow2(长度(wav {1}));f = (0: (nfft / 2 - 1)) / nfft * 100 e6;图subplot(1,3,1) Z = fft(wav{idLFM(1)},nfft);情节(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。

图subplot(1,3,1) wvd(wav{find(modType == .“矩形”100 e6, 1)},“smoothedPseudo”)轴广场;colorbar;标题(“矩形”) subplot(1,3,2) wvd(wav{find(modType ==“从”100 e6, 1)},“smoothedPseudo”)轴广场;colorbar;标题(“从”) subplot(1,3,3) wvd(wav{find(modType ==“巴克”100 e6, 1)},“smoothedPseudo”)轴广场;colorbar;标题(“巴克”

要存储信号的平滑伪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, {“矩形”“从”“巴克”});imd = imageDatastore(文件夹,...“FileExtensions”“使用”“LabelSource”“foldernames”“ReadFcn”, @readTFDForSqueezeNet);

该网络使用80%的数据进行训练,并使用10%的数据进行测试。剩下的10%用于验证。使用splitEachLabel函数将imageDatastore培训、验证和测试集。

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

建立深度学习网络

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

负载SqueezeNet。

网= squeezenet;

从网络中提取层图。确认为大小为227 × 227 × 3的图像配置了SqueezeNet。

lgraphSqz = layerGraph(净);lgraphSqz.Layers (1)
名称:'data' InputSize: [227 227 3] Hyperparameters DataAugmentation: 'none' Normalization: 'zerocenter' NormalizationDimension: 'auto' Mean: [1×1×3 single]

为了对本例调优SqueezeNet,需要修改最后六个层中的三个层,以对感兴趣的三种雷达调制类型进行分类。检查最后六个网络层。

lgraphSqz.Layers(录得5个:结束)
ans = 6×1 Layer array with layers: 1 'drop9' Dropout 50% Dropout 2 'conv10' Convolution 1000 1×1×512 convolutions with stride [1 1] and padding [0 000] 3 'relu_conv10' ReLU ReLU 4 'pool10' 2d - d Global Average Pooling 2d - d Global Average Pooling 5 'prob' Softmax Softmax 6 ' classificationlayer_prediction 'Classification Output crossentropyex with 'tench'和999其他类

用概率为0.6的dropout层替换drop9层,即网络中的最后一个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层、卷积层和输出层已经更改。

lgraphSqz.Layers(录得5个:结束)
ans = 6×1 Layer array with layers: 1 'new_dropout' Dropout 60% Dropout 2 'new_conv' Convolution 3 1×1 convolutions with stride [1 1] and padding [0 0 0 0 0] 3 'relu_conv10' ReLU ReLU 4 'pool10' 2d Global Average Pooling 2d Global Average Pooling 5 'prob' Softmax Softmax 6 'new_classoutput' Classification Output crossentropyex . 3 'new_conv' Convolution with stride [1 1] and padding [0 0 0 0

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

选择= trainingOptions (“个”...“MiniBatchSize”, 128,...“MaxEpochs”5,...“InitialLearnRate”1 e - 3,...“洗牌”“every-epoch”...“详细”假的,...“阴谋”“训练进步”...“ValidationData”, imdsValidation);

培训网络

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

trainedNet = trainNetwork (imdsTrain、lgraphSqz选项);

评估雷达波形的性能

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

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

生成通信波形和提取特征

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

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

[wav, modType] = helperGenerateCommsWaveforms();图subplot(2,3,1) wvd(wav{find(modType == .“GFSK”1)}, 200年e3,“smoothedPseudo”)轴广场;colorbar;标题(“GFSK”) subplot(2,3,2) wvd(wav{find(modType == .“CPFSK”1)}, 200年e3,“smoothedPseudo”)轴广场;colorbar;标题(“CPFSK”) subplot(2,3,3) wvd(wav{find(modType == .“B-FM”1)}, 200年e3,“smoothedPseudo”)轴广场;colorbar;标题(“B-FM”) subplot(2,3,4) wvd(wav{find(modType == .“SSB-AM”1)}, 200年e3,“smoothedPseudo”)轴广场;colorbar;标题(“SSB-AM”) subplot(2,3,5) wvd(wav{find(modType == .“DSB-AM”1)}, 200年e3,“smoothedPseudo”)轴广场;colorbar;标题(“DSB-AM”

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

helperGenerateTFDfiles(parentDir,dataDir,wav,modType,200e3) folders = fullfile(parentDir,dataDir,{“矩形”“从”“巴克”“GFSK”“CPFSK”“B-FM”“SSB-AM”“DSB-AM”});imd = imageDatastore(文件夹,...“FileExtensions”“使用”“LabelSource”“foldernames”“ReadFcn”, @readTFDForSqueezeNet);

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

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

调整深度学习网络架构

在此基础上,建立了三种调制类型的网络结构。必须对此进行更新,以允许对雷达和通信信号的所有八种调制类型进行分类。这与前面的过程类似,不同的是fullyConnectedLayer现在要求输出大小为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,...“名字”“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的军医,...“洗牌”“every-epoch”...“详细”假的,...“阴谋”“训练进步”...“ValidationData”, imdsValidation);

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

trainedNet = trainNetwork (imdsTrain、lgraphSqz选项);

评估所有信号的性能

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

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

对于网络输入的8种调制类型,B-FM、CPFSK、GFSK、Barker和LFM调制类型的正确分类率约为98%。平均约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。标签= =“SSB-AM”) &(预测==“SSB-AM”), 1));图subplot(2,2,1) imagesc(DSB_DSB(:,:,1))轴广场;标题({“实际的类:DSB-AM”“预测类:DSB-AM”}) subplot(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]布伦诺夫松,约翰和玛丽亚·桑斯坦。利用卷积神经网络中的Wigner-Ville分布对一维非平稳信号进行分类。第25届欧洲信号处理会议(EUSIPCO).IEEE 2017。

[2]刘小雨杨迪雨Aly El Gamal。“调制分类的深度神经网络体系结构。”第51届信号、系统和计算机阿西洛玛会议.2017.

[3] '王,超,王健,张旭东。基于时频分析和卷积神经网络的雷达波形自动识别。电子电气工程师国际会议声学、语音和信号处理(ICASSP).2017.

Baidu
map