Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

無線通信のための自己符号化器

この例では、自己符号化器を使用して無線チャネル経由で情報ビットを確実に送信するエンドツーエンドの通信システムをモデル化する方法を説明します。

はじめに

従来の自己符号化器は、データの圧縮 (符号化) を効率よく行う方法を学習する教師なしニューラル ネットワークです。自己符号化器は、元のデータと再構成されたデータの差が最小となるように圧縮表現からデータを再構成する方法も学習します。

従来の無線通信システムは、送信信号が劣化するチャネルでも信頼性の高いデータ送信を行えるように設計されています。これらのシステムは、チャネル符号化、変調、イコライズ、同期などを行う複数のコンポーネントで構成されています。各コンポーネントは、閉形式表現で到達するように単純化された数学モデルに基づいて、それぞれ個別に最適化されます。これに対し、自己符号化器では、送信機と受信機がまとめて同時に最適化されます。この同時最適化によって、従来のシステムよりも優れたパフォーマンスを実現できる可能性があります [1][2]

従来の自己符号化器は、通常、イメージの圧縮に使用されます。つまり、イメージに含まれる冗長性を排除してイメージの次元を減らすために使用されます。一方、無線通信システムは、チャネル符号化と変調方式を使用して情報ビットに冗長性を追加します。このシステムは、このように追加された冗長性を利用することで、無線チャネルで失われた情報ビットを復元できます。したがって、無線自己符号化器は、実際には、チャネル符号化と変調を適用する方法を教師なし手法で学習しながら、指定のチャネルで送信される情報に冗長性を追加して受信情報の誤り数を最小限に抑えようとします。

基本的な自己符号化器システム

次の図は、無線自己符号化器システムのブロック線図です。まず、符号化器 (送信機) によって、k 個の情報ビットが、s{1,,M} のようなメッセージ s にマッピングされます。ここで、M=2k です。次に、メッセージ s が n 個の実数にマッピングされ、x=f(s)Rn が作成されます。符号化器の最後の層によって、x に対してさらに制約が課せられ、符号化されたシンボルがさらに制約されます。そのような制約として次のものがあります。これらは正規化層を使用して実装されます。

  • エネルギーの制約: x22n

  • 平均強度の制約: E[|xi|2]1,i

このシステムの通信速度を R=k/n [ビット/使用チャネル数] として定義します。ここで、(n,k) は、このシステムが M=2k 個のメッセージのいずれかを "n" 個のチャネルを使用して送信することを意味します。このチャネルでは、符号化された (送信された) シンボルが劣化し、yRn が生成されます。復号化器 (受信機) は、送信されたメッセージ s の推定値 sˆ を生成します。

入力メッセージは one-hot ベクトル 1sRM として定義されます。これは、sth の要素が 1 で、その他の要素がすべて 0 であるベクトルとして定義されます。チャネルには、データ ビットごとのエネルギーとノイズ パワー密度の比率 Eb/No が指定の値に達するまでノイズを追加する加法性ホワイト ガウス ノイズ (AWGN) を使用します。

自己符号化器は、k 個のデータ ビットを n 個の使用チャネルにマッピングします。これにより、効率的な符号化速度 R=k/n [データ ビット/使用チャネル数] が得られます。次に、2 つの使用チャネルが 1 つのシンボルにマッピングされます。これにより、1 つのシンボルにつき 2 つのチャネルが使用されるようになります。チャネル シンボルごとの使用チャネル数の値を、AWGN チャネルの BitsPerSymbol パラメーターにマッピングします。

