主要内容

基于深度学习的频谱感知识别5G和LTE信号

这个例子展示了如何使用深度学习训练一个语义分割网络进行频谱监测。频谱监测的用途之一是描述频谱占用情况。本例中的神经网络经过训练,可在宽带频谱图中识别5G NR和LTE信号。

简介

计算机视觉使用语义分割技术来识别图像或视频中的物体及其位置。在无线信号处理中,感兴趣的对象是无线信号,对象的位置是信号所占用的频率和时间。在本例中,我们将语义分割技术应用于无线信号,以识别宽带频谱图中的频谱内容。

在以下情况下,您将:

  1. 生成训练信号。

  2. 将迁移学习应用于语义分割网络,在时间和频率上识别5G NR和LTE信号。

  3. 用合成信号测试训练好的网络。

  4. 使用SDR测试OTA (over the air)信号的网络。

生成培训数据

无线信号在深度学习领域的一个优势是信号是合成的。此外,我们有高度可靠的信道和射频损伤模型。因此,您可以使用5G Toolbox™和LTE Toolbox™功能生成5G NR信号,而不是收集和手动标记信号。您可以将这些信号通过标准指定的信道模型来创建训练数据。

用只包含5G NR或LTE信号的帧训练网络,然后在感兴趣的频段内随机改变这些信号的频率。每帧长度为40毫秒,这是40个子帧的持续时间。组网假设5G NR或LTE信号在整个帧长占用相同频段。为了测试网络性能,请在感兴趣的频段内的不同随机频段上创建包含5G NR和LTE信号的帧。

使用61.44 MHz的采样率。这个速率足以处理大多数最新的标准信号,一些低成本的软件定义无线电(SDR)系统可以以这个速率采样,提供大约50 MHz的有用带宽。要监视更宽的频带,可以增加采样率,重新生成训练帧并重新训练网络。

使用helperSpecSenseTrainingData函数生成训练框架。生成5G NR信号helperSpecSenseNRSignal功能和LTE信号使用helperSpecSenseLTESignal函数。该表列出了5G NR可变信号参数。

5 g_nr_parameters.png

该表列出了LTE可变信号参数。

lte_parameters.PNG

使用nrCDLChannel(5 g工具箱)lteFadingChannel(LTE工具箱)功能添加通道损伤。通道配置的详细信息请参见helperSpecSenseTrainingData函数。该表列出了通道参数。

channel_parameters.PNG

helperSpecSenseTrainingData函数使用helperSpecSenseSpectrogramImage函数从复杂的基带信号创建频谱图图像。使用FFT长度4096计算频谱图。生成256 * 256的RGB图像。这个图像大小允许在训练过程中有足够大的图像批来适应内存,同时在时间和频率上提供足够的分辨率。如果您的GPU没有足够的内存,您可以将图像大小调整为较小的大小或减小训练批处理大小。

generateTrainData变量决定是下载训练数据还是生成训练数据。选择“使用下载的数据”将设置generateTrainData变量来.选择“生成训练数据”将设置generateTrainData变量来真正的从头开始生成训练数据。根据计算机的配置,生成数据可能需要几个小时。使用一台Intel®Xeon®W-2133 CPU @ 3.60GHz的PC,并使用并行计算工具箱™创建一个由6个工作人员组成的并行池,培训数据生成大约需要一个小时。选择“Train network now”对网络进行训练。对于同一台PC和NVIDIA®Titan V GPU,此过程大约需要20分钟。选择“使用训练过的网络”可跳过网络训练。相反,该示例下载经过训练的网络。

每组信号使用900帧:仅5G NR,仅LTE, 5G NR和LTE。如果你增加系统参数的可能值的数量,增加训练帧的数量。

