メインコンテンツ

ビット エラー レート解析

通信システムの BER 性能の解析

説明

ビット エラー レート解析アプリは、ビット エラー レート (BER) をビットあたりのエネルギー対ノイズ パワー スペクトル密度比 (Eb/N0) の関数として計算します。このアプリを使って次のことを実行できます。

  • 次を利用して、通信システムに対する BER データの作成と性能解析を行う。

    • MATLAB® 関数および Simulink® モデルのモンテカルロ シミュレーション。

    • 選択されたタイプの通信システムに対応する理論上の閉形式表現。

    • MATLAB シミュレーション関数または Simulink モデルに含まれるシステムの実行。システムをシミュレートする関数またはモデルを作成した後、ビット エラー レート解析アプリは選択された Eb/N0 の値について反復し、結果を集める。

  • 1 つ以上の BER データ セットを 1 つの座標軸上にプロットする。シミュレーション データを、理論上の結果あるいは通信システムの一連のモデルからのシミュレーション データとグラフで比較できます。

  • 一連のシミュレーションデータを曲線近似する。

  • シミュレーション データの信頼水準をプロットする。

  • 他の処理を実行するために BER データを MATLAB ワークスペースまたはファイルに送る。

詳細については、Analyze Performance with Bit Error Rate Analysis Appを参照してください。

Bit Error Rate Analysis app

ビット エラー レート解析 アプリを開く

  • MATLAB ツールストリップ: [アプリ] タブの [信号処理と通信] でアプリのアイコンをクリックします。

  • MATLAB コマンド プロンプト: bertool と入力します。

すべて展開する

AWGN 環境下での 16-QAM リンクの BER 性能について理論的な推定を生成します。

ビット エラー レート解析アプリを開きます。

bertool

BER Analysis app mask

[Theoretical] タブで、次のパラメーターを指定値に設定します。[Eb/N0 range]0:10 に、[Modulation type]QAM に、[変調次数]16 に設定します。

[Plot] をクリックして、BER の曲線をプロットします。

Graphical plot of BER curve

カスタムの MATLAB 関数を使用して BER をシミュレーションします。既定では、viterbisim.m シミュレーションが使用されます。

ビット エラー レート解析アプリを開きます。

bertool

[Monte Carlo] タブで、[Eb/N0 range] パラメーターを 1:.5:6 に設定します。[Run] をクリックしてシミュレーションを実行し、BER の推定値をプロットします。

[Theoretical] タブで、[Eb/N0 range]1:6 に設定し、[変調次数][4] に設定します。[Convolutional] を選択して、畳み込み符号化を有効にします。[Plot] をクリックして、BER の曲線の理論的な上限をプロットに追加します。

Plot of the simulation upper bound and theoretical upper bound of the BER curve

Template for Simulation Functionトピックに示されているシミュレーション関数テンプレートに、ビット エラー レート解析[Monte Carlo] タブで実行するコードを追加します。

関数の準備

Template for Simulation Functionトピックからのテンプレートを MATLAB エディターの新しい MATLAB ファイルにコピーします。ファイル名 bertool_simfcn を使用してファイルを MATLAB パス上のフォルダーに保存します。

パラメーターを初期化するかシミュレーションで使用されるオブジェクトを作成するコード行を、Set up initial parameters とマークされたテンプレートの位置に置きます。このコードは、シミュレーション変数をテンプレートの入力引数にマッピングします。たとえば、snrEbNo にマッピングされます。

% Set up initial parameters.
siglen = 1000; % Number of bits in each trial
M = 2;         % DBPSK is binary
snr = EbNo;    % Because of binary modulation

% Create an ErrorRate calculator System object to compare 
% decoded symbols to the original transmitted symbols.
errorCalc = comm.ErrorRate;