エネルギーが正規化された (7,4) 自己符号化器ネットワークと、3 dB の学習用 Eb/No を定義します。[1] の著者は、符号化器 (送信機) と復号化器 (受信機) の両方で 2 つの全結合層を使用すると、複雑度を最小限に抑えながら最適な結果が得られることを説明しています。入力層 (featureInputLayer (Deep Learning Toolbox)) は、長さ M の one-hot ベクトルを受け取ります。符号化器は 2 つの全結合層 (fullyConnectedLayer (Deep Learning Toolbox)) をもちます。最初の全結合層には M 個の入力と M 個の出力が含まれ、その後ろに ReLU 層 (reluLayer (Deep Learning Toolbox)) が続きます。2 番目の全結合層には M 個の入力と n 個の出力が含まれ、その後ろに正規化層 (helperAEWNormalizationLayer.m) が続きます。符号化器層の後ろには、AWGN チャネル層 (helperAEWAWGNLayer.m) が続きます。チャネルの出力は復号化器層に渡されます。最初の復号化器層は、n 個の入力と M 個の出力が含まれる全結合層で、その後ろに ReLU 層が続きます。2 番目の全結合層には M 個の入力と M 個の出力が含まれ、その後ろに、M 個の各シンボルの確率を出力するソフトマックス層 (softmaxLayer (Deep Learning Toolbox)) が続きます。分類層 (classificationLayer (Deep Learning Toolbox)) は、0 ~ M-1 のシンボルのうち送信されたシンボルである確率が最も高いものを出力します。

k = 4;    % number of input bits
M = 2^k;  % number of possible input symbols
n = 7;    % number of channel uses
EbNo = 3; % Eb/No in dB

% Convert Eb/No to channel Eb/No values using the code rate
R = k/n;
EbNoChannel = EbNo + 10*log10(R);

wirelessAutoencoder = [
  featureInputLayer(M,"Name","One-hot input","Normalization","none")
  
  fullyConnectedLayer(M,"Name","fc_1")
  reluLayer("Name","relu_1")
  
  fullyConnectedLayer(n,"Name","fc_2")
  
  helperAEWNormalizationLayer("Method", "Energy", "Name", "wnorm")
  
  helperAEWAWGNLayer("Name","channel", ...
    "NoiseMethod","EbNo", ...
    "EbNo",EbNoChannel, ...
    "BitsPerSymbol",2, ... % channel use per channel symbol
    "SignalPower",1)
  
  fullyConnectedLayer(M,"Name","fc_3")
  reluLayer("Name","relu_2")
  
  fullyConnectedLayer(M,"Name","fc_4")
  softmaxLayer("Name","softmax")
  
  classificationLayer("Name","classoutput")]
wirelessAutoencoder = 
  11x1 Layer array with layers:

     1   'One-hot input'   Feature Input            16 features
     2   'fc_1'            Fully Connected          16 fully connected layer
     3   'relu_1'          ReLU                     ReLU
     4   'fc_2'            Fully Connected          7 fully connected layer
     5   'wnorm'           Wireless Normalization   Energy normalization layer
     6   'channel'         AWGN Channel             AWGN channel with EbNo = 0.56962
     7   'fc_3'            Fully Connected          16 fully connected layer
     8   'relu_2'          ReLU                     ReLU
     9   'fc_4'            Fully Connected          16 fully connected layer
    10   'softmax'         Softmax                  softmax
    11   'classoutput'     Classification Output    crossentropyex

関数 helperAEWTrainWirelessAutoencoder.m は、(n,k)、正規化方式、および Eb/No の値に基づいて、そのようなネットワークを定義します。

自己符号化器の学習

関数 helperAEWTrainWirelessAutoencoder.m を実行し、エネルギーが正規化された (2,2) 自己符号化器に学習させます。この関数は、関数trainingOptions (Deep Learning Toolbox)を使用して以下を選択します。

  • Adam (適応モーメント推定) オプティマイザー

  • 初期学習率 0.08

  • エポックの最大回数 10

  • ミニバッチ サイズ 100*M

  • ドロップ周期 5、ドロップ係数 0.1 の区分的な学習率スケジュール

次に、関数 helperAEWTrainWirelessAutoencoder.m は、関数trainNetwork (Deep Learning Toolbox)を実行し、選択したオプションを使用して自己符号化器ネットワークに学習させます。最後に、この関数は、ネットワークを符号化器と復号化器に分割します。符号化器は、入力層で始まり、正規化層で終わります。復号化器は、チャネル層の後から始まり、分類層で終わります。復号化器の最初には、特徴入力層が追加されます。

Eb/No の値を使用して、自己符号化器に学習させます。このとき、いくつか誤りが発生する程度にこの値を低くしますが、学習アルゴリズムが受信シンボル y から有用な情報を抽出できなくなるほど低くはしません。Eb/No を 3 dB に設定します。