imageSize = [256 256];%的像素sampleRate = 61.44e6;%赫兹numSubFrames = 40;%对应40 msframeDuration = numSubFrames*1e-3;%秒trainDir = fullfile(pwd,“TrainingData”);generateTrainData =;trainNow =如果~generateTrainData || ~trainNow helperspective sensedownloaddata ()结束
开始下载数据文件://www.ru-cchi.com/supportfiles/spc/SpectrumSensing/SpectrumSenseTrainingDataNetwork.tar.gz下载完成。提取文件。提取完成。
如果generateTrainData numFramesPerStandard = 900;helperSpecSenseTrainingData (numFramesPerStandard图象尺寸、trainDir numSubFrames, sampleRate);结束

负荷训练数据

使用imageDatastore加载5G NR和LTE信号频谱图的训练图像功能。的imageDatastore函数使您能够有效地从磁盘加载大量图像集合。谱图图像存储在。png文件中。

imds = imageDatastore(trainDir,“IncludeSubfolders”假的,“FileExtensions”“使用”);

使用pixelLabelDatastore(计算机视觉工具箱)函数加载光谱图像素标签图像数据。每个像素被标记为“NR”、“LTE”或“噪声”之一。像素标签数据存储将像素标签数据和标签ID封装到类名映射中。像素标签存储在。hdf文件中。

classNames = [“NR”“LTE”“噪音”];pixelLabelID = [127 255 0];pxdsTruth = pixelLabelDatastore(trainDir,classNames,pixelLabelID,...“IncludeSubfolders”假的,“FileExtensions”“.hdf”);

分析数据集统计信息

要查看训练数据集中类标签的分布,请使用countEachLabel(计算机视觉工具箱)函数按类标签计算像素数,并按类绘制像素计数。

