用于雷达和无线通信的深度学习频谱感知
该示例演示了如何使用合成雷达和无线通信信号训练的语义分割神经网络进行频谱感知。经过训练的神经网络可以识别出现在同一接收频谱中的雷达和无线通信信号。此外,网络还可以识别接收到的信号所占用的带宽。
简介
由于对更高的速度和更大的覆盖范围的需求不断增加,现代无线通信系统正在向更高的频段和更大的信号带宽发展。这些较高的频带在雷达系统传统上使用的范围内。因此,雷达系统和无线通信系统的频谱可能会重叠,这就需要频谱共享。这就要求未来的雷达和无线通信系统包括频谱感知,以探测被占用的空间,以避免冲突。这个例子展示了如何为一个频谱感知系统建模。我们首先合成一个由雷达和无线通信信号组成的数据集。这些数据被用来训练和测试一个深度学习网络。然后用训练过的网络来识别这些信号以及这些信号所占用的相应带宽。
设置场景
考虑位于场景原点的机场监视雷达。雷达工作在2.8 GHz,使用增益32.8 dB的反射器天线。发射功率设置为25千瓦。
%设置波形fc = 2.8 e9;%中心频率[Hz]fs = 61.44 e6;%采样频率[Hz]脉冲重复频率= fs /装天花板(fs / 1050);脉冲重复率% [Hz]脉冲宽度= 1 e-06;% pulsewdith [s]Wav =阶段性的。RectangularWaveform (“SampleRate”fs,“脉冲宽度”脉冲宽度,脉冲重复频率的脉冲重复频率,“NumPulses”3);%安装天线rad = 2.5;%半径[m]flen = 2.5;%焦距[m]antele =设计(reflectorParabolic (“激励”角),fc);antele.Exciter.Tilt = 90;antele.Exciter。TiltAxis=[0 1 0];antele.Tilt = 90;antele。TiltAxis=[0 1 0];antele.Radius = rad;antele.FocalLength = flen;蚂蚁=分阶段。ConformalArray(“元素”, antele);%设置发射机和接收器power_ASR = 25000;%发射功率[W]gain_ASR = 32.8;%发射增益[dB]Radartx =阶段性。发射机(“PeakPower”power_ASR,“获得”, gain_ASR);
由于5G和LTE信号出现在机场雷达附近,我们使用5G工具箱和LTE工具箱为这些无线标准定义了一组信号。关于如何生成这些类型信号的详细信息,请参考示例“用深度学习识别5G和LTE信号的频谱感知”。
对于无线信号,发射机的增益和功率可能随帧而变化。假设接收器随机放置在2千米x 2千米的区域内,并配备各向同性天线。
rxpos_horiz_minmax = (-1000 - 1000);rxpos_vert_minmax = [0 2000];
该区域还包含许多散射体,这使得在传播通道中操作更具挑战性。在这个例子中,我们假设信道包含30个散射体,随机分布在区域内。你可以使用阶段性的。ScatteringMIMOChannel模拟散射体。
%确定雷达位置Radartxpos =[0 0 15]';radartxaxes = rotz (0);radarchan =分阶段。ScatteringMIMOChannel (“TransmitArray”蚂蚁,...“ReceiveArray”,分阶段。ConformalArray (“元素”phased.IsotropicAntennaElement),...“CarrierFrequency”足球俱乐部,...“SpecifyAtmosphere”,真的,...“SampleRate”fs,...“SimulateDirectPath”假的,...“MaximumDelaySource”,“属性”,...“MaximumDelay”, 1...“TransmitArrayMotionSource”,“属性”,...“TransmitArrayPosition”radartxpos,...“TransmitArrayOrientationAxes”radartxaxes,...“ReceiveArrayMotionSource”,输入端口的,...“ScattererSpecificationSource”,输入端口的);定义无线发射机位置。Commtxpos =[200 0 450]';commtxaxes = rotz (0);commchan =分阶段。ScatteringMIMOChannel (“TransmitArray”,分阶段。ConformalArray (“锥”10),...“ReceiveArray”,分阶段。ConformalArray (“元素”phased.IsotropicAntennaElement),...“CarrierFrequency”足球俱乐部,...“SpecifyAtmosphere”,真的,...“SampleRate”fs,...“SimulateDirectPath”假的,...“MaximumDelaySource”,“属性”,...“MaximumDelay”, 1...“TransmitArrayMotionSource”,“属性”,...“TransmitArrayPosition”commtxpos,...“TransmitArrayOrientationAxes”commtxaxes,...“ReceiveArrayMotionSource”,输入端口的,...“ScattererSpecificationSource”,输入端口的);
生成培训数据
为了生成训练数据,需要为仅噪声数据、LTE数据、5G NR数据和雷达数据定义数据文件夹和类名。因为我们正在寻找波形类型和占用的带宽,下面的辅助函数生成一个谱图。
%生成的数据数numTrainingData = 500;图象尺寸= (256 - 256);%定义数据目录classNames = [“噪音”“LTE”“NR”“雷达”];pixelLabelID = [0 1 2 3];usedownloadddataset = true;saveFolder = tempdir;trainingFolder = fullfile (saveFolder,“RadarCommTrainData”);如果~ useDownloadedDataSet%生成数据helperGenerateRadarCommData (fs, wav, radartx、radarchan commchan, rxpos_horiz_minmax, rxpos_vert_minmax, numTrainingData, trainingFolder,图象尺寸);其他的dataURL =“https://ssd.mathworks.com/supportfiles/phased/data/RadarCommSpectrumSensingData.zip”;zipFile = fullfile(saveFolder,“RadarCommSpectrumSensingData.zip”);如果~存在(zipFile“文件”) websave (zipFile dataURL);解压缩数据解压缩(zipFile saveFolder)结束结束
负荷训练数据
使用imageDatastore
功能加载训练图像与雷达和无线通信信号的光谱图。的imageDatastore
函数使您能够有效地从磁盘加载大量图像集合。谱图图像存储在。png文件中。
%的数据trainingFolder = fullfile(saveFolder,“RadarCommTrainData”);imds = imageDatastore(trainingFolder,“IncludeSubfolders”假的,“FileExtensions”,“使用”);
要标记每个信号所占用的带宽,请使用pixelLabelDatastore
(计算机视觉工具箱)函数加载谱图像素标签图像数据。光谱图图像中的每个像素都被标记为“雷达”、“NR”、“LTE”或“噪声”类别之一。像素标签数据存储将像素标签数据和标签ID封装到一个类名映射中。像素标签存储在.hdf文件中。
%的标签pxdsTruth = trainingFolder,classNames,pixelLabelID,...“IncludeSubfolders”假的,“FileExtensions”,“.hdf”);
分析数据集统计信息
要查看训练数据集中类标签的分布,请使用countEachLabel
(计算机视觉工具箱)函数按类标签计算像素数,并按类绘制像素计数。
tbl = countEachLabel(pxdsTruth);frequency = tbl.PixelCount/sum(tbl.PixelCount);图酒吧(1:元素个数(类名),频率)
警告:通过切换到OpenGL软件,MATLAB已经禁用了一些高级图形渲染功能。更多信息,点击here。
网格在xticks(1:numel(classNames)) xticklabels(tbl.Name) xtickangle(45) ylabel(“频率”)
准备培训、验证和测试集
深度神经网络使用数据集中80%的单一信号图像进行训练,20%的图像进行验证。的helperSpecSensePartitionData
函数将图像和像素标签数据随机分为训练集和验证集。
[imdsTrain,pxdsTrain,imdsVal,pxdsVal] = helperRadarCommPartitionData(imds,pxdsTruth,[80 20]);cdsTrain = pixelLabelImageDatastore(imdsTrain,pxdsTrain,“OutputSize”、图象尺寸);cdsVal = pixelLabelImageDatastore(imdsVal,pxdsVal,“OutputSize”、图象尺寸);
训练深度神经网络
使用deeplabv3plusLayers
(计算机视觉工具箱)函数创建一个语义分割神经网络。选择resnet50
(深度学习工具箱)作为基础网络,并指定输入图像大小(用于表示时间和频率轴的像素数)和类的数量。如果深度学习工具箱™模型ResNet-50网络support包未安装,则该功能将在Add-On资源管理器中提供到所需支持包的链接。如果需要安装支持包,请单击链接,然后单击安装.输入命令检查安装是否成功resnet50
在命令行。如果安装了所需的支持包,则函数返回一个DAGNetwork
(深度学习工具箱)对象。
baseNetwork =“resnet50”;lgraph = deeplabv3plusLayers(imageSize,numel(classNames),baseNetwork);
使用类加权平衡类
当训练集中的类不平衡时,要改进训练,可以使用类权重来平衡类。方法计算的像素标签计数countEachLabel
函数并计算中值频率类权重。
imageFreq = tbl。像素计数。/ tbl.ImagePixelCount;classWeights = median(imageFreq) ./ imageFreq;
参数指定类的权重pixelClassificationLayer
(计算机视觉工具箱).
pxLayer = pixelClassificationLayer(“名字”,“标签”,“类”资源描述。的名字,“ClassWeights”, classWeights);lgraph = replaceLayer(lgraph,“分类”, pxLayer);
选择培训项目
配置培训使用trainingOptions
(深度学习工具箱)函数指定了随机动量梯度下降(SGDM)优化算法以及SGDM所使用的超参数。要从网络获得最佳性能,可以使用实验管理器(深度学习工具箱)优化培训选项。
opts =训练选项(“个”,...MiniBatchSize = 40,...MaxEpochs = 40,...LearnRateSchedule =“分段”,...初始化学习率= 0.02,...learnratdropperiod = 10,...learnratdropfactor = 0.1,...ValidationData = cdsVal,...ValidationPatience = 5,...洗牌=“every-epoch”,...情节=“训练进步”,...ExecutionEnvironment =“汽车”);
使用组合训练数据存储训练网络,cdsTrain
.组合训练数据存储包含单信号帧和真像素标签。下图显示了一个训练进度的例子。
如果你想训练网络,设置trainNow
来真正的
.否则,示例将加载预先训练的网络。
trainNow = false;如果trainNow [net,trainInfo] = trainNetwork(cdsTrain,lgraph,opts);% #好< UNRCH >其他的负载(fullfile (saveFolder“helperRadarCommTrainedNet.mat”),“净”);结束
合成信号测试
测试包含5G NR、LTE和雷达信号的网络信号识别性能。使用semanticseg
(计算机视觉工具箱)函数获取测试数据集中光谱图图像的像素估计。使用evaluateSemanticSegmentation
(计算机视觉工具箱)函数计算各种度量来评估语义分割结果的质量。
%生成测试数据numTestData = 100;testFolder = fullfile(saveFolder,“RadarCommTestData”);如果~ useDownloadedDataSet helperGenerateRadarCommData (fs, wav, radartx、radarchan commchan, rxpos_horiz_minmax, rxpos_vert_minmax, numTestData, testFolder,图象尺寸);结束
准备和测试测试数据。imds = imageDatastore(testFolder,“IncludeSubfolders”假的,“FileExtensions”,“使用”);pxdsResults = semantiseg (imds,net,“WriteLocation”saveFolder,“ExecutionEnvironment”,“汽车”);
运行的语义分割网络 ------------------------------------- * 588张图片处理。
准备地面真相测试标签。pxdsTruth = pixelLabelDatastore(testFolder,classNames,pixelLabelID,...“IncludeSubfolders”假的,“FileExtensions”,“.hdf”);metrics = evaluateSemanticSegmentation(pxdsResults,pxdsTruth);
评估语义分割结果---------------------------------------- *选择的指标:全局精度、类精度、IoU、加权IoU、BF评分。*处理了588张图像。*完成……完成了。*数据集指标:GlobalAccuracy MeanAccuracy MeanIoU WeightedIoU MeanBFScore ______________ ____________ _______ ___________ ___________ 0.9035 0.91356 0.73372 0.83048南
绘制所有测试帧的归一化混淆矩阵。
cm = confusionchart(metrics.ConfusionMatrix.Variables,...一会,正常化=“row-normalized”);厘米。Title =“标准化混淆矩阵”;
绘制每张图像交集/并集(IoU)的直方图。对于每个类,IoU是正确分类的像素与该类中ground truth和预测像素总数的比值。
imageIoU = metrics.ImageMetrics.MeanIoU;图直方图(imageIoU)网格在包含(“借据”) ylabel ('帧数')标题(“帧即欠条”)
在光谱图中识别雷达、5G NR和LTE信号
可视化索引为142的图像的接收光谱、真实标签和预测标签。我们可以看到,网络从无线通信信号中正确地识别出了雷达信号。
imgIdx = 142;rcvdSpectrogram = readimage(imds,imgIdx);trueLabels = readimage(pxdsTruth,imgIdx);predictedLabels = readimage(pxdsResults,imgIdx);图helperSpecSenseDisplayResults (rcvdSpectrogram trueLabels predictedLabels,...一会,fs, 0,1 /脉冲重复频率)
结论
经过训练的网络能够区分雷达和无线通信信号。网络可能无法正确识别每一个捕获的信号。在这种情况下,可以通过生成更有代表性的合成信号或捕获空中信号来增强训练数据,并将这些信号包含在训练集中。