n = 2;                      % number of channel uses
k = 2;                      % number of input bits
EbNo = 3;                   % dB
normalization = "Energy";   % Normalization "Energy" | "Average power"

[txNet(1),rxNet(1),infoTemp,wirelessAutoEncoder(1)] = ...
  helperAEWTrainWirelessAutoencoder(n,k,normalization,EbNo);
infoTemp.n = n;
infoTemp.k = k;
infoTemp.EbNo = EbNo;
infoTemp.Normalization = normalization;
info = infoTemp;

学習の進行状況をプロットします。検証精度は直ちに 90% を超えますが、検証損失は緩やかに減少します。この動作は、学習用の Eb/No の値はいくつか誤りが発生する程度に低いものの、収束できなくなるほど低くはないことを示しています。検証精度と検証損失の定義については、深層学習における学習の進行状況の監視 (Deep Learning Toolbox)の節を参照してください。

figure
helperAEWPlotTrainingPerformance(info(1))

Figure contains an axes object. The axes object contains 2 objects of type line.

学習済みネットワーク オブジェクトのオブジェクト関数 plot を使用して、自己符号化器全体、符号化器ネットワーク (送信機)、および復号化器ネットワーク (受信機) の層グラフを表示します。

figure
tiledlayout(2,2)
nexttile([2 1])
plot(wirelessAutoEncoder(1))
title('Autoencoder')
nexttile
plot(txNet(1))
title('Encoder/Tx')
nexttile
plot(rxNet(1))
title('Decoder/Rx')

Figure contains 3 axes objects. Axes object 1 with title Autoencoder contains an object of type graphplot. Axes object 2 with title Encoder/Tx contains an object of type graphplot. Axes object 3 with title Decoder/Rx contains an object of type graphplot.

BLER 性能のシミュレーション

(2,2) 自己符号化器のブロック エラー レート (BLER) 性能をシミュレートします。シミュレーション パラメーターを設定します。

simParams.EbNoVec = 0:0.5:8;
simParams.MinNumErrors = 10;
simParams.MaxNumFrames = 300;
simParams.NumSymbolsPerFrame = 10000;
simParams.SignalPower = 1;

k 個のランダムな情報ビットを含められる [0 M-1] 範囲にランダムな整数を生成します。関数 helperAEWEncode を使用して、この情報ビットを複素シンボルに符号化します。関数 The helperAEWEncode は、自己符号化器の符号化器の部分を実行してから、奇数の要素と偶数の要素がそれぞれ複素シンボルの同相成分と直交成分にマッピングされるように、実数値 x ベクトルを複素数値 xc ベクトルにマッピングします。ここで、xc=x(1:2:end)+jx(2:2:end) です。つまり、インターリーブされた複素配列として配列 x を扱います。

AWGN チャネルを使用して複素シンボルを渡します。関数 helperAEWDecode を使用して、チャネルで劣化された複素シンボルを復号化します。次のコードは、各 Eb/No の点について、ブロック エラーが少なくとも 10 個発生するまでシミュレーションを実行します。より正確な結果を得るには、最小の誤り数を 100 以上に増やします。Parallel Computing Toolbox™ がインストールされており、ライセンスを使用できる場合、parfor の行のコメントを解除して並列プールでシミュレーションを実行できます。

AWGN チャネルでシンボルを送信するために自己符号化器が学習したコンスタレーション、および受信したコンスタレーションをプロットします。(2,2) の構成の場合、自己符号化器は、位相回転を伴う QPSK (M=2k=4) コンスタレーションを学習します。

R = k/n;
EbNoChannelVec = simParams.EbNoVec + 10*log10(R);
M = 2^k;
txConst = comm.ConstellationDiagram(ShowReferenceConstellation=false, ...
  ShowLegend=true, ChannelNames={'Tx Constellation'});
rxConst = comm.ConstellationDiagram(ShowReferenceConstellation=false, ...
  ShowLegend=true, ChannelNames={'Rx Constellation'});
