ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

深層学習を使用したレーダー波形の分類

この例は、Wigner-Ville 分布 (WVD) と深層畳み込みニューラル ネットワーク (CNN) を使用して生成した合成データのレーダー波形タイプを分類する方法を示します。

変調分類は、通信型受信機の重要な関数です。認識レーダーやソフトウェアで定義した無線機など、多数のアプリケーションがあります。通常は、波形を特定したり、変調タイプによって分類するには、有意義な特徴を定義してそれらを分類器に入力することが必要です。それと同時に、この手順には、正確な分類を得るために多くの手間と領域の知識が必要です。この例では、フレームワークを調査し、時間-周波数特徴を信号から自動的に抽出し、深層学習ネットワークを使用して信号分類を実行します。

この例の最初の部分は、3 つのパルス状のレーダー波形を合成してそれらを分類するレーダー分類システムをシミュレートします。レーダー波形は次のとおりです。

  • 矩形

  • 線形周波数変調 (LFM)

  • バーカー符号

レーダー分類システムは個別には存在しません。むしろ、広範な占有周波数スペクトル内に存在し、通信システム、無線機、およびナビゲーション システムなど、他の送信されたソースと競合しています。この例の 2 つ目の部分では、追加の通信変調タイプを含めるためにネットワークを拡張します。レーダー波形の最初のセットに加えて、拡張されたネットワークは次の通信波形を合成して特定します。

  • ガウス周波数シフト キーイング (GFSK)

  • 連続位相周波数シフト キーイング (CPFSK)

  • ブロードキャスト周波数変調 (B-FM)

  • 両側波帯振幅変調 (DSB-AM)

  • 単側波帯振幅変調 (SSB-AM)

この例では、主に、振幅と周波数の変調通信信号の小さいセットを含めるために拡張されている分類をもつ、レーダー波形に焦点を当てています。ワイドな配列の通信信号をもつ変調分類のワークフロー全体については、深層学習による変調の分類 (Communications Toolbox)を参照してください。

レーダー波形の生成

各変調タイプに対して 100 MHz のサンプルレートで 3000 信号を生成します。矩形パルスには phased.RectangularWaveform、LFM には , phased.LinearFMWaveform、およびバーカー符号をもつ位相符号化パルスには phased.PhaseCodedWaveform を使用します。

各信号は一意のパラメーターをもち、現実に近づけるためにさまざまな損失で拡張されます。各波形の場合、パルス幅と反復周波数がランダムに生成されます。LFM 波形の場合、スイープ帯域幅と方向がランダムに生成されます。バーカー波形の場合、チップ幅と数がランダムに生成されます。すべての信号は、範囲が [–6, 30] dB のランダムな S/N 比をもつ関数 awgn を使用してホワイト ガウス ノイズで劣化します。範囲が [Fs/6, Fs/5] のランダムな搬送周波数をもつ周波数オフセットは、comm.PhaseFrequencyOffset オブジェクトを使用して各信号に適用されます。最後に、各信号は、マルチパス ライス フェージング チャネル、comm.RicianChannel. を介して渡されます。

指定された補助関数 helperGenerateRadarWaveforms は各復調タイプを作成して拡張します。

[wav, modType] = helperGenerateRadarWaveforms();

LFM 波形の一部のフーリエ変換をプロットし、生成されたセットの分散を示します。

idLFM = find(modType == "LFM",3);
nfft = 2^nextpow2(length(wav{1}));
f = (0:(nfft/2-1))/nfft*100e6;

figure
subplot(1,3,1)
Z = fft(wav{idLFM(1)},nfft);
plot(f/1e6,abs(Z(1:nfft/2)))
xlabel('Frequency (MHz)');ylabel('Amplitude');axis square
subplot(1,3,2)
Z = fft(wav{idLFM(2)},nfft);
plot(f/1e6,abs(Z(1:nfft/2)))
xlabel('Frequency (MHz)');ylabel('Amplitude');axis square
subplot(1,3,3)
Z = fft(wav{idLFM(3)},nfft);
plot(f/1e6,abs(Z(1:nfft/2)))
xlabel('Frequency (MHz)');ylabel('Amplitude');axis square

Wigner-Ville 分布を使用した特徴抽出

機械学習アルゴリズムの分類性能を向上させるための一般的な方法は、元の信号データの代わりに抽出された特徴を入力することです。特徴は、クラス間を区別するための分類アルゴリズムが簡単になる入力データの表現を提供します。Wigner-Ville 分布は、時変信号に役立つ元のデータの時間-周波数の表示を示します。時間と周波数の両方での高い分解能と局所性は類似の変調タイプの識別に適した特徴を提供します。関数 wvd を使用して、変調タイプのそれぞれに対して平滑化された疑似 WVD を計算します。