tbl = countEachLabel(pxdsTruth);frequency = tbl.PixelCount/sum(tbl.PixelCount);图形栏(1:数字(classNames),频率)网格xticks(1:numel(classNames)) xticklabels(tb . name) xtickangle(45) ylabel(“频率”

图中包含一个轴对象。axis对象包含一个bar类型的对象。

理想情况下,所有类都有相同数量的观测值。然而,使用无线信号,训练集中的类通常是不平衡的。5G NR信号的带宽可能比LTE信号大,背景中充满噪声。由于学习倾向于优势类,每个类的观察数量不平衡可能不利于学习过程。在使用类加权来平衡类节中,类别加权用于减轻由于每个类别的观察数不平衡而引起的偏差。

准备训练、验证和测试集

深度神经网络使用数据集中80%的单个信号图像进行训练,20%的图像进行验证。的helperSpecSensePartitionData函数将图像和像素标签数据随机分割为训练集和验证集。

[imdsTrain,pxdsTrain,imdsVal,pxdsVal] = helperspective sensepartitiondata (imds,pxdsTruth,[80 20]);cdsTrain = combine(imdsTrain,pxdsTrain);cdsVal = combine(imdsVal,pxdsVal);应用转换将图像和像素标签数据调整为所需的大小%的大小。cdsTrain = transform(cdsTrain, @(data)preprocessTrainingData(data,imageSize));cdsVal = transform(cdsVal, @(data)preprocessTrainingData(data,imageSize));

训练深度神经网络

使用deeplabv3plusLayers(计算机视觉工具箱)函数来创建一个语义分割神经网络。选择resnet50(深度学习工具箱)作为基础网络,并指定输入图像的大小(用于表示时间和频率轴的像素数)和类的数量。如果深度学习工具箱™模型ResNet-50网络支持包未安装,则该函数在外接程序资源管理器中提供到所需支持包的链接。要安装支持包,请单击链接,然后单击安装.通过输入检查安装是否成功resnet50在命令行。如果安装了所需的支持包,则函数返回DAGNetwork(深度学习工具箱)对象。

baseNetwork =“resnet50”;lgraph = deeplabv3plusLayers(imageSize,numel(classNames),baseNetwork);

使用类加权来平衡类

当训练集中的类不平衡时,要改进训练,可以使用类加权来平衡类。方法计算的像素标签计数countEachLabel函数并计算中值频率类权重。

imageFreq = tbl。PixelCount ./ tb . imagepixelcount;classWeights = median(imageFreq) ./ imageFreq;

指定类的权重pixelClassificationLayer(计算机视觉工具箱)

pxLayer = pixelClassificationLayer(“名字”“标签”“类”资源描述。的名字,“ClassWeights”, classWeights);lgraph =替换层(lgraph,“分类”, pxLayer);

选择培训选项

使用trainingOptions(深度学习工具箱)函数指定了随机动量梯度下降(SGDM)优化算法和SGDM的超参数。要从网络获得最佳性能,可以使用实验管理器(深度学习工具箱)优化培训方案。

opts = trainingOptions(“个”...MiniBatchSize = 40,...MaxEpochs = 20,...LearnRateSchedule =“分段”...InitialLearnRate = 0.02,...learnratdropperiod = 10,...learnratdropfactor = 0.1,...ValidationData = cdsVal,...ValidationPatience = 5,...洗牌=“every-epoch”...OutputNetwork =“best-validation-loss”...情节=“训练进步”
opts = TrainingOptionsSGDM与属性:动量:0.9000 InitialLearnRate: 0.0200 LearnRateSchedule: 'piecewise' LearnRateDropFactor: 0.1000 LearnRateDropPeriod: 10 L2Regularization: 1.0000e-04 GradientThresholdMethod: 'l2norm' GradientThreshold: Inf MaxEpochs: 20 MiniBatchSize: 40 Verbose: 1 VerboseFrequency: 50 ValidationData: [1×1 matlab.io.datastore. datastore.]transformdatastore] ValidationFrequency: 50 ValidationPatience: 5 Shuffle: '每个纪元' CheckpointPath: " CheckpointFrequency: 1 CheckpointFrequencyUnit: 'epoch' ExecutionEnvironment: 'auto' WorkerLoad: [] OutputFcn: [] Plots: 'training-progress' SequenceLength: 'longest' SequencePaddingValue: 0 SequencePaddingDirection: 'right' DispatchInBackground: 0 ResetInputNormalization: 1 BatchNormalizationStatistics: 'population' OutputNetwork: '最佳验证-损失'

使用联合训练数据存储训练网络,cdsTrain.组合训练数据存储包含单个信号帧和真实像素标签。

如果trainNow [net,trainInfo] = trainNetwork(cdsTrain,lgraph,opts);% #好< UNRCH >其他的负载specSenseTrainedNet结束

合成信号测试

使用包含5G NR和LTE信号的信号测试网络信号识别性能。使用semanticseg(计算机视觉工具箱)函数获取测试数据集中光谱图图像的像素估计。使用evaluateSemanticSegmentation(计算机视觉工具箱)函数来计算各种度量来评估语义分割结果的质量。

dataDir = fullfile(trainDir,“LTE_NR”);imds = imageDatastore(dataDir,“IncludeSubfolders”假的,“FileExtensions”“使用”);pxdsResults = semanticseg(imds,net,“WriteLocation”, tempdir);
运行的语义分割网络  ------------------------------------- * 900张图片处理。
pxdsTruth = pixelLabelDatastore(dataDir,classNames,pixelLabelID,...“IncludeSubfolders”假的,“FileExtensions”“.hdf”);metrics = evaluateSemanticSegmentation(pxdsResults,pxdsTruth);
评估语义分割结果---------------------------------------- *选择的指标:全局精度,类别精度,IoU,加权IoU, BF分数。*处理了900张图像。*完成……完成了。*数据集指标:GlobalAccuracy MeanAccuracy MeanIoU WeightedIoU MeanBFScore  ______________ ____________ _______ ___________ ___________ 0.88609 0.87117 0.79066 0.79601 0.65623

绘制所有测试帧的标准化混淆矩阵。

cm = confusionchart(metrics.ConfusionMatrix.Variables,...一会,正常化=“row-normalized”);厘米。Title =“标准化混淆矩阵”

图包含一个confusimatrixchart类型的对象。ConfusionMatrixChart类型的图表标题为归一化混淆矩阵。

绘制每个图像的交集与联合(IoU)的直方图。对于每个类,IoU是该类中正确分类的像素与基本真相和预测像素总数的比值。

imageIoU = metrics.ImageMetrics.MeanIoU;图直方图(imageIoU)网格包含(“借据”) ylabel (“帧数”)标题(“借条”

图中包含一个轴对象。标题为Frame Mean IoU的axis对象包含一个类型为直方图的对象。

检测低信噪比帧表明,光谱图图像不包含可以帮助网络正确识别低信噪比帧的视觉特征。重复相同的过程,只考虑平均信噪比为50dB或100dB的帧,忽略平均信噪比为40dB的帧。

files = dir(fullfile(dataDir, dataDir)‘* .mat‘));dataFiles = {};labelFiles = {};p = 1:元素个数(文件)负载(fullfile(文件(p) .folder文件(p) . name),“参数”);如果参数个数。SNRdB > 40 [~,name] = fileparts(files(p).name);dataFiles = [dataFiles;fullfile(文件(p) .folder,名字“使用”)));% #好< AGROW >labelFiles = [labelFiles;fullfile(文件(p) .folder,名字“.hdf”)));% #好< AGROW >结束结束imds = imageDatastore(dataFiles);pxdsResults = semanticseg(imds,net,“WriteLocation”, tempdir);
运行的语义分割网络  ------------------------------------- * 608张图片处理。
pxdsTruth = pixelLabelDatastore(labelFiles,classNames,pixelLabelID);metrics = evaluateSemanticSegmentation(pxdsResults,pxdsTruth);
评估语义分割结果---------------------------------------- *选择的指标:全局精度,类别精度,IoU,加权IoU, BF分数。*处理608张图像。*完成……完成了。*数据集指标:GlobalAccuracy MeanAccuracy MeanIoU WeightedIoU MeanBFScore  ______________ ____________ _______ ___________ ___________ 0.94487 0.94503 0.89799 0.89582 0.74699