BLER = zeros(size(EbNoChannelVec));
%parfor trainingEbNoIdx = 1:length(EbNoChannelVec)
for trainingEbNoIdx = 1:length(EbNoChannelVec)
  EbNo = EbNoChannelVec(trainingEbNoIdx);
  chan = comm.AWGNChannel("BitsPerSymbol",2, ...
    "EbNo", EbNo, "SamplesPerSymbol", 1, "SignalPower", 1);

  numBlockErrors = 0;
  frameCnt = 0;
  while (numBlockErrors < simParams.MinNumErrors) ...
      && (frameCnt < simParams.MaxNumFrames)

    d = randi([0 M-1],simParams.NumSymbolsPerFrame,1);    % Random information bits
    x = helperAEWEncode(d,txNet(1));                      % Encoder
    txConst(x)
    y = chan(x);                                          % Channel
    rxConst(y)
    dHat = helperAEWDecode(y,rxNet(1));                   % Decoder

    numBlockErrors = numBlockErrors + sum(d ~= dHat);
    frameCnt = frameCnt + 1;
  end
  BLER(trainingEbNoIdx) = numBlockErrors / (frameCnt*simParams.NumSymbolsPerFrame);
end

この結果を、ブロック長 n=2 である符号化なし QPSK システムの結果と比較します。n がこの値である場合、自己符号化器の BLER は符号化なし QPSK システムと同じになります。

figure
semilogy(simParams.EbNoVec,BLER,'-')
hold on
% Calculate uncoded block error rate (R=k/n=1)
pskBLER = 1-(1-berawgn(EbNoChannelVec,'psk',2^k,'nondiff')).^n;
semilogy(simParams.EbNoVec,pskBLER,'--')
hold off
ylim([1e-4 1])
grid on
xlabel('E_b/N_o (dB)')
ylabel('BLER')
legend(sprintf('AE (%d,%d)',n,k),sprintf('QPSK (%d,%d)',n,k))

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent AE (2,2), QPSK (2,2).

コンスタレーションがきれいな形をしており、BLER の結果が良好であるため、エポック数が 10 の学習で十分収束することがわかります。

コンスタレーション図の比較

単位エネルギーと単位平均強度に正規化された各自己符号化器について、学習されたコンスタレーションを比較します。単位エネルギーに正規化された (2,4) 自己符号化器に学習させます。

n = 2;      % number of channel uses
k = 4;      % number of input bits
EbNo = 9;   % dB
normalization = "Energy";

[txNet(2),rxNet(2),infoTemp,wirelessAutoEncoder(2)] = ...
  helperAEWTrainWirelessAutoencoder(n,k,normalization,EbNo);
infoTemp.n = n;
infoTemp.k = k;
infoTemp.EbNo = EbNo;
infoTemp.Normalization = normalization;
info(2) = infoTemp;

単位平均強度に正規化された (2,4) 自己符号化器に学習させます。

n = 2;      % number of channel uses
k = 4;      % number of input bits
EbNo = 6;   % dB
normalization = "Average power";

[txNet(3),rxNet(3),infoTemp,wirelessAutoEncoder(3)] = ...
  helperAEWTrainWirelessAutoencoder(n,k,normalization,EbNo);
infoTemp.n = n;
infoTemp.k = k;
infoTemp.EbNo = EbNo;
infoTemp.Normalization = normalization;
info(3) = infoTemp;

単位エネルギーに正規化された (7,4) 自己符号化器に学習させます。

n = 7;      % number of channel uses
k = 4;      % number of input bits
EbNo = 3;   % dB
normalization = "Energy";

[txNet(4),rxNet(4),infoTemp,wirelessAutoEncoder(4)] = ...
  helperAEWTrainWirelessAutoencoder(n,k,normalization,EbNo);
infoTemp.n = n;
infoTemp.k = k;
infoTemp.EbNo = EbNo;
infoTemp.Normalization = normalization;
info(4) = infoTemp;