figure
subplot(1,3,1)
wvd(wav{find(modType == "Rect",1)},100e6,'smoothedPseudo')
axis square; colorbar off; title('Rect')
subplot(1,3,2)
wvd(wav{find(modType == "LFM",1)},100e6,'smoothedPseudo')
axis square; colorbar off; title('LFM')
subplot(1,3,3)
wvd(wav{find(modType == "Barker",1)},100e6,'smoothedPseudo')
axis square; colorbar off; title('Barker')

補助関数 helperGenerateTFDfiles は、各入力信号に対して平滑化された疑似 WVD を計算し、その結果をサイズ 227 x 227 までダウンサンプリングして、それをイメージとして保存します。現在のディレクトリのフォルダー TFDDatabase は、各変調タイプの分布のすべてを保存するために作成されます。各変調タイプは、そのタイプに応じた名前が付いたサブフォルダーに保存されます。このプロセスは、データベースのサイズが大きく、wvd アルゴリズムが複雑なため、数分かかる場合があります。

helperGenerateTFDfiles(wav,modType,100e6)

作成されたフォルダーのイメージ データストア オブジェクトを作成して深層学習ネットワークの学習に使用されるイメージ ファイルを管理します。この手順では、すべてのイメージをメモリに読み込む必要はありません。ラベル ソースをフォルダー名になるように指定します。これによって、フォルダー名に応じて、各信号の変調タイプが割り当てられます。

folders = fullfile('TFDDatabase',{'Rect','LFM','Barker'});
imds = imageDatastore(folders,...
    'FileExtensions','.png','LabelSource','foldernames','ReadFcn',@readTFDForAlexNet);

ネットワークをデータの 80% で学習し、10% でテストします。残りの 10% は検証に使用されます。関数 splitEachLabel を使用して imageDatastore を学習セット、検証セット、およびテスト セットに分割します。

[imdsTrain,imdsTest,imdsValidation] = splitEachLabel(imds,0.8,0.1);

深層学習ネットワークの設定

深層学習ネットワークを学習する前に、ネットワーク アーキテクチャを定義します。この例では、AlexNet の転移学習を使用します。これは、イメージ分類用に作成された深層 CNN です。転移学習は、新しいターゲットを分類するために既存ニューラル ネットワークを再学習するプロセスです。このネットワークは、サイズが 227 x 227 x 3 のイメージ入力を受け入れます。ネットワークに入力する前に、カスタム読み取り関数 readTFDForAlexNet は、2 次元時間-周波数分布を正しいサイズの RGB イメージに変換します。AlexNet は、既定の構成にある 1000 カテゴリの分類を実行します。ニーズに合うよう AlexNet を調整するには、3 つのレーダー変調タイプのみを分類するために最終的な 3 つの分類層を変更する必要があります。

出力サイズが 3 の fullyConnectedLayer を変調タイプごとに 1 つ指定しました。最終的な softmaxLayerclassificationLayer は最終的な出力分類を作成するために使用されます。

numClasses = 3;
net = alexnet;
layersTransfer = net.Layers(1:end-3);
layers = [
    layersTransfer
    fullyConnectedLayer(numClasses,'WeightLearnRateFactor',20,'BiasLearnRateFactor',20)
    softmaxLayer
    classificationLayer]
layers = 
  25x1 Layer array with layers:

     1   'data'    Image Input                   227x227x3 images with 'zerocenter' normalization
     2   'conv1'   Convolution                   96 11x11x3 convolutions with stride [4  4] and padding [0  0  0  0]
     3   'relu1'   ReLU                          ReLU
     4   'norm1'   Cross Channel Normalization   cross channel normalization with 5 channels per element
     5   'pool1'   Max Pooling                   3x3 max pooling with stride [2  2] and padding [0  0  0  0]
     6   'conv2'   Grouped Convolution           2 groups of 128 5x5x48 convolutions with stride [1  1] and padding [2  2  2  2]
     7   'relu2'   ReLU                          ReLU
     8   'norm2'   Cross Channel Normalization   cross channel normalization with 5 channels per element
     9   'pool2'   Max Pooling                   3x3 max pooling with stride [2  2] and padding [0  0  0  0]
    10   'conv3'   Convolution                   384 3x3x256 convolutions with stride [1  1] and padding [1  1  1  1]
    11   'relu3'   ReLU                          ReLU
    12   'conv4'   Grouped Convolution           2 groups of 192 3x3x192 convolutions with stride [1  1] and padding [1  1  1  1]
    13   'relu4'   ReLU                          ReLU
    14   'conv5'   Grouped Convolution           2 groups of 128 3x3x192 convolutions with stride [1  1] and padding [1  1  1  1]
    15   'relu5'   ReLU                          ReLU
    16   'pool5'   Max Pooling                   3x3 max pooling with stride [2  2] and padding [0  0  0  0]
    17   'fc6'     Fully Connected               4096 fully connected layer
    18   'relu6'   ReLU                          ReLU
    19   'drop6'   Dropout                       50% dropout
    20   'fc7'     Fully Connected               4096 fully connected layer
    21   'relu7'   ReLU                          ReLU
    22   'drop7'   Dropout                       50% dropout
    23   ''        Fully Connected               3 fully connected layer
    24   ''        Softmax                       softmax
    25   ''        Classification Output         crossentropyex

