В этом примере показано, как обучить сеть семантической сегментации использование глубокого обучения для контроля спектра. Одно из использования контроля спектра должно охарактеризовать заполнение спектра. Нейронная сеть в этом примере обучена, чтобы идентифицировать 5G NR и сигналы LTE в широкополосной спектрограмме.
Компьютерное зрение использует метод семантической сегментации, чтобы идентифицировать объекты и их местоположения в изображении или видео. В беспроводной обработке сигналов предметы интереса являются беспроводными сигналами, и местоположения объектов являются частотой и время, занятое сигналами. В этом примере мы применяем метод семантической сегментации к беспроводным сигналам идентифицировать спектральное содержимое в широкополосной спектрограмме.
В следующем вы будете:
Сгенерируйте учебные сигналы.
Примените передачу обучения к сети семантической сегментации, чтобы идентифицировать 5G NR и сигналы LTE вовремя и частота.
Протестируйте обучивший сеть с синтетическими сигналами.
Используйте SDR, чтобы протестировать сеть с сигналами по воздуху (OTA).
Одним преимуществом беспроводных сигналов в области глубокого обучения является то, что сигналы синтезируются. Кроме того, у нас есть высоконадежный канал и модели ухудшения RF. В результате вместо того, чтобы собраться и вручную пометить сигналы, можно сгенерировать 5G сигналы NR с помощью 5G Toolbox™ и сигналов LTE с помощью функций LTE Toolbox™. Можно передать эти сигналы через заданные стандартами модели канала, чтобы создать обучающие данные.
Обучите сеть с системами координат, которые содержат только 5G NR или сигналы LTE и затем переключают эти сигналы в частоте случайным образом в полосе интереса. Каждая система координат 40 мс длиной, который является длительностью 40 подкадров. Сеть принимает, что 5G NR или сигнал LTE занимает ту же полосу на целое время системы координат. Чтобы проверить производительность сети, создайте системы координат, которые содержат и 5G NR и сигналы LTE на отличных случайных полосах в полосе интереса.
Используйте частоту дискретизации 61,44 МГц. Этот уровень достаточно высок, чтобы обработать большинство последних стандартных сигналов, и несколько недорогих систем программно определяемого радио (SDR) могут произвести на этом уровне, обеспечивающем приблизительно 50 МГц полезной полосы пропускания. Чтобы контролировать более широкую полосу, можно увеличить частоту дискретизации, регенерировать учебные системы координат и переобучить сеть.
Используйте helperSpecSenseTrainingData
функция, чтобы сгенерировать учебные системы координат. Эта функция генерирует 5G сигналы NR с помощью helperSpecSenseNRSignal
функция и сигналы LTE с помощью helperSpecSenseLTESignal
функция. Эта таблица приводит параметры сигнала переменной NR 5G.
Эта таблица приводит параметры сигнала переменной LTE.
Используйте nrCDLChannel
(5G Toolbox) и lteFadingChannel
(LTE Toolbox) функционирует, чтобы добавить ухудшения канала. Для получения дополнительной информации настроек канала, смотрите helperSpecSenseTrainingData
функция. Эта таблица приводит параметры канала.
helperSpecSenseTrainingData
функционируйте использует helperSpecSenseSpectrogramImage
функция, чтобы создать изображения спектрограммы из комплексных сгенерированных модулированных сигналов. Вычислите спектрограммы с помощью длины БПФ 4 096. Сгенерируйте 256 256 изображениями RGB. Этот Размер изображения позволяет достаточно большому пакету изображений умещаться в памяти во время обучения при обеспечении достаточного количества разрешения вовремя и частоты. Если ваш графический процессор не имеет достаточной памяти, можно изменить размер изображений к меньшим размерам или уменьшать учебный пакетный размер.
generateTrainData
переменная определяет, должны ли обучающие данные быть загружены или сгенерированы. Выбор "Use downloaded data" устанавливает generateTrainData
переменная к false
. Выбор "Generate training data" устанавливает generateTrainData
переменная к true
сгенерировать обучающие данные с нуля. Генерация данных может занять несколько часов в зависимости от настройки вашего компьютера. Используя PC с центральным процессором Intel® Xeon® W-2133 3.60 ГГц и созданием параллельного пула с шестью рабочими с Parallel Computing Toolbox, генерация обучающих данных занимает приблизительно час. Выберите "Train network now", чтобы обучить сеть. Этот процесс занимает приблизительно 20 минут с тем же PC и NVIDIA® Titan V графический процессор. Выберите "Use trained network", чтобы пропустить сетевое обучение. Вместо этого пример загружает обучивший сеть.
Используйте 900 систем координат от каждого набора сигналов: 5G NR только, LTE только и 5G NR и LTE оба. Если вы увеличиваете число возможных значений для системных параметров, увеличиваете число учебных систем координат.
imageSize = [256 256]; % pixels sampleRate = 61.44e6; % Hz numSubFrames = 40; % corresponds to 40 ms frameDuration = numSubFrames*1e-3; % seconds trainDir = fullfile(pwd,'TrainingData'); generateTrainData = false; trainNow = false; if ~generateTrainData || ~trainNow helperSpecSenseDownloadData () end
Starting download of data files from: https://www.mathworks.com/supportfiles/spc/SpectrumSensing/SpectrumSenseTrainingDataNetwork.tar.gz Download complete. Extracting files. Extract complete.
if generateTrainData numFramesPerStandard = 900; helperSpecSenseTrainingData(numFramesPerStandard,imageSize,trainDir,numSubFrames,sampleRate); end
Используйте imageDatastore
функционируйте, чтобы загрузить учебные изображения со спектрограммой 5G сигналы LTE и NR. imageDatastore
функция позволяет вам эффективно загрузить большое количество изображений от диска. Изображения спектрограммы хранятся в .png файлах.
imds = imageDatastore(trainDir,'IncludeSubfolders',false,'FileExtensions','.png');
Используйте pixelLabelDatastore
(Computer Vision Toolbox) функция, чтобы загрузить пиксель спектрограммы помечает данные изображения. Каждый пиксель помечен как один из "NR", "LTE" или "Шума". PixelLabelDatastore инкапсулирует данные метки пикселя и идентификатор метки в сопоставление имен классов. Пиксельные метки хранятся в .hdf файлах.
classNames = ["NR" "LTE" "Noise"]; pixelLabelID = [127 255 0]; pxdsTruth = pixelLabelDatastore(trainDir,classNames,pixelLabelID,... 'IncludeSubfolders',false,'FileExtensions','.hdf');
Чтобы видеть распределение меток класса в обучающем наборе данных, используйте countEachLabel
(Computer Vision Toolbox) функция, чтобы считать количество пикселей меткой класса и построить пиксельные количества по классу.
tbl = countEachLabel(pxdsTruth); frequency = tbl.PixelCount/sum(tbl.PixelCount); figure bar(1:numel(classNames),frequency) grid on xticks(1:numel(classNames)) xticklabels(tbl.Name) xtickangle(45) ylabel('Frequency')
Идеально, все классы имели бы равное количество наблюдений. Однако с беспроводными сигналами классам в наборе обучающих данных свойственно быть неустойчивым. 5G сигналы NR могут иметь большую полосу пропускания, чем сигналы LTE и шум, заполняет фон. Поскольку изучение смещается в пользу доминирующих классов, неустойчивость в количестве наблюдений в классе может быть вредна для процесса обучения. В разделе Balance Classes Using Class Weighting взвешивание класса используется, чтобы смягчить смещение, вызванное неустойчивостью в количестве наблюдений в классе.
Глубокая нейронная сеть использует 80% одного изображений сигнала от набора данных для обучения и, 20% изображений для валидации. helperSpecSensePartitionData
функционируйте случайным образом разделяет изображение и данные о пиксельных метках в наборы обучения и валидации.
[imdsTrain,pxdsTrain,imdsVal,pxdsVal] = helperSpecSensePartitionData(imds,pxdsTruth,[80 20]); cdsTrain = pixelLabelImageDatastore(imdsTrain,pxdsTrain,'OutputSize',imageSize); cdsVal = pixelLabelImageDatastore(imdsVal,pxdsVal,'OutputSize',imageSize);
Используйте deeplabv3plusLayers
(Computer Vision Toolbox) функция, чтобы создать нейронную сеть семантической сегментации. Выберите resnet50
как основная сеть и задают входной размер изображения (количество пикселей раньше представляло время и оси частоты), и количество классов. Если Модель Deep Learning Toolbox™ для пакета Сетевой поддержки ResNet-50 не установлена, то функция обеспечивает ссылку на необходимый пакет поддержки в Add-On Explorer. Чтобы установить пакет поддержки, щелкните по ссылке, и затем нажмите Install. Проверяйте, что установка успешна путем ввода resnet50
в командной строке. Если необходимый пакет поддержки установлен, то функция возвращает DAGNetwork
объект.
baseNetwork = 'resnet50';
lgraph = deeplabv3plusLayers (imageSize, numel (имена классов), baseNetwork);
Чтобы улучшить обучение, когда классы в наборе обучающих данных не сбалансированы, можно использовать взвешивание класса, чтобы сбалансировать классы. Используйте пиксельные количества метки, вычисленные ранее с countEachLabel
функционируйте и вычислите веса класса медианной частоты.
imageFreq = tbl.PixelCount ./ tbl.ImagePixelCount; classWeights = median(imageFreq) ./ imageFreq;
Задайте веса класса с помощью pixelClassificationLayer
(Computer Vision Toolbox).
pxLayer = pixelClassificationLayer('Name','labels','Classes',tbl.Name,'ClassWeights',classWeights); lgraph = replaceLayer(lgraph,"classification",pxLayer);
Сконфигурируйте обучение с помощью trainingOptions
функция, чтобы задать стохастический градиентный спуск с импульсом (SGDM) алгоритм оптимизации и гиперпараметры, используемые для SGDM. Чтобы получить лучшую эффективность от сети, можно использовать Experiment Manager, чтобы оптимизировать опции обучения.
opts = trainingOptions("sgdm",... MiniBatchSize = 40,... MaxEpochs = 20, ... LearnRateSchedule = "piecewise",... InitialLearnRate = 0.02,... LearnRateDropPeriod = 10,... LearnRateDropFactor = 0.1,... ValidationData = cdsVal,... ValidationPatience = 5,... Shuffle="every-epoch",... OutputNetwork = "best-validation-loss",... Plots = 'training-progress')
opts = TrainingOptionsSGDM with properties: Momentum: 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 pixelLabelImageDatastore] ValidationFrequency: 50 ValidationPatience: 5 Shuffle: 'every-epoch' CheckpointPath: '' ExecutionEnvironment: 'auto' WorkerLoad: [] OutputFcn: [] Plots: 'training-progress' SequenceLength: 'longest' SequencePaddingValue: 0 SequencePaddingDirection: 'right' DispatchInBackground: 0 ResetInputNormalization: 1 BatchNormalizationStatistics: 'population' OutputNetwork: 'best-validation-loss'
Обучите сеть с помощью объединенного хранилища обучающих данных, cdsTrain.
Объединенное хранилище обучающих данных содержит одну системы координат сигнала и истинные пиксельные метки.
if trainNow [net,trainInfo] = trainNetwork(cdsTrain,lgraph,opts); %#ok<UNRCH> else load specSenseTrainedNet net end
Проверьте сетевую идентификационную производительность сигнала с помощью сигналов, которые содержат и 5G NR и сигналы LTE. Используйте semanticseg
(Computer Vision Toolbox) функция, чтобы получить пиксельные оценки спектрограммы отображает в наборе тестовых данных. Используйте evaluateSemanticSegmentation
(Computer Vision Toolbox) функция, чтобы вычислить различные метрики, чтобы оценить качество результатов семантической сегментации.
dataDir = fullfile(trainDir,'LTE_NR'); imds = imageDatastore(dataDir,'IncludeSubfolders',false,'FileExtensions','.png'); pxdsResults = semanticseg(imds,net,"WriteLocation",tempdir);
Running semantic segmentation network ------------------------------------- * Processed 900 images.
pxdsTruth = pixelLabelDatastore(dataDir,classNames,pixelLabelID,... 'IncludeSubfolders',false,'FileExtensions','.hdf'); metrics = evaluateSemanticSegmentation(pxdsResults,pxdsTruth);
Evaluating semantic segmentation results ---------------------------------------- * Selected metrics: global accuracy, class accuracy, IoU, weighted IoU, BF score. * Processed 900 images. * Finalizing... Done. * Data set metrics: GlobalAccuracy MeanAccuracy MeanIoU WeightedIoU MeanBFScore ______________ ____________ _______ ___________ ___________ 0.88609 0.87117 0.79066 0.79601 0.65624
Постройте нормированную матрицу беспорядка для всех тестовых систем координат как карта тепла.
normConfMatData = metrics.NormalizedConfusionMatrix.Variables; figure h = heatmap(classNames,classNames,100*normConfMatData); h.XLabel = 'Predicted Class'; h.YLabel = 'True Class'; h.Title = 'Normalized Confusion Matrix (%)';
Постройте гистограмму пересечения по объединению (IoU) на изображение. Для каждого класса IoU является отношением правильно классифицированных пикселей к общему количеству основной истины и предсказанных пикселей в том классе.
imageIoU = metrics.ImageMetrics.MeanIoU; figure histogram(imageIoU) grid on xlabel('IoU') ylabel('Number of Frames') title('Frame Mean IoU')
Осмотр низких систем координат ОСШ показывает, что изображения спектрограммы не содержат визуальные функции, которые могут помочь сети идентифицировать низкие системы координат ОСШ правильно. Повторите тот же процесс, рассмотрев только системы координат со средним ОСШ 50 дБ или 100 дБ и игнорируя системы координат со средним ОСШ 40 дБ.
files = dir(fullfile(dataDir,'*.mat')); dataFiles = {}; labelFiles = {}; for p=1:numel(files) load(fullfile(files(p).folder,files(p).name),'params'); if params.SNRdB > 40 [~,name] = fileparts(files(p).name); dataFiles = [dataFiles; fullfile(files(p).folder,[name '.png'])]; %#ok<AGROW> labelFiles = [labelFiles; fullfile(files(p).folder,[name '.hdf'])]; %#ok<AGROW> end end imds = imageDatastore(dataFiles); pxdsResults = semanticseg(imds,net,"WriteLocation",tempdir);
Running semantic segmentation network ------------------------------------- * Processed 608 images.
pxdsTruth = pixelLabelDatastore(labelFiles,classNames,pixelLabelID); metrics = evaluateSemanticSegmentation(pxdsResults,pxdsTruth);
Evaluating semantic segmentation results ---------------------------------------- * Selected metrics: global accuracy, class accuracy, IoU, weighted IoU, BF score. * Processed 608 images. * Finalizing... Done. * Data set metrics: GlobalAccuracy MeanAccuracy MeanIoU WeightedIoU MeanBFScore ______________ ____________ _______ ___________ ___________ 0.94487 0.94503 0.89799 0.89582 0.74699
При рассмотрении только набора систем координат с более высоким ОСШ, повторно постройте нормированную матрицу беспорядка и наблюдайте улучшенную сетевую точность.
normConfMatData = metrics.NormalizedConfusionMatrix.Variables; figure h = heatmap(classNames,classNames,100*normConfMatData); h.XLabel = 'Predicted Class'; h.YLabel = 'True Class'; h.Title = 'Normalized Confusion Matrix (%)';
При рассмотрении только набора систем координат с более высоким ОСШ, повторно постройте гистограмму IoU на изображение и наблюдайте улучшенное распределение.
imageIoU = metrics.ImageMetrics.MeanIoU; figure histogram(imageIoU) grid on xlabel('IoU') ylabel('Number of Frames') title('Frame Mean IoU')
Визуализируйте полученный спектр, истинные метки и предсказанные метки для изображения с индексом 602.
imgIdx = 602;
rcvdSpectrogram = readimage(imds,imgIdx);
trueLabels = readimage(pxdsTruth,imgIdx);
predictedLabels = readimage(pxdsResults,imgIdx);
figure
helperSpecSenseDisplayResults(rcvdSpectrogram,trueLabels,predictedLabels, ...
classNames,sampleRate,0,frameDuration)
figure
helperSpecSenseDisplayIdentifiedSignals(rcvdSpectrogram,predictedLabels, ...
classNames,sampleRate,0,frameDuration)
Проверьте производительность обучивших сеть использующих беспроводных получений сигнала. Найдите соседнюю базовую станцию и настройте центральную частоту своего радио, чтобы покрыть полосу сигналов, которые вы хотите идентифицировать. Этот пример устанавливает центральную частоту на 2,35 ГГц. Если вы имеете по крайней мере одно радио ADALM-PLUTO и установили Коммуникационный Пакет поддержки Тулбокса для Радио ADALM-PLUTO, можно запустить этот раздел кода. В случае, если у вас нет доступа к радио ADALM-PLUTO, этот пример показывает результаты теста, проводимого с помощью записанных сигналов.
runSDRSection = false; if helperIsPlutoSDRInstalled() radios = findPlutoRadio(); if length(radios) >= 1 runSDRSection = true; else disp("At least one ADALM-PLUTO radios is needed. Skipping SDR test.") end else disp("Communications Toolbox Support Package for Analog Devices ADALM-PLUTO Radio not found.") disp("Click Add-Ons in the Home tab of the MATLAB toolstrip to install the support package.") disp("Skipping SDR test.") end
Communications Toolbox Support Package for Analog Devices ADALM-PLUTO Radio not found.
Click Add-Ons in the Home tab of the MATLAB toolstrip to install the support package.
Skipping SDR test.
if runSDRSection % Set up PlutoSDR receiver rx = sdrrx('Pluto'); rx.CenterFrequency = 2.35e9; rx.BasebandSampleRate = sampleRate; rx.SamplesPerFrame = frameDuration*rx.BasebandSampleRate; rx.OutputDataType = 'single'; rx.EnableBurstMode = true; rx.NumFramesInBurst = 1; Nfft = 4096; overlap = 10; meanAllScores = zeros([imageSize numel(classNames)]); segResults = zeros([imageSize 10]); for frameCnt=1:10 rxWave = rx(); rxSpectrogram = helperSpecSenseSpectrogramImage(rxWave,Nfft,sampleRate,imageSize); [segResults(:,:,frameCnt),scores,allScores] = semanticseg(rxSpectrogram,net); meanAllScores = (meanAllScores*(frameCnt-1) + allScores) / frameCnt; end release(rx) [~,predictedLabels] = max(meanAllScores,[],3); figure helperSpecSenseDisplayResults(rxSpectrogram,[],predictedLabels,classNames,... sampleRate,rx.CenterFrequency,frameDuration) figure freqBand = helperSpecSenseDisplayIdentifiedSignals(rxSpectrogram,predictedLabels,... classNames,sampleRate,rx.CenterFrequency,frameDuration) else figure imshow('lte_capture_result1.png') figure imshow('lte_capture_result2.png') figure imshow('nr_capture_result1.png') figure imshow('nr_capture_result2.png') end
Обучивший сеть может отличить 5G NR и сигналы LTE включая два получения в качестве примера с действительных базовых станций. Сеть не может смочь идентифицировать каждый записанный сигнал правильно. В таких случаях улучшите обучающие данные или путем генерации более представительных синтетических сигналов или получения беспроводных сигналов и включая их в наборе обучающих данных.
Можно использовать Поиск Ячейки LTE, MIB и Восстановление SIB1 (LTE Toolbox) и Поиск Ячейки NR и MIB и Восстановление SIB1 (5G Toolbox) примеры, чтобы идентифицировать LTE и 5G базовые станции NR вручную, чтобы собрать обучающие данные, соответственно.
Если необходимо контролировать более широкие полосы спектра, увеличить sampleRate
, регенерируйте обучающие данные и переобучите сеть.
classificationLayer
| featureInputLayer
| fullyConnectedLayer
| reluLayer
| softmaxLayer
| pixelLabelDatastore
(Computer Vision Toolbox) | countEachLabel
(Computer Vision Toolbox) | pixelClassificationLayer
(Computer Vision Toolbox)