仅考虑信噪比较高的帧集,重新绘制归一化混淆矩阵,观察网络精度的提高。

cm = confusionchart(metrics.ConfusionMatrix.Variables,...一会,正常化=“row-normalized”);厘米。Title =“标准化混淆矩阵”

图包含一个confusimatrixchart类型的对象。ConfusionMatrixChart类型的图表标题为归一化混淆矩阵。

仅考虑信噪比较高的帧集,重新绘制逐图欠条直方图,观察改善后的分布情况。

imageIoU = metrics.ImageMetrics.MeanIoU;图直方图(imageIoU)网格包含(“借据”) ylabel (“帧数”)标题(“借条”

图中包含一个轴对象。标题为Frame Mean IoU的axis对象包含一个类型为直方图的对象。

在频谱图中识别5G NR和LTE信号

为索引为602的图像可视化接收到的光谱、真实标签和预测标签。

imgIdx = 602;rcvdSpectrogram = readimage(imds,imgIdx);trueLabels = readimage(pxdsTruth,imgIdx);predictedLabels = readimage(pxdsResults,imgIdx);图helperSpecSenseDisplayResults (rcvdSpectrogram trueLabels predictedLabels,...一会,sampleRate 0 frameDuration)

图中包含3个轴对象。标题为“接收光谱图”的坐标轴对象1包含一个图像类型的对象。带有True信号标签的Axes对象2包含一个image类型的对象。标题为Estimated signal labels的坐标轴对象3包含一个image类型的对象。

图helperSpecSenseDisplayIdentifiedSignals (rcvdSpectrogram predictedLabels,...一会,sampleRate 0 frameDuration)

图中包含一个轴对象。标题为Labeled spectrogram的坐标轴对象包含一个图像类型的对象。

用空中信号测试

使用空中信号捕获测试训练网络的性能。找一个附近的基站,调整无线电的中心频率,以覆盖你想识别的信号波段。本例将中心频率设置为2.35 GHz。如果您至少有一台ADALM-PLUTO无线电并已安装ADALM-PLUTO无线电通信工具箱支持包,您可以运行这段代码。如果您没有访问ADALM-PLUTO无线电,这个示例显示了使用捕获信号进行测试的结果。

runSDRSection = false;如果helperIsPlutoSDRInstalled()收音机= findPlutoRadio();如果长度(收音机)>= 1 runSDRSection = true;其他的disp (“至少需要一台ADALM-PLUTO无线电。跳过SDR测试。”结束其他的disp ("没有找到模拟设备ADALM-PLUTO无线电的通信工具箱支持包。") disp (单击MATLAB工具条的“主页”选项卡中的“加载项”以安装支持包。) disp (“跳过SDR测试。”结束
模拟设备ADALM-PLUTO无线电通信工具箱支持包未找到。
单击MATLAB工具条的Home选项卡中的Add-Ons安装支持包。
跳过SDR测试。
如果runSDRSection设置PlutoSDR接收器Rx = sdrrx(“冥王星”);rx。CenterFrequency = 2.35e9;rx。BasebandSampleRate = sampleRate;rx。SamplesPerFrame = frameDuration*rx.BasebandSampleRate;rx。OutputDataType =“单一”;rx。EnableBurstMode = true;rx。NumFramesInBurst = 1;Nfft = 4096;重叠= 10;meanAllScores = 0 ([imageSize numel(classNames)]);sults = 0 ([imageSize 10]);frameCnt=1:10 rxWave = rx();rxSpectrogram = helperspective sensespectrogramimage (rxWave,Nfft,sampleRate,imageSize);[segResults(:,:,frameCnt),scores,allScores] = semanticseg(rxSpectrogram,net);meanAllScores = (meanAllScores*(frameCnt-1) + allScores) / frameCnt;结束release(rx) [~,predictedLabels] = max(meanAllScores,[],3);图helperSpecSenseDisplayResults ([], rxSpectrogram predictedLabels,一会,...sampleRate,rx.CenterFrequency,frameDuration) figure freqBand = helperspective sensedisplayidentifiedsignals (rxSpectrogram,predictedLabels,...一会,sampleRate rx.CenterFrequency frameDuration)其他的图imshow (“lte_capture_result1.png”)图imshow(“lte_capture_result2.png”)图imshow(“nr_capture_result1.png”)图imshow(“nr_capture_result2.png”结束

图中包含一个轴对象。axis对象包含一个image类型的对象。

图中包含一个轴对象。axis对象包含一个image类型的对象。

图中包含一个轴对象。axis对象包含一个image类型的对象。

图中包含一个轴对象。axis对象包含一个image类型的对象。

结论与进一步探索

经过训练的网络可以区分5G NR和LTE信号,包括来自真实基站的两个示例捕获。网络可能无法正确识别每个捕获的信号。在这种情况下,可以通过生成更有代表性的合成信号或捕获空中信号并将其包含在训练集中来增强训练数据。

您可以使用LTECell搜索,MIB和SIB1恢复(LTE工具箱)NR Cell搜索、MIB和SIB1恢复(5 g工具箱)例如,手动识别LTE和5G NR基站以分别捕获训练数据。

如果您需要监控更宽的频谱带,请增加sampleRate,重新生成训练数据并重新训练网络。

支持功能

函数数据= preprocessTrainingData(数据,imageSize)调整训练图像和相关像素标签图像的大小。数据{1}= imresize(数据{1},imageSize);数据{2}= imresize(数据{2},imageSize);结束

另请参阅

(深度学习工具箱)|(深度学习工具箱)|(深度学习工具箱)|(深度学习工具箱)|(深度学习工具箱)|(计算机视觉工具箱)|(计算机视觉工具箱)|(计算机视觉工具箱)

相关的话题

Baidu
map