適切なネットワーク性能を確認する学習プロセスに対するオプションを選択します。各オプションの説明については、trainingOptions のドキュメンテーションを参照してください。

options = trainingOptions('sgdm', ...
    'MiniBatchSize',128, ...
    'MaxEpochs',5, ...
    'InitialLearnRate',1e-3, ...
    'Shuffle','every-epoch', ...
    'Verbose',false, ...
    'Plots','training-progress',...
    'ValidationData',imdsValidation);

ネットワークの学習

trainNetwork コマンドを使用して作成された CNN を学習させます。データセットのサイズが大きいため、プロセスには数分かかる場合があります。マシンに GPU と Parallel Computing Toolbox™ がある場合は、MATLAB は学習に GPU を自動で使用します。そうでない場合は CPU が使用されます。図の学習精度プロットは、すべての反復回数間のネットワークの学習の進行状況を示します。3 つのレーダー変調タイプで、ネットワークは学習信号のほぼ 100% を正しく分類します。

trainedNet = trainNetwork(shuffle(imdsTrain),layers,options);

レーダー波形に対するパフォーマンスの評価

学習済みネットワークを使用し、classify コマンドを使用してテスト データを分類します。混同行列は、分類性能を可視化するための 1 つの方法です。confusionchart コマンドを使用して、分類精度を計算して可視化します。ネットワークに入力された 3 つの変調タイプの場合、符号化された位相のほとんどすべて、LFM および矩形波形はネットワークによって正しく識別されました。

predicted = classify(trainedNet,imdsTest);
figure
confusionchart(predicted,imdsTest.Labels,'Normalization','column-normalized');

通信波形の生成と特徴の抽出

レーダー分類システムの周波数スペクトルは他の送信されたソースと競合しなければなりません。作成されたネットワークが他のシミュレートされた変調タイプを組み込むために拡張する方法を見ていきましょう。別の MathWorks の例深層学習による変調の分類 (Communications Toolbox)、 では、Communications Toolbox™ を使用して複数の異なる変調タイプの変調分類を実行します。補助関数 helperGenerateCommsWaveforms は、その例で使用された変調タイプのサブセットを生成して拡張します。WVD で位相情報が失われるため、振幅と周波数の変調タイプのみのサブセットが使用されます。

デジタルとアナログの変調分類に必要なワークフローとこれらの波形を作成するために使用される手法の詳細な説明に関する例のリンクを参照してください。各変調タイプの場合は、wvd を使用し、時間-周波数の特徴を抽出して可視化します。

[wav, modType] = helperGenerateCommsWaveforms();

figure
subplot(2,3,1)
wvd(wav{find(modType == "GFSK",1)},200e3,'smoothedPseudo')
axis square; colorbar off; title('GFSK')
subplot(2,3,2)
wvd(wav{find(modType == "CPFSK",1)},200e3,'smoothedPseudo')
axis square; colorbar off; title('CPFSK')
subplot(2,3,3)
wvd(wav{find(modType == "B-FM",1)},200e3,'smoothedPseudo')
axis square; colorbar off; title('B-FM')
subplot(2,3,4)
wvd(wav{find(modType == "SSB-AM",1)},200e3,'smoothedPseudo')
axis square; colorbar off; title('SSB-AM')
subplot(2,3,5)
wvd(wav{find(modType == "DSB-AM",1)},200e3,'smoothedPseudo')
axis square; colorbar off; title('DSB-AM')

補助関数 helperGenerateTFDfiles を再度使用して、各入力信号に対して平滑化された疑似 WVD を計算します。イメージ データストア オブジェクトを作成して、すべての変調タイプのイメージ ファイル管理します。

helperGenerateTFDfiles(wav,modType,200e3)
folders = fullfile('TFDDatabase',{'Rect','LFM','Barker','GFSK','CPFSK','B-FM','SSB-AM','DSB-AM'});
imds = imageDatastore(folders,...
    'FileExtensions','.png','LabelSource','foldernames','ReadFcn',@readTFDForAlexNet);

再度、関数 splitEachLabel を使用して学習セット、検証セット、およびテスト セットにデータを分割します。

[imdsTrain,imdsTest,imdsValidation] = splitEachLabel(imds,0.8,0.1);