コア シミュレーション タスクのためのコードを Proceed with simulation とマークされたテンプレートの位置に置きます。このコードには、すべての設定作業が実行された後のコア シミュレーション タスクが含まれます。

    msg = randi([0,M-1],siglen,1); % Generate message sequence
    txsig = dpskmod(msg,M);        % Modulate
    hChan.SignalPower = ...        % Calculate and assign signal power
        (txsig'*txsig)/length(txsig); 
    rxsig = awgn(txsig,snr,'measured'); % Add noise
    decodmsg = dpskdemod(rxsig,M);      % Demodulate
    berVec = errorCalc(msg,decodmsg);   % Calculate BER
    totErr = totErr + berVec(2);
    numBits = numBits + berVec(3);

これら 2 つのコード セクションをテンプレートに挿入すると、関数 bertool_simfcnビット エラー レート解析アプリの互換性が確保されます。結果のコードは次のコード セグメントのようになります。

function [ber,numBits] = bertool_simfcn(EbNo,maxNumErrs,maxNumBits,varargin)
%
%   See also BERTOOL and VITERBISIM.

% Copyright 2020 The MathWorks, Inc.

% Initialize variables related to exit criteria.
totErr = 0;  % Number of errors observed
numBits = 0; % Number of bits processed

% --- Set up the simulation parameters. ---
% --- INSERT YOUR CODE HERE.
% Set up initial parameters.
siglen = 1000; % Number of bits in each trial
M = 2;         % DBPSK is binary.
snr = EbNo;    % Because of binary modulation
% Create an ErrorRate calculator System object to compare
% decoded symbols to the original transmitted symbols.
errorCalc = comm.ErrorRate;

% Simulate until the number of errors exceeds maxNumErrs
% or the number of bits processed exceeds maxNumBits.
while((totErr < maxNumErrs) && (numBits < maxNumBits))

    % Check if the user clicked the Stop button of BERTool.
    if isBERToolSimulationStopped(varargin{:})
      break
    end
  
    % --- Proceed with the simulation.
    % --- Update totErr and numBits.
    % --- INSERT YOUR CODE HERE.
    msg = randi([0,M-1],siglen,1); % Generate message sequence
    txsig = dpskmod(msg,M);        % Modulate
    hChan.SignalPower = ...        % Calculate and assign signal power
        (txsig'*txsig)/length(txsig); 
    rxsig = awgn(txsig,snr,'measured'); % Add noise
    decodmsg = dpskdemod(rxsig,M);      % Demodulate
    berVec = errorCalc(msg,decodmsg);   % Calculate BER
    totErr = totErr + berVec(2);
    numBits = numBits + berVec(3);
end % End of loop

% Compute the BER.
ber = totErr/numBits;

この関数には、アプリを指定するための入力と、アプリが提供する EbNomaxNumErrs および maxNumBits のスカラー量を指定するための入力があります。関数はアプリの停止コマンドを監視して応答するため、ビット エラー レート解析アプリは入力になります。関数 bertool_simfcn ではプロット、曲線近似、信頼区間に関連するコードが除外されています。これは、ビット エラー レート解析アプリによってコードを記述せずに同様のタスクを対話形式で行うことができるためです。

準備した関数の使用

ビット エラー レート解析アプリで bertool_simfcn を実行します。

ビット エラー レート解析アプリを開いてから、[Monte Carlo] タブを選択します。

次のパラメーターを指定値に設定します。[Eb/N0 range]0:10 に、[Simulation environment]MATLAB に、[Function name]bertool_simfcn に、[Number of errors]5 に、[Number of bits]1e8 に設定します。

Parameter settings on the Monte Carlo tab of the Bit Error Rate Analysis app.

[実行] をクリックします。

ビット エラー レート解析アプリで結果が計算されてからプロットされます。この場合、シミュレーションでは EbNo の各値に対して 5 つの誤りしか必要としなかったので、結果が滑らかな曲線に乗らないように見えます。

DBPSK modulation BER plot generated with number of errors set to five.

BER Figure ウィンドウの一連の点を曲線近似するには、データ ビューアーで [Fit] パラメーターを選択します。

Data set listed in the data viewer pane of the Bit Error Rate Analysis app

次の図に示すように、ビット エラー レート解析アプリによって近似曲線がプロットされます。

DBPSK modulation BER plot with fitted curve.

ビット エラー レート解析アプリを使用して、Eb/N0 の関数として BER を計算します。アプリは、MATLAB® 関数および Simulink® モデルのモンテ カルロ シミュレーション、または選択されたタイプの通信システムに対応する理論上の閉形式表現のいずれかにより性能解析を行います。mpsksim.m 関数内のコードは、アプリの [モンテ カルロ] タブから実行できる M-PSK シミュレーションを提供します。

[アプリ] タブから ビット エラー レート解析アプリを開くか、または MATLAB コマンド ウィンドウで関数 bertool を実行してこのアプリを開きます。

[Monte Carlo] タブで、[Eb/N0 range] パラメーターを 1:1:5 に、[Function name] パラメーターを mpsksim に設定します。

関数 mpsksim を編集するために開き、M=2 を設定し、変更したファイルを保存します。

アプリの [Monte Carlo] タブで [Run] をクリックして、構成された関数 mpsksim.m を実行します。

アプリで一連の Eb/N0 点をシミュレーションしてから、[BER Data Set] フィールドで simulation0 を選択し、M=2 と入力して結果のセットの名前を変更することにより、BER データ セット結果の名前を更新します。BER 図の凡例でラベルが M=2 に更新されます。

関数 mpsksimM の値を M = 4816 に更新して、このプロセスを繰り返します。たとえば、ビット エラー レート解析アプリと BER Figure ウィンドウの図に、M 値の変化の結果が示されます。

ビット エラー レート解析アプリを使用した並列 SNR スイープ

ビット エラー レート解析アプリのモンテ カルロ処理の既定の構成では、Parallel Computing Toolbox™ ソフトウェアを使用している場合、並列プール処理を自動的に使用して個々の Eb/N0 ポイントを処理します。ただしシミュレーション コードの処理では次のようになります。

  • シミュレーション コード内のparfor関数ループはすべて標準forループとして実行される。

  • シミュレーション コード内のparfeval (Parallel Computing Toolbox)関数呼び出しはすべて順次実行される。

  • シミュレーション コード内のspmd (Parallel Computing Toolbox)ステートメント呼び出しはすべて順次実行される。

Copyright 2020 The MathWorks, Inc.

この例では、"ビット エラー レート解析" アプリの [Monte Carlo] タブで Simulink® モデルを実行し、Simulink® のシミュレーション結果の BER 性能と理論上の BER の結果を比較する方法を示します。

モデルとアプリの準備

例を開き、doc_bpsk モデルをコンピューターの作業フォルダーに読み込みます。

Simulink model of BPSK modulation simulation

ダウンロード先の作業ディレクトリから doc_bpsk モデルを開き、アプリ ギャラリーから "ビット エラー レート解析" アプリを開きます。Eb/N0 の範囲の制御、モデルの読み込み、結果の保存、および各 BER の反復の停止条件の設定を行うパラメーターは、"ビット エラー レート解析" アプリと Simulink® モデルで一致させなければなりません。

アプリの [Monte Carlo] タブで、次のようにします。

  • [Eb/N0 range] パラメーターを、変数名 EbNo にマッピングします。

  • [誤り数] パラメーターを、変数名 maxNumErrs にマッピングします。

  • [ビット数] パラメーターを、変数名 maxNumBits にマッピングします。

  • [Simulation environment][Simulink] を選択します。[モデル名]doc_bspk と入力し、[BER variable name]BER と入力します。

モデルは、コールバック関数 PreloadFcn を使用して、モデルのブロック パラメーターを設定する変数 EbNomaxNumErrs、および maxNumBits を初期化します。コールバック関数 PreloadFcn の詳細については、モデル コールバック (Simulink)を参照してください。アプリがモデルを間違いなく制御できるように、モデル内で次のことを確認します。

  • AWGN Channel ブロックで、[Es/No (dB)]EbNo に設定されている。BPSK 変調の場合、Es/N0Eb/N0 と等しくなります。

  • Error Rate Calculation ブロックで、[誤りの目標数]maxNumErrs に設定され、[シンボルの最大数]maxNumBits に設定されている。

  • To Workspace ブロックで、[変数名]BER に設定されている。

  • モデルの [シミュレーション] で、[終了時間]Inf に設定されている。

準備したモデルの使用

"ビット エラー レート解析" アプリの [Monte Carlo] タブで、次のように設定します。

  • [Eb/N0 range]0:9

  • [誤り数]100

  • [ビット数]1e8

Parameter settings on the Monte Carlo tab of the Bit Error Rate Analysis app

[実行] をクリックします。ビット エラー レート解析アプリで結果が計算されてからプロットされます。

BER figure of BSPK modulation

これらのシミュレーション結果を理論上の結果と比較するには、アプリの [Theoretical] タブをクリックし、[Eb/N0 range]0:9 に設定します。

Theoretical tab on Bit Error Rate Analysis app configured for BPSK modulation

[プロット] をクリックします。

アプリによって、BER Figure ウィンドウに前のシミュレーション結果と共に理論曲線がプロットされます。

BER figure of BSPK modulation with theoretical results curve

パラメーター

すべて展開する

Theoretical

BER を評価する Eb/N0 値の範囲。スカラーまたはベクトルとして指定します。単位は dB です。

例: 5:10 は、[5, 10] の範囲における 1 dB 刻みでの Eb/N0 値の評価を指定します。

BER を評価するチャネルのタイプ。[AWGN][Rayleigh] または [Rician] として指定します。[Rayleigh] および [Rician] オプションは、フラット フェージング チャネルに対応します。

通信リンクの変調タイプ。[PSK][DPSK][OQPSK][PAM][QAM][FSK][MSK] または [CPFSK] として指定します。

通信リンクの変調次数。[2][4][8][16][32] または [64] として指定します。

入力データの差分符号化を有効にするには、このパラメーターをオンにします。

相関係数。範囲 [-1, 1] の実数スカラーとして指定します。

依存関係

このパラメーターを有効にするには、[Modulation type][FSK] に設定します。

変調指数。正の実数スカラーとして指定します。

依存関係

このパラメーターを有効にするには、[Modulation type][CPFSK] に設定します。

  • 入力データの同期復調を有効にするには、このパラメーターをオンにします。

  • 入力データの非同期復調を有効にするには、このパラメーターをオフにします。

依存関係

このパラメーターを有効にするには、[Modulation type][FSK] または [MSK] に設定します。

理論上の BER の推定時に使用するチャネル符号化タイプ。[None][Convolutional] または [Block] として指定します。

復調処理での同期エラー。[Perfect synchronization][Normalized timing error] または [RMS phase noise (rad)] として指定します。

  • [Synchronization][Perfect synchronization] に設定すると、復調処理で同期エラーは発生しません。

  • [Synchronization][Normalized timing error] に設定すると、正規化されたタイミング誤差を範囲が [0, 0.5] のスカラーとして設定できます。

  • [Synchronization][RMS phase noise (rad)] に設定すると、RMS 位相ノイズ レベルを非負のスカラーとして設定できます。単位はラジアンです。

依存関係

このパラメーターを有効にするには、[Modulation type][PSK] に、[変調次数][2] に、[Channel coding][None] に設定します。

受信したデータを復号化するために使用する復号化判定方法。[Hard] または [Soft] として指定します。

依存関係

このパラメーターを有効にするには、[Channel coding][Convolutional] に設定するか、[Channel coding][Block] に設定し、[Coding type][General] に設定します。

畳み込み符号のトレリス。構造体変数として指定します。関数 poly2trellis を使用することによって、この構造体を生成できます。

依存関係

このパラメーターを有効にするには、[Channel coding][Convolutional] に設定します。

BER の評価で使用するブロック符号化タイプ。[General][Hamming][Golay] または [Reed-Solomon] として指定します。

依存関係

このパラメーターを有効にするには、[Channel coding][Block] に設定します。

コードワード長。正の整数として指定します。

依存関係

このパラメーターを有効にするには、[Channel coding][Block] に設定し、[Coding type][General] に設定します。

メッセージ長。正の整数で [K][N] よりも小さくなるように指定します。

依存関係

このパラメーターを有効にするには、[Channel coding][Block] に設定し、[Coding type][General] に設定します。

([N],[K]) ブロック符号の最小距離。正の整数として指定します。

依存関係

このパラメーターを有効にするには、[Channel coding][Block] に設定し、[Coding type][General] に設定します。

Monte Carlo

BER を評価する Eb/N0 値の範囲。スカラーまたはベクトルとして指定します。単位は dB です。

例: 4:2:10 は、[4, 10] の範囲における 2 dB 刻みでの Eb/N0 の評価を指定します。

シミュレーション環境。[MATLAB] または [Simulink] として指定します。

モンテカルロ シミュレーションのためにアプリで実行される MATLAB 関数の名前。

依存関係

このパラメーターを有効にするには、[Simulation environment][MATLAB] に設定します。

モンテカルロ シミュレーションのためにアプリで実行される Simulink モデルの名前。

依存関係

このパラメーターを有効にするには、[Simulation environment][Simulink] に設定します。

BER シミュレーション データを含む変数の名前。BER シミュレーション データを MATLAB ワークスペースに出力するには、この変数名として To Workspace ブロックの [変数名] パラメーター値を割り当てます。

ヒント

To Workspace ブロックを DSP System Toolbox™ / Sinks サブライブラリから選択します。詳細については、通信システム シミュレーション用の To Workspace ブロックの構成を参照してください。

依存関係

このパラメーターを有効にするには、[Simulation environment][Simulink] に設定します。

シミュレーションを停止するまでに測定する誤り数。正の整数として指定します。通常、正確な BER の推定を生成するには、100 件の誤りを測定すれば十分です。

シミュレーションを停止するまでに処理するビット数。正の整数として指定します。このパラメーターは、シミュレーションが長時間実行されるのを防ぐために使用します。

メモ

モンテカルロ シミュレーションでは、誤り数またはビット数のいずれかのしきい値に到達すると停止します。

ヒント

  • [Monte Carlo Simulation] ダイアログ ボックスで [Stop] をクリックするとシミュレーションを停止できます。

    Monte Carlo Simulation progress dialog box, which has a stop button

バージョン履歴

R2006a より前に導入

すべて展開する