関数 helperAEWPlotConstellation.m を使用してコンスタレーションをプロットします。学習済みの (2,2) 自己符号化器は、チャネルの条件に合わせてコンスタレーションが最適となるように位相がシフトされた QPSK コンスタレーションに収束します。エネルギーが正規化された (2,4) 自己符号化器は、位相シフトを伴う 16PSK コンスタレーションに収束します。エネルギーを正規化することで、各シンボルは単位エネルギーをもつようになり、単位円上にシンボルが配置されることに注意してください。この制約の下では、シンボル間の角距離が等しい PSK コンスタレーションが最適なコンスタレーションとなります。平均強度が正規化された (2,4) 自己符号化器は、各層が 1 個、6 個、9 個のシンボルをもつ 3 層コンスタレーションに収束します。平均強度を正規化することで、時間の経過に伴いシンボルの平均強度は単一になります。この制約の下では、従来の QAM スキームや APSK スキームとは異なる APSK コンスタレーションが得られます。このネットワーク構成は、学習時に使用するランダムな初期状態によっては各層が 7 個、9 個のシンボルをもつ 2 層コンスタレーションに収束する場合があります。最後のプロットには、エネルギーの制約がある (7,4) 自己符号化器によって生成された 7 次元コンスタレーションの 2 次元マッピングが示されています。この 2 次元マッピングは、t 分布型確率的近傍埋め込み法 (t-SNE) を使用して取得します (関数tsne (Statistics and Machine Learning Toolbox)を参照)。

figure
subplot(2,2,1)
helperAEWPlotConstellation(txNet(1))
title(sprintf('(%d,%d) %s',info(1).n,info(1).k,info(1).Normalization))
subplot(2,2,2)
helperAEWPlotConstellation(txNet(2))
title(sprintf('(%d,%d) %s',info(2).n,info(2).k,info(2).Normalization))
subplot(2,2,3)
helperAEWPlotConstellation(txNet(3))
title(sprintf('(%d,%d) %s',info(3).n,info(3).k,info(3).Normalization))
subplot(2,2,4)
helperAEWPlotConstellation(txNet(4),'t-sne')
title(sprintf('(%d,%d) %s',info(4).n,info(4).k,info(4).Normalization))

Figure contains 4 axes objects. Axes object 1 with title (2,2) Energy contains an object of type line. Axes object 2 with title (2,4) Energy contains an object of type line. Axes object 3 with title (2,4) Average power contains an object of type line. Axes object 4 with title (7,4) Energy contains 16 objects of type line.

符号化あり QPSK と符号化なし QPSK を使用した自己符号化器の BLER 性能の比較

(7,4) 自己符号化器と、硬判定および最尤 (ML) 復号化の QPSK 変調方式 (7,4) ハミング符号について、それぞれの BLER 性能をシミュレートします。符号化なし (4,4) QPSK を基準とします。符号化なし (4,4) QPSK は、基本的に、4 ビットのブロックを送信して BLER を測定する QPSK 変調システムです。次の図に使用するデータは、helperAEWSimulateBLER.mlx ファイルと helperAEWPrepareAutoencoders.mlx ファイルから取得します。

load codedBLERResults.mat
figure
qpsk44BLERTh = 1-(1-berawgn(simParams.EbNoVec,'psk',4,'nondiff')).^4;
semilogy(simParams.EbNoVec,qpsk44BLERTh,':*')
hold on
semilogy(simParams.EbNoVec,qpsk44BLER,':o')
semilogy(simParams.EbNoVec,hammingHard74BLER,'--s')
semilogy(simParams.EbNoVec,ae74eBLER,'-')
semilogy(simParams.EbNoVec,hammingML74BLER,'--d')
hold off
ylim([1e-5 1])
grid on
xlabel('E_b/N_o (dB)')
ylabel('BLER')
legend('Theoretical Uncoded QPSK (4,4)','Uncoded QPSK (4,4)','Hamming (7,4) Hard Decision', ...
  'Autoencoder (7,4)','Hamming (7,4) ML','Location','southwest')
title('BLER comparison of (7,4) Autoencoder')

Figure contains an axes object. The axes object with title BLER comparison of (7,4) Autoencoder contains 5 objects of type line. These objects represent Theoretical Uncoded QPSK (4,4), Uncoded QPSK (4,4), Hamming (7,4) Hard Decision, Autoencoder (7,4), Hamming (7,4) ML.

