Спектр, распознающийся с глубоким обучением, чтобы идентифицировать 5G и сигналы LTE

В этом примере показано, как обучить сеть семантической сегментации использование глубокого обучения для контроля спектра. Одно из использования контроля спектра должно охарактеризовать заполнение спектра. Нейронная сеть в этом примере обучена, чтобы идентифицировать 5G NR и сигналы LTE в широкополосной спектрограмме.

Введение

Компьютерное зрение использует метод семантической сегментации, чтобы идентифицировать объекты и их местоположения в изображении или видео. В беспроводной обработке сигналов предметы интереса являются беспроводными сигналами, и местоположения объектов являются частотой и время, занятое сигналами. В этом примере мы применяем метод семантической сегментации к беспроводным сигналам идентифицировать спектральное содержимое в широкополосной спектрограмме.

В следующем вы будете:

  1. Сгенерируйте учебные сигналы.

  2. Примените передачу обучения к сети семантической сегментации, чтобы идентифицировать 5G NR и сигналы LTE вовремя и частота.

  3. Протестируйте обучивший сеть с синтетическими сигналами.

  4. Используйте 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) как основная сеть и задает входной размер изображения (количество пикселей раньше представляло время и оси частоты), и количество классов. Если Модель Deep Learning Toolbox™ для пакета Сетевой поддержки ResNet-50 не установлена, то функция обеспечивает ссылку на необходимый пакет поддержки в Add-On Explorer. Чтобы установить пакет поддержки, щелкните по ссылке, и затем нажмите Install. Проверяйте, что установка успешна путем ввода resnet50 в командной строке. Если необходимый пакет поддержки установлен, то функция возвращает DAGNetwork Объект (Deep Learning Toolbox).

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);

Выберите Training Options

Сконфигурируйте обучение с помощью trainingOptions (Deep Learning Toolbox) функция, чтобы задать стохастический градиентный спуск с импульсом (SGDM) алгоритм оптимизации и гиперпараметры, используемые для SGDM. Чтобы получить лучшую эффективность от сети, можно использовать Experiment Manager (Deep Learning Toolbox), чтобы оптимизировать опции обучения.

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')

Идентифицируйте 5G NR и сигналы LTE в спектрограмме

Визуализируйте полученный спектр, истинные метки и предсказанные метки для изображения с индексом 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, регенерируйте обучающие данные и переобучите сеть.

Смотрите также

(Deep Learning Toolbox) | (Deep Learning Toolbox) | (Deep Learning Toolbox) | (Deep Learning Toolbox) | (Deep Learning Toolbox) | (Computer Vision Toolbox) | (Computer Vision Toolbox) | (Computer Vision Toolbox)

Похожие темы