此示例显示如何使用Wigner-Ville分布(WVD)和深卷积神经网络(CNN)对雷达和通信波形进行分类。
调制分类是智能接收机的一个重要功能。调制分类有许多应用,如认知雷达和软件无线电。通常,为了识别这些波形并根据调制类型对它们进行分类,必须定义有意义的特征并将其输入到分类器中。虽然有效,但这个过程需要大量的努力和领域知识来产生准确的分类。这个例子探索了一个框架,自动提取信号的时频特征,并使用深度学习网络进行信号分类。
本例的第一部分模拟了一个雷达分类系统,该系统综合了三种脉冲雷达波形并对它们进行分类。雷达波形为:
矩形
线性调频
巴克码
雷达分类系统不是孤立存在的。相反,它位于一个日益被占用的频谱中,与其他传输源竞争,如通信系统、无线电和导航系统。本例的第二部分扩展了网络,以包括其他通信调制类型。除了第一组雷达波形,扩展网络还综合和识别这些通信波形:
高斯频移键控
连续相移频键控
广播调频(B-FM)
双带调幅
单边带调幅
本例主要关注雷达波形,并将分类扩展到包括一组幅度和频率调制通信信号。看到基于深度学习的调制分类(通信工具箱)对于一个完整的工作流调制分类与广泛的通信信号阵列。
生成3000个信号,采样率为100.
每个调制类型的MHz。用分阶段。RectangularWaveform
对于矩形脉冲,相位阶段.Linearfmwaveform.
中频采样,逐步.PhaseCodedWaveForm.
用于巴克码相位编码脉冲。
每个信号都有独特的参数,并增加了各种损伤,使其更真实。对于每个波形,脉冲宽度和重复频率将随机产生。对于线性调频波形,扫描带宽和方向是随机产生的。对于巴克波形,芯片的宽度和数量是随机产生的。所有信号都受到高斯白噪声的干扰情况下
在[-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 * 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分布代表了对时变信号有用的原始数据的时频视图。在时间和频率上的高分辨率和局部性为识别类似的调制类型提供了良好的特征。使用WVD.
函数来计算每种调制类型的平滑伪WVD。
图subplot(1,3,1) wvd(wav{find(modType ==“矩形”100 e6, 1)},“smoothedPseudo”)轴广场;colorbar离开;标题('rect') subplot(1,3,2) wvd(wav{find(modType ==“lfm”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
执行所有这些步骤。由于数据库尺寸的大量和复杂性,此过程需要几分钟WVD.
算法。你可以换tempdir
使用具有写权限的另一个目录。
parentdir = tempdir;datadir =“TFDDatabase”;Helpergeneratetfdfiles(parentdir,datadir,wav,modtype,100e6)
为创建的文件夹创建一个图像数据存储对象,用于管理用于深度学习网络训练的图像文件。这个步骤避免了将所有图像加载到内存中。将标签源指定为文件夹名称。这将根据文件夹名称分配每个信号的调制类型。
文件夹= fullfile (parentDir dataDir, {'rect',“从”,“巴克”});imds = imageageataStore(文件夹,......“FileExtensions”,'.png','labelsource','foldernames',“ReadFcn”, @readTFDForSqueezeNet);
网络培训,80%的数据培训并以10%进行测试。剩下的10%用于验证。使用splitEachLabel
函数来划分imageDatastore
进入培训,验证和测试集。
[IMDStrain,IMDST,IMDSValidation] = SpliteachLabel(IMDS,0.8,0.1);
在深度学习网络可以被训练之前,定义网络结构。这个例子使用迁移学习SqueezeNet,这是一个为图像分类创建的深度CNN。迁移学习是对现有神经网络进行再训练以分类新目标的过程。这个网络接受尺寸为227 × 227 × 3的图像输入。之前输入到网络,自定义读取功能readtfdforsqueezenet.
将二维时频分布转换为尺寸正确的RGB图像。在默认配置中,SqueezeNet执行1000个类别的分类。
负载挤压罩。
net =挤压;
从网络中提取层图。确认将SqueezeNet配置为尺寸为227 × 227 × 3的图像。
lgraphSqz = layerGraph(净);lgraphSqz.Layers (1)
ans = ImageInputLayer with properties: Name: 'data' InputSize: [227 227 3] Hyperparameters DataAugmentation: 'none' NormalizationDimension: 'auto' Mean: [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);
挤压Zenet中的最后一次学习层是一个1比1的卷积层,'conv10'。用新的卷积层替换层,滤波器数量等于调制类型的数量。还增加了新层的学习率因子。
numclasses = 3;tmpLayer = lgraphSqz.Layers (end-4);newlearnablelayer =卷积2dlayer(1,numcrasses,......“名字”,“new_conv”,......“WeightLearnRateFactor”20,......'biaslearnratefactor', 20);lgraphSqz = replaceLayer (lgraphSqz tmpLayer.Name newLearnableLayer);
用没有类标签的新一个替换分类层。
tmpLayer = lgraphSqz.Layers(结束);newclasslayer = classificationlayer(“名字”,“new_classoutput”);lgraphsqz = replaceElayer(lgraphsqz,tmplayer.name,newclasslayer);
检查网络的最后六层。确认已更改丢帧,卷积和输出层。
lgraphSqz.Layers(录得5个:结束)
ans = 6×1层阵列层:1“new_dropout”辍学60%辍学2 new_conv的卷积3 1×1步[1]和填充的卷积[0 0 0 0]3‘relu_conv10 ReLU ReLU 4“pool10”全球平均分担全球平均池5“概率”Softmax Softmax 6 new_classoutput crossentropyex分类输出
选择培训过程的选项,以确保良好的网络性能。参考培训选项
每个选项的描述文档。
选项=培训选项(“个”,......“MiniBatchSize”,128,......'maxepochs'5,......“InitialLearnRate”,1e-3,......“洗牌”,'每个时代',......“详细”,错误的,......“阴谋”,'培训 - 进步',......'vightationdata',IMDSValidation);
使用trainNetwork
命令来训练创建的CNN。由于数据集很大,这个过程可能需要几分钟。如果你的机器有GPU和并行计算工具箱™,那么MATLAB会自动使用GPU进行训练。否则,使用CPU。图中的训练精度图显示了网络在所有迭代中学习的进度。在三种雷达调制类型上,网络对训练信号的分类几乎100%正确。
trousainnet = trainnetwork(Imdstrain,lgraphsqz,选项);
使用培训的网络使用训练网络对测试数据进行分类分类
命令。混淆矩阵是一种可视化分类性能的方法。使用困惑的园林
命令计算和可视化分类准确性。对于输入到网络的三种调制类型,通过网络正确地识别了几乎所有相位编码,LFM和矩形波形。
预测=分类(trainedNet imdsTest);Figure ConfusionChart(预测,IMDStest.Labels,“归一化”,“column-normalized”)
雷达分类系统的频谱必须与其他发射源竞争。让我们看看创建的网络如何扩展以合并其他模拟调制类型。另一个MathWorks例子,基于深度学习的调制分类(通信工具箱),使用Communications Toolbox™对几种不同的调制类型进行调制分类。辅助函数helperGenerateCommsWaveforms
生成并增加该示例中使用的调制类型的子集。由于WVD失去相位信息,只使用幅度和频率调制类型的子集。
有关数字和模拟调制分类所需的工作流程的深入描述,以及用于创建这些波形的技术,请参阅示例链接。对于每种调制类型,使用WVD.
提取时频特征并可视化。
[wav,modtype] = helpergeneratecommswaveforms();图形子图(2,3,1)WVD(WAV {find(modtype ==“GFSK”,1)},200e3,“smoothedPseudo”)轴广场;colorbar离开;标题('gfsk'wvd(wav{find(modType ==“cpfsk”,1)},200e3,“smoothedPseudo”)轴广场;colorbar离开;标题('cpfsk') subplot(2,3,3) wvd(wav{find(modType ==“B-FM”,1)},200e3,“smoothedPseudo”)轴广场;colorbar离开;标题('b-fm'wvd(wav{find(modType ==“SSB-AM”,1)},200e3,“smoothedPseudo”)轴广场;colorbar离开;标题('ssb-am'wvd(wav{find(modType ==“dsb-am”,1)},200e3,“smoothedPseudo”)轴广场;colorbar离开;标题('dsb-am')
使用辅助功能helperGenerateTFDfiles
再次计算每个输入信号的平滑伪WVD。创建一个图像数据存储对象来管理所有调制类型的图像文件。
/ / / / / / / / / / / /'rect',“从”,“巴克”,'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);
在此之前,网络体系结构被划分为三种调制类型。必须对其进行更新,以便对雷达和通信信号的所有八种调制类型进行分类。这是一个类似于以前的过程,除了fullyConnectedLayer
现在需要输出大小的八个。
numclasses = 8;net =挤压;lgraphSqz = layerGraph(净);tmplayer = lgraphsqz.layers(端5);newdropoutlayer = dropoutlayer(0.6,“名字”,“new_dropout”);lgraphSqz = replaceLayer (lgraphSqz tmpLayer.Name newDropoutLayer);tmpLayer = lgraphSqz.Layers (end-4);newlearnablelayer =卷积2dlayer(1,numcrasses,......“名字”,“new_conv”,......“WeightLearnRateFactor”20,......'biaslearnratefactor', 20);lgraphSqz = replaceLayer (lgraphSqz tmpLayer.Name newLearnableLayer);tmpLayer = lgraphSqz.Layers(结束);newclasslayer = classificationlayer(“名字”,“new_classoutput”);lgraphsqz = replaceElayer(lgraphsqz,tmplayer.name,newclasslayer);
创建一套新的培训选项。
选项=培训选项(“个”,......“MiniBatchSize”, 150,......'maxepochs'10,......“InitialLearnRate”,1e-4,......“洗牌”,'每个时代',......“详细”,错误的,......“阴谋”,'培训 - 进步',......'vightationdata',IMDSValidation);
使用trainNetwork
命令来训练创建的CNN。对于所有调制类型,训练收敛的准确率约为95%的正确分类。
trousainnet = trainnetwork(Imdstrain,lgraphsqz,选项);
使用分类
命令对保留在一旁的信号进行分类。同样,使用可视化性能困惑的园林
.
预测=分类(trainedNet imdsTest);图;imdsTest confusionchart(预测。标签,“归一化”,“column-normalized”)
在输入到网络的8种调制类型中,99%以上的B-FM、CPFSK、GFSK、Barker、LFM调制类型被正确分类。平均而言,超过85%的调幅信号被正确识别。从混淆矩阵中可以看出,SSB-AM信号被误分类为sdb - am,而sdb - am信号又被误分类为SSB-AM。
让我们研究其中的一些错误分类,以深入了解网络的学习过程。使用readimage
函数从测试数据集中从每个类提取单个图像。显示的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找到(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] Brynolfsson, Johan和Maria Sandsten。利用卷积神经网络的维格纳-维尔分布对一维非平稳信号进行分类第25欧洲信号处理会议(EUSIPCO).IEEE,2017年。
[2]刘,小玉,迪宇杨和艾丽的Gamal。“用于调制分类的深度神经网络架构。”第51号信号,系统和计算机上的七零字会议.2017.
王超,王健,张旭东。基于时频分析和卷积神经网络的雷达波形自动识别IEEE国际会议声学,语音和信号处理(ICASSP).2017.