予期したとおり、硬判定の QPSK 変調方式 (7,4) ハミング符号は、符号化なし QPSK を使用する場合と比べて Eb/No が約 0.6 dB 優れています。一方、ML 復号化の QPSK 変調方式 (7,4) ハミング符号は、BLER が 10-3 の場合にさらに 1.5 dB 優れた性能を示しています。(7,4) 自己符号化器の BLER 性能は、3 dB の Eb/No で学習させた場合、ML 復号化の (7,4) ハミング符号に近い性能を示します。この BLER 性能は、自己符号化器が変調だけでなくチャネル符号化も学習できることを示しており、これによって符号化率が R=4/7 のときに約 2 dB の符号化ゲインが得られます。

次に、R=1 である自己符号化器の BLER 性能と、符号化なし QPSK システムの BLER 性能をシミュレートします。符号化なし (2,2) QPSK および符号化なし (8,8) QPSK を基準として使用します。これらのシステムの BLER 性能を、(2,2)、(4,4)、および (8,8) 自己符号化器の BLER 性能と比較します。

load uncodedBLERResults.mat
qpsk22BLERTh = 1-(1-berawgn(simParams.EbNoVec,'psk',4,'nondiff')).^2;
semilogy(simParams.EbNoVec,qpsk22BLERTh,':*')
hold on
semilogy(simParams.EbNoVec,qpsk88BLER,'--*')
qpsk88BLERTh = 1-(1-berawgn(simParams.EbNoVec,'psk',4,'nondiff')).^8;
semilogy(simParams.EbNoVec,qpsk88BLERTh,':o')
semilogy(simParams.EbNoVec,ae22eBLER,'-o')
semilogy(simParams.EbNoVec,ae44eBLER,'-d')
semilogy(simParams.EbNoVec,ae88eBLER,'-s')
hold off
ylim([1e-5 1])
grid on
xlabel('E_b/N_o (dB)')
ylabel('BLER')
legend('Uncoded QPSK (2,2)','Uncoded QPSK (8,8)','Theoretical Uncoded QPSK (8,8)', ...
  'Autoencoder (2,2)','Autoencoder (4,4)','Autoencoder (8,8)','Location','southwest')
title('BLER performance of R=1 Autoencoders')

Figure contains an axes object. The axes object with title BLER performance of R=1 Autoencoders contains 6 objects of type line. These objects represent Uncoded QPSK (2,2), Uncoded QPSK (8,8), Theoretical Uncoded QPSK (8,8), Autoencoder (2,2), Autoencoder (4,4), Autoencoder (8,8).

QPSK のビット エラー レートは、(8,8) と (2,2) のどちらの場合も同じです。ただし、BLER はブロック長 n に依存し、BLER=1-(1-BER)n からわかるように、n が大きくなるにつれて悪化します。予期したとおり、(8,8) QPSK の BLER 性能は、(2,2) QPSK システムより悪くなります。(2,2) 自己符号化器の BLER 性能は、(2,2) QPSK の BLER 性能に匹敵します。一方、(4,4) および (8,8) 自己符号化器は、チャネルの符号化器とコンスタレーションを同時に最適化するため、対応する符号化なし QPSK システムと比べて優れた符号化ゲインを得ることができます。

Eb/No の学習が BLER 性能に与える影響

Eb/No の値を変えながら、エネルギーが正規化された (7,4) 自己符号化器に学習させ、BLER 性能を比較します。simParams.EbNoVec を -2:0.5:8 に設定し、BLER 曲線を延長します。

n = 7;
k = 4;
normalization = 'Energy';
traningEbNoVec = -3:5:7;
simParams.EbNoVec = 0:4;
for trainingEbNoIdx = 1:length(traningEbNoVec)
  trainingEbNo = traningEbNoVec(trainingEbNoIdx);
  [txNetVec{trainingEbNoIdx},rxNetVec{trainingEbNoIdx},infoVec{trainingEbNoIdx},trainedNetVec{trainingEbNoIdx}] = ...
    helperAEWTrainWirelessAutoencoder(n,k,normalization,trainingEbNo); %#ok<SAGROW> 
  BLERVec{trainingEbNoIdx} = helperAEWAutoencoderBLER(txNetVec{trainingEbNoIdx},rxNetVec{trainingEbNoIdx},simParams); %#ok<SAGROW> 
end