深層学習ネットワーク アーキテクチャの調整

以前に、ネットワーク アーキテクチャは 3 つの変調タイプを分類するために設定されました。これは、レーダー信号と通信信号の両方の 8 つの変調タイプすべての分類を許可するために更新する必要があります。これは、以前のプロセスに似ていますが、fullyConnectedLayer に出力サイズ 8 が必要な点が異なります。

numClasses = 8;
net = alexnet;
layersTransfer = net.Layers(1:end-3);
layers = [
    layersTransfer
    fullyConnectedLayer(numClasses,'WeightLearnRateFactor',20,'BiasLearnRateFactor',20)
    softmaxLayer
    classificationLayer];

options = trainingOptions('sgdm', ...
    'MiniBatchSize',256, ...
    'MaxEpochs',5, ...
    'InitialLearnRate',1e-3, ...
    'Shuffle','every-epoch', ...
    'Verbose',false, ...
    'Plots','training-progress',...
    'ValidationData',imdsValidation);

trainNetwork コマンドを使用して作成された CNN を学習させます。変調タイプすべてにおいて、学習は約 95% の正しい分類の精度で収束します。

trainedNet = trainNetwork(shuffle(imdsTrain),layers,options);

すべての信号に対するパフォーマンスの評価

classify コマンドを使用して、テスト用に残しておいた信号を分類します。再度、confusionchart を使用して性能を可視化します。

predicted = classify(trainedNet,imdsTest);
figure;
confusionchart(predicted,imdsTest.Labels,'Normalization','column-normalized');

ネットワークに入力された 8 つの変調タイプの場合、99% を超える B-FM、CPFSK、GFSK、バーカー、矩形、および LFM の変調タイプが正しく分類されました。平均すると、85% を超える AM 信号が正しく識別されました。混同行列から、高い割合で、DSB-AM 信号が SSB-AM として、SSB-AM 信号が DSB-AM として誤分類されました。

ネットワークの学習プロセスについての詳細な情報を得るためにこれらの誤分類のいくつかを調査してみましょう。イメージ データストアの関数 readimage を使用して、テスト データセットから各クラスの単一のイメージを抽出します。表示された WVD は視覚的にはとても似ているように見えます。DSB-AM 信号と SSB-AM 信号にはとても似たシグネチャがあるため、これは、これらの 2 つのタイプを正しく分類するのはネットワーク上困難であることを説明しています。その後の信号プロセスで、ネットワークに対するこれらの 2 つの変調タイプでの違いがより明確になり、分類が改善されます。

DSB_DSB = readimage(imdsTest,find((imdsTest.Labels == 'DSB-AM') & (predicted == 'DSB-AM'),1));
DSB_SSB = readimage(imdsTest,find((imdsTest.Labels == 'DSB-AM') & (predicted == 'SSB-AM'),1));
SSB_DSB = readimage(imdsTest,find((imdsTest.Labels == 'SSB-AM') & (predicted == 'DSB-AM'),1));
SSB_SSB = readimage(imdsTest,find((imdsTest.Labels == 'SSB-AM') & (predicted == 'SSB-AM'),1));

figure
subplot(2,2,1)
imagesc(DSB_DSB(:,:,1))
axis square; title({'Actual Class: DSB-AM','Predicted Class: DSB-AM'})
subplot(2,2,2)
imagesc(DSB_SSB(:,:,1))
axis square; title({'Actual Class: DSB-AM','Predicted Class: SSB-AM'})
subplot(2,2,3)
imagesc(SSB_DSB(:,:,1))
axis square; title({'Actual Class: SSB-AM','Predicted Class: DSB-AM'})
subplot(2,2,4)
imagesc(SSB_SSB(:,:,1))
axis square; title({'Actual Class: SSB-AM','Predicted Class: SSB-AM'})

この例では、レーダーと通信の変調タイプを時間-周波数信号プロセスの手法と深層学習ネットワークによって分類できる方法を示しました。改善を加えるためのさらなる取り組みについては、Wavelet Toolbox™ で使用可能な時間-周波数解析と、Signal Processing Toolbox™ で使用可能な追加のフーリエ解析を使用することで調査することができます。

参考文献

[1] Brynolfsson, Johan, and Maria Sandsten."Classification of one-dimensional non-stationary signals using the Wigner-Ville distribution in convolutional neural networks."25th European Signal Processing Conference (EUSIPCO).IEEE, 2017.

[2] Liu, Xiaoyu, Diyu Yang, and Aly El Gamal."Deep neural network architectures for modulation classification."51st Asilomar Conference on Signals, Systems and Computers.2017.

[3] `Wang, Chao, Jian Wang, and Xudong Zhang."Automatic radar waveform recognition based on time-frequency analysis and convolutional neural network."IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP).2017.