5G 信号、LTE 信号、および WLAN 信号を識別するための深層学習によるスペクトル センシング
この例では、スペクトル監視のために、深層学習を使用してセマンティック セグメンテーション ネットワークに学習させる方法を示します。スペクトル監視の用途の 1 つは、スペクトル占有率を特徴付けることです。この例のニューラル ネットワークでは、広帯域スペクトログラムに含まれる 5G NR、LTE、および WLAN の信号を識別するように学習させます。
はじめに
コンピューター ビジョンでは、セマンティック セグメンテーション手法を使用して、イメージまたはビデオ内のオブジェクトとその位置を識別します。無線信号処理において、対象オブジェクトは無線信号であり、オブジェクトの位置は信号が占める周波数と時間です。この例では、セマンティック セグメンテーション手法を無線信号に適用して、広帯域スペクトログラムに含まれるスペクトル コンテンツを識別します。
これ以降では、次を行います。
学習信号を生成します。
セマンティック セグメンテーション ネットワークを使用して、5G NR、LTE、および WLAN の信号を時間と周波数で識別します。ネットワークにゼロから学習させるか、事前学習済みのネットワークに転移学習を適用するかを選択できます。
合成信号を使用して学習済みネットワークをテストします。
SDR を使用し、無線 (OTA) 信号でネットワークをテストします。
関連する無線用 AI の例
この例は、次の完全な深層学習ワークフローの一部として使用します。
Capture and Label NR and LTE Signals for AI Training (Wireless Testbench)の例では、SDR を使用して 5G NR および LTE の信号の帯域幅をスキャン、キャプチャ、およびラベル付けする方法を示します。
WLAN Activity Scanner (Wireless Testbench)の例では、SDR を使用して WLAN 信号をスキャンおよびキャプチャする方法を示します。
この例では、広帯域スペクトログラムで 5G NR および LTE の信号を識別するためにセマンティック セグメンテーション ネットワークに学習させる方法を示します。
Identify LTE and NR Signals from Captured Data Using SDR and Deep Learning (Wireless Testbench)の例では、深層学習で学習させたセマンティック セグメンテーション ネットワークを使用して、SDR でキャプチャした無線データから NR および LTE の信号を識別する方法を示します。
上記の例の目的とするワークフローを図に示します。
学習データの生成
深層学習ドメインにおける無線信号の利点の 1 つは、信号が合成されるという事実です。また、信頼性の高いチャネルや RF 劣化モデルも用意されています。その結果、信号を収集して手動でラベル付けする代わりに、5G Toolbox™ の関数を使用して 5G NR 信号を生成したり、LTE Toolbox™ の関数を使用して LTE 信号を生成したり、WLAN Toolbox™ の関数を使用して WLAN 信号を生成したりできます。これらの信号を標準仕様のチャネル モデルに渡して、学習データを作成できます。
5G NR、LTE、または WLAN の信号のみを含むフレームをネットワークに学習させ、対象の帯域内でこれらの信号の周波数をランダムにシフトします。各フレームの長さは 40 ms で、持続時間は 40 サブフレームです。ネットワークは、5G NR、LTE、または WLAN の信号がフレーム時間全体で同じ帯域を占有することを前提としています。ネットワーク性能をテストするには、対象の帯域内のランダムな個別の帯域で、5G NR 信号と LTE 信号の両方を含むフレーム、5G NR 信号と WLAN 信号の両方を含むフレーム、または LTE 信号と WLAN 信号の両方を含むフレームを作成します。
61.44 MHz のサンプル レートを使用します。このレートは、最新の標準信号のほとんどを処理するのに十分であり、低コストのソフトウェア無線 (SDR) システムには、このレートでサンプリングして、約 50 MHz の有用な帯域幅を提供するものがあります。より広い帯域を監視するには、サンプル レートを上げ、学習フレームを再生成して、ネットワークに再学習させます。
関数 helperSpecSenseTrainingData
を使用して学習フレームを生成します。この関数は、helperSpecSenseNRSignal
関数を使用して 5G NR 信号を生成し、helperSpecSenseLTESignal
関数を使用して LTE 信号を生成し、helperSpecSenseWLANSignal
関数を使用して WLAN 信号を生成します。
次の表に、5G NR の可変信号パラメーターを示します。
次の表に、LTE の可変信号パラメーターを示します。
次の表に、WLAN の可変信号パラメーターを示します。
nrCDLChannel
(5G Toolbox)関数、lteFadingChannel
(LTE Toolbox)関数、およびwlanTGaxChannel
(WLAN Toolbox)関数を使用して、チャネル劣化要因を追加します。チャネル構成の詳細については、関数
helperSpecSenseTrainingData
を参照してください。次の表に、チャネル パラメーターを示します。
関数 helperSpecSenseTrainingData
は、関数 helperSpecSenseSpectrogramImage
を使用して、複素ベースバンド信号からスペクトログラム イメージを作成します。4096 の FFT 長を使用してスペクトログラムを計算します。256×256 の RGB イメージを生成します。このイメージ サイズを使用することで、学習時に十分な大きさのイメージのバッチをメモリに収めながら、時間と周波数で十分な解像度を提供できます。GPU に十分なメモリがない場合は、イメージのサイズを小さくするか、学習バッチのサイズを小さくすることができます。
trainingDataSource
変数は、学習データをダウンロードするか生成するかを決定します。[Use downloaded data] を選択すると、学習データがダウンロードされます。[Generate training data] を選択すると、学習データが最初から生成されます。コンピューターの構成によっては、データの生成に数時間かかる場合があります。Intel® Xeon® W-2133 CPU @ 3.60GHz を搭載した PC を使用し、Parallel Computing Toolbox™ を使用して 6 つのワーカーで並列プールを作成する場合、学習データの生成に約 1 時間かかります。ネットワークに学習させるには、[Train network now] を選択します。このプロセスは、同じ PC と NVIDIA® Titan V GPU で約 8 分かかります。ネットワークの学習をスキップするには、[Use trained network] を選択します。代わりに、この例では学習済みネットワークをダウンロードします。
信号の各セットから 900 フレームを使用します。5G NR のみ、LTE のみ、WLAN のみ、および 3 つの信号タイプのうち 2 つを組み合わせて使用します。システム パラメーターが取りうる値の数を増やす場合は、学習フレームの数を増やします。
指定した imageSize
のサイズに対して学習イメージのセットを生成します。
ダウンロードされる学習データには、LTE、5G、WLAN、および広帯域にまたがる未知の信号のキャプチャ データ、前処理済みデータ、ラベル付きデータも含まれます。詳細については、Capture and Label NR and LTE Signals for AI Training (Wireless Testbench)およびWLAN Activity Scanner (Wireless Testbench)の例を参照してください。
imageSize = [256 256]; % pixels sampleRate = 61.44e6; % Hz numSubFrames = 40; % corresponds to 40 ms frameDuration = numSubFrames*1e-3; % seconds trainDirRoot = fullfile(pwd,"TrainingData"); classNames = ["Noise" "NR" "LTE" "WLAN" "Unknown"]; trainingDataSource ="Downloaded data"; trainNow =
false; useCapturedData =
true; if trainingDataSource == "Generated data" numFramesPerStandard = 900; saveChannelInfo = false; helperSpecSenseTrainingData(numFramesPerStandard,classNames,imageSize, ... trainDirRoot,numSubFrames,sampleRate,saveChannelInfo); end
深層ニューラル ネットワークの選択
セマンティック セグメンテーション ネットワークにゼロから学習させるか、事前学習済みのセマンティック セグメンテーション ネットワークに転移学習を適用するかを選択できます。
転移学習を適用するには、
baseNetwork
を目的の事前学習済みのネットワーク アーキテクチャに設定します。カスタム ネットワークにゼロから学習させるには、
baseNetwork
を "custom
" に設定します。
baseNetwork
はresnet18
(Deep Learning Toolbox)に設定されています。Deep Learning Toolbox™ Model for ResNet-18 Network サポート パッケージがインストールされていない場合、関数によってアドオン エクスプローラーに必要なサポート パッケージへのリンクが表示されます。サポート パッケージをインストールするには、リンクをクリックして、[インストール] をクリックします。コマンド ラインで resnet18
と入力して、インストールが正常に終了していることを確認します。必要なサポート パッケージがインストールされている場合、関数によって dlnetwork オブジェクトが返されます。詳細については、dlnetwork オブジェクトを使用した予測の実行 (Deep Learning Toolbox)を参照してください。
baseNetwork ='resnet18'; trainDir = fullfile(trainDirRoot,'256x256'); imageSize = [256 256];
選択に基づいて、学習データと学習済みネットワークのいずれかまたはその両方をダウンロードします。
helperSpecSenseDownloadData(trainingDataSource,trainNow,useCapturedData, ...
baseNetwork,imageSize)
Starting download of data files from: https://www.mathworks.com/supportfiles/spc/SpectrumSensing/SpectrumSensingTrainingData256x256_2025.zip Extracting files. Extract complete. Starting download of data files from: https://www.mathworks.com/supportfiles/spc/SpectrumSensing/SpectrumSensingTrainedResnet18_2025.zip Extracting files. Extract complete. Starting download of data files from: https://www.mathworks.com/supportfiles/spc/SpectrumSensing/SpectrumSensingCapturedData256x256_2025.zip Extracting files. Extract complete.
学習データの読み込み
imageDatastore
関数を使用して、5G NR、LTE、および WLAN の信号のスペクトログラムを含む学習イメージを読み込みます。関数 imageDatastore
では、大規模なイメージ コレクションをディスクから効率的に読み込むことができます。スペクトログラム イメージは .png ファイルに保存されます。
folders = trainDir; if useCapturedData folders = [folders,fullfile(trainDir,"captured")]; end imds = imageDatastore(folders,FileExtensions=".png");
関数pixelLabelDatastore
(Computer Vision Toolbox)を使用して、スペクトログラムのピクセル ラベル イメージ データを読み込みます。各ピクセルは、"NR"、"LTE"、"Noise"、"WLAN"、"Unknown" のいずれかとしてラベル付けされます。ピクセル ラベル データストアは、ピクセル ラベル データとラベル ID をクラス名マッピングにカプセル化します。ピクセル ラベルは .hdf ファイルに保存されます。
numClasses = length(classNames); pixelLabelID = floor((0:numClasses-1)/(numClasses-1)*255); pxdsTruthLTENRWLAN = pixelLabelDatastore(folders,classNames,pixelLabelID,... FileExtensions=".hdf");
データセット統計の解析
学習データセット内のクラス ラベルの分布を確認するには、関数countEachLabel
(Computer Vision Toolbox)を使用してクラス ラベルごとにピクセル数をカウントし、クラスごとにピクセル カウントをプロットします。
tbl = countEachLabel(pxdsTruthLTENRWLAN); 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 信号および WLAN 信号は LTE 信号よりも帯域幅が広くなる場合があるため、背景がノイズで埋め尽くされる可能性があります。優勢なクラスに学習が偏るため、クラスごとの観測数の不平衡が学習プロセスに悪影響を及ぼす可能性があります。クラス加重を使用したクラスのバランス調整のセクションでは、クラス加重を使用して、クラスごとの観測数の不平衡によって生じる偏りを緩和します。
学習セット、検証セット、およびテスト セットの準備
深層ニューラル ネットワークは、データセットの信号イメージの 80% を学習に使用し、イメージの 10% を検証に使用し、イメージの 10% をテストに使用します。関数 helperSpecSensePartitionData
は、イメージとピクセル ラベルのデータを学習セット、検証セット、およびテスト セットにランダムに分割します。
[imdsTrain,pxdsTrain,imdsVal,pxdsVal,imdsTest,pxdsTest] = ...
helperSpecSensePartitionData(imds,pxdsTruthLTENRWLAN,[80 10 10]);
cdsTrain = combine(imdsTrain,pxdsTrain);
cdsVal = combine(imdsVal,pxdsVal);
cdsTest = combine(imdsTest,pxdsTest);
深層ニューラル ネットワークの学習
ネットワークにゼロから学習させるか、転移学習を適用するかを選択できます。
転移学習に事前学習済みのネットワークを使用
一般的なセマンティック セグメンテーション ネットワークに転移学習を適用します。
転移学習を適用するには、関数deeplabv3plus
(Computer Vision Toolbox)を使用してセマンティック セグメンテーション ニューラル ネットワークを作成します。ベース ネットワークとしてresnet18
を選択し (baseNetwork
の値を設定)、入力イメージ サイズ (時間軸と周波数軸を表すために使用されるピクセル数) とクラス数を指定します。
if ~strcmp(baseNetwork,"custom") layers = deeplabv3plus([256 256],numel(classNames),baseNetwork); end
シンプルなセマンティック セグメンテーション ネットワークの設計
転移学習の代わりに、シンプルなセマンティック セグメンテーション ネットワークを設計できます。
セマンティック セグメンテーション ネットワークの共通パターンでは、畳み込み層と ReLU 層の間でイメージをダウンサンプリングした後、入力サイズを一致させるために出力をアップサンプリングする必要があります。このプロセス中、ネットワークはセグメント化するクラスの特定のセットに対して最適化されている非線形フィルターを使用して演算を実行します。
if strcmp(baseNetwork,"custom") layers = helperSpecSenseCustomNetwork(imageSize,numClasses); end
クラス加重を使用したクラスのバランス調整
学習セット内のクラスのバランスがとれていない場合、学習を改善するために、クラス加重を使用してクラスのバランスを調整することができます。前に関数 countEachLabel
で計算したピクセル ラベルのカウントを使用して、中央頻度のクラスの重みを計算します。
imageFreq = tbl.PixelCount ./ tbl.ImagePixelCount; imageFreq(isnan(imageFreq)) = []; classWeights = median(imageFreq) ./ imageFreq; classWeights = classWeights/(sum(classWeights)+eps(class(classWeights))); if length(classWeights) < numClasses classWeights = [classWeights; zeros(numClasses - length(classWeights),1)]; end
学習オプションの選択
関数trainingOptions
(Deep Learning Toolbox)を使用して学習を構成し、モーメンタム項付き確率的勾配降下 (SGDM) 最適化アルゴリズムおよび SGDM に使用されるハイパーパラメーターを指定します。ネットワークから最高のパフォーマンスを得るために、実験マネージャー (Deep Learning Toolbox)を使用して学習オプションを最適化できます。
mbs = 40; opts = trainingOptions("sgdm",... MiniBatchSize = mbs,... 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');
結合された学習データ ストア cdsTrain
を使用してネットワークに学習させます。結合された学習データ ストアには、単一の信号フレームと真のピクセル ラベルが含まれます。加重クロスエントロピー損失と共にカスタム正規化を使用して、学習中にネットワークを更新します。損失関数crossentropy
(Deep Learning Toolbox)を使用してカスタム損失関数 lossFunction を定義し、カスタム正規化を適用します。
if trainNow [net,trainInfo] = trainnet(cdsTrain,layers, ... @(ypred,ytrue) lossFunction(ypred,ytrue,classWeights),opts); %#ok save(sprintf('myNet_%s_%s',baseNetwork, ... datetime('now',format='yyyy_MM_dd_HH_mm')), 'net') else net = loadNetworkFromMATFile(baseNetwork); end
深層ニューラル ネットワークのテスト
5G NR 信号、LTE 信号、WLAN 信号のすべてを含む信号を使用して、ネットワーク信号の識別性能をテストします。関数semanticseg
(Computer Vision Toolbox)を使用して、テスト データ セット内のスペクトログラム イメージのピクセル推定値を取得します。関数evaluateSemanticSegmentation
(Computer Vision Toolbox)を使用してさまざまなメトリクスを計算し、セマンティック セグメンテーションの結果の品質を評価します。
dataDir = fullfile(trainDir,"LTE_NR_WLAN"); imdsLTENRWLAN = imageDatastore(dataDir,FileExtensions=".png"); pxdsResultsLTENRWLAN = semanticseg(imdsLTENRWLAN,net,MinibatchSize=mbs,WriteLocation=tempdir, ... Classes=classNames);
Running semantic segmentation network ------------------------------------- * Processed 2294 images.
pxdsTruthLTENRWLAN = pixelLabelDatastore(dataDir,classNames,pixelLabelID,... FileExtensions=".hdf"); metrics = evaluateSemanticSegmentation(pxdsResultsLTENRWLAN,pxdsTruthLTENRWLAN);
Evaluating semantic segmentation results ---------------------------------------- * Selected metrics: global accuracy, class accuracy, IoU, weighted IoU, BF score. * Processed 2294 images. * Finalizing... Done. * Data set metrics: GlobalAccuracy MeanAccuracy MeanIoU WeightedIoU MeanBFScore ______________ ____________ _______ ___________ ___________ 0.90116 NaN 0.67109 0.82466 0.64699
すべてのテスト フレームの正規化混同行列をプロットします。
cm = confusionchart(metrics.ConfusionMatrix.Variables, ... classNames, Normalization='row-normalized'); cm.Title = 'Confusion Matrix - Synthetic';
学習データの生成セクションで、取得したデータを使用することを選択した場合、取得したデータのみを使用してテストします。
if useCapturedData capturedIdx = contains(imdsTest.Files,'captured'); imdsTestCaptured = subset(imdsTest,capturedIdx); pxdsTestCaptured = subset(pxdsTest,capturedIdx);
テスト セット内のキャプチャ データを含むフレームのみを考慮して、同じプロセスを繰り返します。
pxdsResultsCaptured = semanticseg(imdsTestCaptured,net,MinibatchSize=mbs,WriteLocation=tempdir, ...
Classes=classNames);
metrics = evaluateSemanticSegmentation(pxdsResultsCaptured,pxdsTestCaptured);
正規化混同行列を再プロットします。
cm = confusionchart(metrics.ConfusionMatrix.Variables, ... classNames, Normalization="row-normalized"); cm.Title = "Normalized Confusion Matrix";
混同行列は、ネットワークが NR 信号をノイズまたは未知の信号と混同していることを示しています。キャプチャ信号を調べると、ファイル プレフィックス CF3550 のキャプチャ信号の SNR が非常に低く、ネットワークが信号をうまく識別できていないことがわかります。
CF3550Indices = contains(imdsTestCaptured.Files,'CF3550'); idx = find(CF3550Indices,1); rcvdSpectrogram = readimage(imdsTestCaptured,idx); trueLabels = readimage(pxdsTestCaptured,idx); predictedLabels = readimage(pxdsResultsCaptured,idx); figure helperSpecSenseDisplayResults(rcvdSpectrogram,trueLabels,predictedLabels, ... classNames,250e6,0,frameDuration)
キャプチャ データを使用 (ただし、CF3550 フレームは除外) してテストします。
imdsTestCaptured2 = subset(imdsTestCaptured,~CF3550Indices);
pxdsTestCaptured2 = subset(pxdsTestCaptured,~CF3550Indices);
pxdsResultsCaptured2 = semanticseg(imdsTestCaptured2,net,MinibatchSize=mbs,WriteLocation=tempdir, ...
Classes=classNames);
metrics = evaluateSemanticSegmentation(pxdsResultsCaptured2,pxdsTestCaptured2);
正規化混同行列を再プロットします。
figure cm = confusionchart(metrics.ConfusionMatrix.Variables, ... classNames, Normalization="row-normalized"); cm.Title = "Normalized Confusion Matrix"; end
Running semantic segmentation network ------------------------------------- * Processed 76 images.
Evaluating semantic segmentation results ---------------------------------------- * Selected metrics: global accuracy, class accuracy, IoU, weighted IoU, BF score. * Processed 76 images. * Finalizing... Done. * Data set metrics: GlobalAccuracy MeanAccuracy MeanIoU WeightedIoU MeanBFScore ______________ ____________ _______ ___________ ___________ 0.98271 0.99308 0.93931 0.96778 0.89497
Running semantic segmentation network ------------------------------------- * Processed 66 images.
Evaluating semantic segmentation results ---------------------------------------- * Selected metrics: global accuracy, class accuracy, IoU, weighted IoU, BF score. * Processed 66 images. * Finalizing... Done. * Data set metrics: GlobalAccuracy MeanAccuracy MeanIoU WeightedIoU MeanBFScore ______________ ____________ _______ ___________ ___________ 0.98404 0.99344 0.95623 0.97037 0.89122
NR 検出率が 99% を超えるようになりました。
スペクトログラムに含まれる 5G NR 信号および LTE 信号の識別
キャプチャ信号の受信スペクトル、真のラベル、および予測ラベルを可視化します。
if useCapturedData signals = find(~CF3550Indices); numSignals = length(signals); idx =8; rcvdSpectrogram1 = readimage(imdsTestCaptured,signals(idx)); trueLabels1 = readimage(pxdsTestCaptured,signals(idx)); predictedLabels1 = readimage(pxdsResultsCaptured,signals(idx)); idx =
1; rcvdSpectrogram2 = readimage(imdsTestCaptured,signals(idx)); trueLabels2 = readimage(pxdsTestCaptured,signals(idx)); predictedLabels2 = readimage(pxdsResultsCaptured,signals(idx)); else numSignals = length(imdsLTENRWLAN.Files); idx =
3; rcvdSpectrogram1 = readimage(imdsLTENRWLAN,idx); trueLabels1 = readimage(pxdsTruthLTENRWLAN,idx); predictedLabels1 = readimage(pxdsResultsLTENRWLAN,idx); idx = length(imdsLTENRWLAN.Files); rcvdSpectrogram2 = readimage(imdsLTENRWLAN,idx); trueLabels2 = readimage(pxdsTruthLTENRWLAN,idx); predictedLabels2 = readimage(pxdsResultsLTENRWLAN,idx); end figure helperSpecSenseDisplayResults(rcvdSpectrogram1,trueLabels1,predictedLabels1, ... classNames,250e6,0,frameDuration)
figure
helperSpecSenseDisplayIdentifiedSignals(rcvdSpectrogram1,predictedLabels1, ...
classNames,250e6,0,frameDuration)
figure
helperSpecSenseDisplayResults(rcvdSpectrogram2,trueLabels2,predictedLabels2, ...
classNames,250e6,0,frameDuration)
figure
helperSpecSenseDisplayIdentifiedSignals(rcvdSpectrogram2,predictedLabels2, ...
classNames,250e6,0,frameDuration)
SDR を使用してキャプチャしたデータのテスト
SDR を使用した無線信号キャプチャを使用して、学習済みネットワークの性能をテストします。近くの基地局を見つけて、識別したい信号の帯域をカバーするようにラジオの中心周波数を調整します。この例では、中心周波数を 2.35 GHz に設定します。少なくとも 1 つの ADALM-PLUTO 無線機があり、Communication Toolbox Support Package for ADALM-PLUTO Radio がインストールされている場合は、コードの以下のセクションを実行できます。ADALM-PLUTO 無線機にアクセスできない場合のために、この例では、キャプチャ信号と学習済みネットワークを使用して実施したテストの結果を示しています。
Wireless Testbench の例Identify LTE and NR Signals from Captured Data Using SDR and Deep Learning (Wireless Testbench)を使用して、広帯域信号でテストします。
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.43e9; 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',InitialMagnification='fit') figure imshow('lte_capture_result2.png',InitialMagnification='fit') figure imshow('nr_capture_result1.png',InitialMagnification='fit') figure imshow('nr_capture_result2.png',InitialMagnification='fit') end
まとめとその他の調査
学習済みネットワークは、実際の基地局からの 2 つの取得例を含む 5G NR、LTE、WLAN の信号を区別できます。ネットワークは、取得されたすべての信号を正しく識別できない場合があります。このような場合、より典型的な合成信号を生成するか無線信号を取得し、それらを学習セットに含めて、学習データを強化します。初期状態はランダムなので、異なるネットワークでは学習後に取得される結果がここで説明した結果と異なる可能性があります。
ネットワーク構造が異なると、検出の精度も異なります。次の表は、カスタム、ResNet-18、MobileNetv2、および ResNet-50 (それぞれ 140 万、2060 万、4390 万、および 4690 万の学習可能パラメーターをもつ) の検出精度の結果を示しています。検出精度の結果は、テスト セット全体に対するもの、合成信号のみに対するもの、およびキャプチャ信号のみに対するものです。全体テストとキャプチャのみのテストには、テスト セットからの信号が含まれます。合成テストには、学習には使用されない、LTE_NR_WLAN ディレクトリ内の生成信号が含まれます。ネットワークの複雑度が増すと精度は向上します。
Identify LTE and NR Signals from Captured Data Using SDR and Deep Learning (Wireless Testbench)の例を使用し、学習済みネットワークを使用して LTE および 5G NR の信号を識別することができます。
スペクトルのより広い帯域を監視する必要がある場合は、sampleRate
を増やし、学習データを再生成し、Capture and Label NR and LTE Signals for AI Training (Wireless Testbench)の例を使用して信号をキャプチャし、ネットワークに再学習させます。
サポート関数
function net = loadNetworkFromMATFile(baselineNetwork) switch baselineNetwork case "custom" net = load("specSenseTrainedNetCustom.mat",'net'); case "resnet18" net = load("specSenseTrainedNetResnet18.mat",'net'); case "resnet50" net = load("specSenseTrainedNetResnet50.mat",'net'); case "mobilenetv2" net = load("specSenseTrainedNetMobileNetv2.mat",'net'); otherwise error("Unknown baseline network: " + baselineNetwork) end net = net.net; end function loss = lossFunction(ypred,yactual,weights) % Compute weighted cross-entropy loss. cdim = find(dims(ypred) == 'C'); loss = crossentropy(ypred,yactual,weights,WeightsFormat="C",NormalizationFactor="none"); wn = shiftdim(weights(:)',-(cdim-2)); wnT = extractdata(yactual).*wn; normFac = sum(wnT(:))+eps('single'); loss = loss/normFac; end
参考
featureInputLayer
(Deep Learning Toolbox) | fullyConnectedLayer
(Deep Learning Toolbox) | reluLayer
(Deep Learning Toolbox) | softmaxLayer
(Deep Learning Toolbox) | pixelLabelDatastore
(Computer Vision Toolbox) | countEachLabel
(Computer Vision Toolbox)
トピック
- MATLAB による深層学習 (Deep Learning Toolbox)