BLER パフォーマンスに加えて、硬判定で復号化された (7,4) ハミング符号の理論上の上限と、最尤度復号化 (MLD) による (7,4) ハミング符号の BLER シミュレーションの結果をプロットします。(7,4) 自己符号化器の BLER 性能は、学習値 Eb/No が 10 dB から 1 dB に減少するにつれて MLD の (7,4) ハミング符号の BLER 性能に近づき、MLD の (7,4) ハミング符号とほぼ等しくなります。

berHamming = bercoding(simParams.EbNoVec,'hamming','hard',n);
blerHamming = 1-(1-berHamming).^k;
hammingBLER = load('codedBLERResults');
figure
semilogy(simParams.EbNoVec,blerHamming,':k')
legendStr = sprintf('(%d,%d) Hamming HDD Upper',n,k);
hold on
linespec = {'-*','-d','-o','-s',};
for trainingEbNoIdx=length(traningEbNoVec):-1:1
  semilogy(simParams.EbNoVec,BLERVec{trainingEbNoIdx},linespec{trainingEbNoIdx})
  legendStr = [legendStr {sprintf('(%d,%d) AE - Training Eb/No=%1.1f', ...
    n,k,traningEbNoVec(trainingEbNoIdx))}]; %#ok<AGROW> 
end
semilogy(hammingBLER.simParams.EbNoVec,hammingBLER.hammingML74BLER,'--vk')
legendStr = [legendStr {'Hamming (7,4) MLD'}];
hold off
xlim([min(simParams.EbNoVec) max(simParams.EbNoVec)])
grid on
xlabel('E_b/N_o (dB)')
ylabel('BLER')
legend(legendStr{:},'location','southwest')

Figure contains an axes object. The axes object contains 5 objects of type line. These objects represent (7,4) Hamming HDD Upper, (7,4) AE - Training Eb/No=7.0, (7,4) AE - Training Eb/No=2.0, (7,4) AE - Training Eb/No=-3.0, Hamming (7,4) MLD.

まとめとその他の調査

この BLER の結果から、自己符号化器では、符号化と変調スキームを教師なし手法で同時に学習できることがわかります。さらに、R=1 で自己符号化器に学習させることで、従来の手法に匹敵する符号化ゲインを得ることができます。また、この例は、Eb/No などのハイパーパラメーターが BLER 性能に与える影響についても示しています。

この結果は、以下の既定の設定を使用して学習と BLER のシミュレーションを行うことで得られます。

trainParams.Plots = 'none';
trainParams.Verbose = false;
trainParams.MaxEpochs = 10;
trainParams.InitialLearnRate = 0.08;
trainParams.LearnRateSchedule = 'piecewise';
trainParams.LearnRateDropPeriod = 5;
trainParams.LearnRateDropFactor = 0.1;
trainParams.MiniBatchSize = 100*2^k;

simParams.EbNoVec = -2:0.5:8;
simParams.MinNumErrors = 100;
simParams.MaxNumFrames = 300;
simParams.NumSymbolsPerFrame = 10000;
simParams.SignalPower = 1;

これらのパラメーターを変化させてさまざまな自己符号化器に学習させ、それらの BLER 性能をテストします。n、k、正規化、および Eb/No の値を変化させて実験を行います。helperAEWTrainWirelessAutoencoder.mhelperAEWPrepareAutoencoders.mlx、および helperAEWAutoencoderBLER.m の詳細については、ヘルプを参照してください。

補助関数のリスト

参考文献

[1] T. O’Shea and J. Hoydis, "An Introduction to Deep Learning for the Physical Layer," in IEEE Transactions on Cognitive Communications and Networking, vol. 3, no. 4, pp. 563-575, Dec. 2017, doi:10.1109/TCCN.2017.2758370.

[2] S. Dörner, S. Cammerer, J. Hoydis and S. t.Brink, "Deep Learning Based Communication Over the Air," in IEEE Journal of Selected Topics in Signal Processing, vol. 12, no. 1, pp. 132-143, Feb. 2018, doi:10.1109/JSTSP.2017.2784180.

参考

(Deep Learning Toolbox) | (Deep Learning Toolbox) | (Deep Learning Toolbox) | (Deep Learning Toolbox) | (Deep Learning Toolbox)

関連するトピック