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

commtest.ErrorRate

(削除予定) 誤り率テスト コンソールの作成

互換性

commtest.ErrorRate は将来のリリースで削除される予定です。代わりに comm.ErrorRate または bertool を使用してください。詳細については、互換性の考慮事項を参照してください。

構文

h = commtest.ErrorRate
h = commtest.ErrorRate(sys)
h = commtest.ErrorRate(sys,'PropertyName',PropertyValue,...)
h = commtest.ErrorRate('PropertyName',PropertyValue,...)

説明

h = commtest.ErrorRate は誤り率テスト コンソール h 返します。誤り率テスト コンソールは誤り率を取得するためにテスト対象のシステムのシミュレーションを実行します。

h = commtest.ErrorRate(sys) は、指定された各プロパティを h に設定し、関連付けられたテスト対象システム SYS で誤り率テスト コンソール h を返します。

h = commtest.ErrorRate(sys,'PropertyName',PropertyValue,...) は関連付けられたテスト対象のシステム sys で誤り率テスト コンソール h を返します。指定された各プロパティ PropertyName は指定された値 PropertyValue に設定されます。

h = commtest.ErrorRate('PropertyName',PropertyValue,...) は、指定された各プロパティ 'PropertyName' を指定の値 PropertyValue に設定して、誤り率テスト コンソール h を返します。

プロパティ

誤り率テスト コンソール オブジェクトには、次の表のプロパティがあります。いずれのプロパティを設定しても、オブジェクトがリセットされます。"関連しない" プロパティとは、設定できても値が測定値に影響を及ぼさないプロパティです。同様に、disp メソッドを使用して関連しないプロパティを表示することもできません。明示されていない限り、どのプロパティも書き換え可能です。

プロパティ説明
説明'誤り率テスト コンソール'。読み取り専用。
SystemUnderTestNameテスト対象システムの名前。読み取り専用。
FrameLength

各反復での伝送フレームの長さを指定します。このプロパティは、テスト対象システムが有効なテスト入力を登録したときに初めて有意になります。

  • テスト対象システムが NumTransmissions テスト入力を登録し、その getInput メソッドを呼び出すと、誤り率テスト コンソールは FrameLength に保存された値を返します。内部のデータ ソースを使用して、テスト対象システムはこの値によって指定された長さの伝送フレームを生成します。

  • テスト対象システムが DiscreteRandomSource テスト入力を登録し、その getInput メソッドを呼び出すと、誤り率テスト コンソールはシンボルのフレームを生成して返します。シンボルのフレームの長さは FrameLength プロパティと一致します。このプロパティの既定値は 500 です。

IterationMode

オブジェクトがシミュレーション ポイントを決定する方法を指定します。

  • Combinatorial に設定すると、オブジェクトは登録済みのテスト パラメーター スイープ値の可能な組み合わせのすべてのシミュレーションを実行します。

  • Indexed に設定すると、オブジェクトはインデックス付きスイープ値セットのすべてのシミュレーションを実行します。ith スイープ値セットは、各スイープ値ベクトルまたは各登録済みテスト パラメーターの ith 要素で構成されます。すべてのスイープ値ベクトルは、単位長である値を除き、同じ長さでなければなりません。

次のスイープ パラメーター設定については、このことに注意してください。

  • Parameter1 = [a1 a2]

  • Parameter2 = [b1 b2]

  • Parameter3 = [c1]

インデックス付きモードでは、テスト コンソールは次のスイープ パラメーター セットについてシミュレーションを実行します。

(a1, b1, c1)

(a2, b2, c1)

連結モードでは、テスト コンソールは次のスイープ パラメーター セットについてシミュレーションを実行します。

(a1, b1, c1)

(a1, b2, c1)

(a2, b1, c1)

(a2, b2, c1)

SystemResetMode

システムがリセットされるシミュレーションの実行の段階を指定します。

  • Reset at new simulation point に設定すると、テスト対象システムは新しいシミュレーション ポイントの冒頭にリセットされます。

  • Reset at every iteration に設定すると、テスト対象システムは反復のたびにリセットされます。

SimulationLimitOption

スイープ パラメーター ポイントごとにシミュレーションの停止方法を指定します。

  • Number of transmissions に設定すると、スイープ パラメーター ポイントのシミュレーションは伝送回数が MaxNumTransmissions と等しくなると停止します。

    • MaxNumTransmissions と比較する伝送回数を含む登録済みテスト ポイントの名前に TransmissionCountTestPoint を設定します。

  • Number of errors に設定すると、スイープ パラメーター ポイントのシミュレーションは誤り数が MinNumErrors と等しくなると停止します。

    • MinNumErrors と比較する誤り数を含む登録済みテスト ポイントの名前に ErrorCountTestPoint を設定します。

  • Number of errors or transmissions に設定すると、2 つの条件の 1 つを満たす場合にスイープ パラメーター ポイントのシミュレーションが停止します。

    • シミュレーションは、伝送回数が MaxNumTransmissions の値と一致すると停止します。

    • NumErrors と一致する誤り数を取得するとシミュレーションは停止します。

  • このプロパティを Number of errors and transmissions に設定すると、次の条件を満たす場合にスイープ パラメーター ポイントのシミュレーションが停止します。

    • 伝送回数 "および" 誤り数が少なくとも MinNumTransmissionsMinNumErrors の値に達したときにシミュレーションは停止します。

MaxNumTransmissions プロパティと比較する伝送回数を含む登録済みテスト ポイントの名前に TransmissionCountTestPoint を設定します。

シミュレーションの長さを制御するには、MinNumErrors と比較する誤り数を含む登録済みテスト ポイントの名前に ErrorCountTestPoint を設定します。

有効な登録済みテスト ポイント名を表示するには、誤り率テスト コンソールの info メソッドを呼び出します。

MaxNumTransmissions

スイープ パラメーター ポイントのシミュレーション停止までにオブジェクトがカウントする最大伝送回数を指定します。このプロパティは、SimulationLimitOptionNumber of transmissions または Number of errors or transmissions のときにのみ有意になります。

  • SimulationLimitOptionNumber of transmissions に設定した場合、MaxNumTransmissions で指定される伝送回数に達すると各スイープ パラメーター ポイントのシミュレーションは停止します。

  • SimulationLimitOptionNumber of errors or transmissions に設定すると、各スイープ パラメーター ポイントのシミュレーションは、2 つの条件の 1 つが満たされると停止します。

    • MaxNumTransmissions で指定された伝送回数が完了すると、シミュレーションは停止します。

    • MinNumErrors で指定された誤り数を取得するとシミュレーションは停止します。

TransmissionCountTestPoint プロパティは、カウント伝送タイプを含む登録済みテスト ポイントの名前を指定します。誤り率テスト コンソールの info メソッドを呼び出すと、有効な登録済みテスト ポイントが表示されます。このプロパティに登録済みテスト ポイントが含まれる場合、テスト コンソールは各スイープ パラメーター ポイントについて MaxNumTransmissions の値と等しい回数だけ反復を実行します。このプロパティに登録済みテスト パラメーターがない場合は、テスト コンソールは MaxNumTransmissions の値と等しい回数だけ反復を実行して停止します。既定値は 1000 です。

MinNumErrors

スイープ パラメーター ポイントのシミュレーション停止までにオブジェクトがカウントする最小誤り数を指定します。このプロパティは、SimulationLimitOptionNumber of errors または Number of errors or transmissions に設定した場合にのみ有意になります。

  • SimulationLimitOptionNumber of errors に設定した場合、MinNumErrors プロパティで指定した誤り数に達すると、各パラメーター ポイントのシミュレーションは停止します。

  • SimulationLimitOption プロパティを Number of errors or transmissions に設定すると、各スイープ パラメーター ポイントのシミュレーションは 2 つの条件の 1 つが満たされると停止します。

    • MaxNumTransmissions プロパティで指定された誤り数に達するとシミュレーションは停止します。

    • MinNumErrors プロパティで指定された誤り数に達するとシミュレーションは停止します。

ErrorCountTestPoint プロパティをカウントを含む登録済みテスト ポイントの名前に設定することで、誤り数で使用するエラーのタイプを指定します。有効な登録済みテスト ポイント名を表示するには、誤り率テスト コンソールの info メソッドを呼び出します。この既定値は 100 です。

TransmissionCountTestPoint

テスト コンソールのシミュレーションの停止メカニズムを制御する伝送回数を含むテスト ポイントを指定して登録します。このプロパティは、SimulationLimitOptionNumber of transmissionsNumber of errors or transmissionsNumber of errors and transmissions のいずれかに設定した場合にのみ有意になります。このシナリオでは、テスト ポイントを登録した場合、TransmissionCountTestPointNot set と等しいと、このプロパティの値が登録済みテスト ポイント名の値に自動的に更新されます。有効なテスト ポイント名を表示するには、info メソッドを呼び出します。

ErrorCountTestPoint

シミュレーションの停止メカニズムを制御する誤り数を含むテスト ポイント名を指定して登録します。このプロパティは、SimulationLimitOption プロパティを Number of errorsNumber of errors or transmissionsNumber of errors and transmissions のいずれかに設定した場合にのみ有意になります。このシナリオでは、テスト ポイントを登録した場合、ErrorCountTestPointNot set と等しいと、このプロパティの値が登録済みテスト ポイント名の値に自動的に更新されます。有効なテスト ポイント名を表示するには、info メソッドを呼び出します。

メソッド

誤り率テスト コンソール オブジェクトには、以下のメソッドがあります。

run

シミュレーションを実行します。

テスト対象システムに対して指定した数の誤り率シミュレーションを指定したパラメーター値のセットで実行します。Parallel Computing Toolbox™ ライセンスが使用可能で、parpool が開いている場合は、このオブジェクトは使用可能な数のワーカー間に反復を分散させます。

getResults

シミュレーション結果を取得します。

r = getResults(h) は誤り率テスト コンソール h のシミュレーション結果 r を返します。r は testconsole.Results を使用して指定する型のオブジェクトです。登録済みのすべてのテスト ポイントのシミュレーション データ、およびデータを解析しプロットするメソッドを含みます。

info

現在のテスト コンソール設定のレポートを返します。

info(h) は、登録済みテスト パラメーターや登録済みテスト ポイントなどの現在のテスト コンソール設定を表示します。

reset

誤り率テスト コンソールをリセットします。

reset(h) は、テスト パラメーターおよびテスト プローブをリセットし、テスト コンソール h のすべてのシミュレーション結果をクリアします。

attachSystem

システムをテスト コンソールに関連付けます。

attachSystem(ho,sys) は有効なユーザー定義システム sys をテスト コンソール h に関連付けます。

detachSystem

テスト コンソールからシステムを分離します。

detachSystem(h) はテスト コンソール h からシステムを分離します。さらに、このメソッドは登録済みテスト入力、テスト パラメーター、テスト プローブ、テスト ポイントもクリアします。

setTestParameterSweepValues

テスト パラメーター スイープ値を設定します。

setTestParameterSweepValues(h,name,sweep) は、テスト コンソール h で登録済みテスト パラメーター 'name' に対する一連のスイープ値 'sweep' を指定します。登録済みテスト パラメーターのスイープ値のみを指定します。sweep の値は、テスト パラメーターの指定範囲内でなければなりません。数値の行ベクトルの場合も文字値のセル配列の場合もあります。getTestParameterValidRangesメソッドを使用して有効範囲を表示します。

setTestParameterSweepValues(h,name1,sweep1,name2,sweep2...) は、複数の登録済みテスト パラメーターのスイープ値を同時に指定します。

getTestParameterSweepValues

テスト パラメーター スイープ値を返します。

getTestParameterSweepValues(h,name) は、テスト コンソール h で登録済みテスト パラメーターに対して現在指定されているスイープ値を取得します。

getTestParameterValidRanges

テスト パラメーターの有効範囲を返します。

getTestParameterSweepValues(h,name) は、テスト コンソール h で登録済みテスト パラメーター name に対して有効な範囲を取得します。

registerTestPoint

テスト ポイントを登録します。

registerTestPoint(h, name, actprobe,expprobe) は、新しいテスト ポイント オブジェクト name を誤り率テスト コンソール h に登録します。テスト ポイントには、2 つの登録済みテスト プローブ actprobe と expprobe を含まなければなりません。actprobe には実際のデータが、expprobe には予想されるデータが含まれます。このオブジェクトは、これらのプローブからのデータを比較し、誤り率の値を取得します。誤り率の計算では、プローブ内の使用可能なデータ ベクトルの 1 対 1 の比較を実行する既定の誤り率計算機関数を使用します。

registerTestPoint(h, name, actprobe,expprobe, handle) は、プローブ内のデータを比較して誤り率結果を取得するユーザー定義の誤差計算関数にハンドル handle を追加します。

ユーザー定義の誤り計算関数は次の構文に従わなければなりません。[ecnt tcnt] = functionName(act, exp, udata)、ここで

  • ecnt 出力は誤り数に対応します。

  • tcnt 出力は、誤り数の取得に使用する伝送回数です。

  • act および exp は、実際のデータと予想されるデータに対応します。

誤り率テスト コンソールは、2 つのテスト ポイント プローブ actprobe と expprobe で使用できるデータに入力を設定します。

udata は、実行時にテスト対象システムが setUserData メソッドを使用してテスト コンソールに渡すデータ入力です。udata には遅延やデータ バッファーなどの誤差の計算に必要なデータが含まれます。

誤り率テスト コンソールは、すべての登録済みテスト ポイントについてテスト対象システムがログを取るデータを、誤差計算関数に渡します。info メソッドを呼び出すと、登録済みテスト ポイントの名前とそれらに関連する誤り率計算関数が返されます。さらに、登録済みテスト プローブの名前も返されます。

unregisterTestPoint

テスト ポイントの登録を解除します。

unregisterTestPoint(h,name) は、テスト ポイント name をテスト コンソール h から除去します。

すべて折りたたむ

commtest.ErrorRate および testconsole.Results オブジェクト パッケージは将来のリリースで削除される予定です。これらは、パラメーター スイープを実行して通信システムの性能を分析するために使用できます。この例では、これらを使用するワークフローと推奨される代替ワークフローを示します。

commtest.ErrorRate を使用した複数パラメーター スイープと並列実行

さまざまな変調次数と EbNo 値に対して M-PSK システムのビット誤り率とシンボル誤り率を取得します。テスト対象システムは commtest.MPSKSystem です。

% Create an M-ary PSK system
systemUnderTest = commtest.MPSKSystem;

% Instantiate an Error Rate Test Console and attach the system
errorRateTester = commtest.ErrorRate(systemUnderTest);
Warning: commtest.ErrorRate will be removed in the future. Use comm.ErrorRate or bertool instead. See <a href="matlab:helpview(fullfile(docroot, 'toolbox', 'comm', 'comm.map'), 'REMOVE_commtest_errorrate')">R2019b Communications Toolbox Release Notes</a> for more information.
errorRateTester.SimulationLimitOption = 'Number of errors or transmissions';
errorRateTester.MaxNumTransmissions = 1e5;

% Set sweep values for simulation test parameters
setTestParameterSweepValues(errorRateTester,'M',2.^[1 2 3 4],'EbNo',(-5:10))

% Register a test point
registerTestPoint(errorRateTester,'MPSK_BER','TxInputBits','RxOutputBits')

% Get information about the simulation settings
info(errorRateTester)
Test console name:           commtest.ErrorRate
System under test name:      commtest.MPSKSystem
Available test inputs:       NumTransmissions, RandomIntegerSource
Registered test inputs:      NumTransmissions
Registered test parameters:  EbNo, M
Registered test probes:      RxOutputBits, RxOutputSymbols, TxInputBits, TxInputSymbols
Registered test points:      MPSK_BER
Metric calculator functions: @commtest.ErrorRate.defaultErrorCalculator
Test metrics:                ErrorCount, TransmissionCount, ErrorRate
% Run the M-PSK simulations
run(errorRateTester)
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 12).
12 workers available for parallel computing. Simulations will be distributed among these workers. 
Running simulations...
% Get the results
mpskResults = getResults(errorRateTester);
Warning: testconsole.Results will be removed in the future. See <a href="matlab:helpview(fullfile(docroot, 'toolbox', 'comm', 'comm.map'), 'REMOVE_commtest_errorrate')">R2019b Communications Toolbox Release Notes</a> for more information.
% Get a semi-log scale plot of EbNo versus bit error rate for
% different values of modulation order M
mpskResults.TestParameter2 = 'M';
semilogy(mpskResults,'*-')

入れ子にされた for ループと comm.ErrorRate を使用した複数パラメーター スイープと並列実行

M=2.^(1:4) および EbNo=-5:10 で誤り率シミュレーションを実行します。comm.ErrorRate を使用して、ビット誤り率 (BER) とシンボル誤り率 (SER) の両方のデータを収集します。シミュレーションを実行し、最小 100 個のシンボル誤りまたは最大 1e5 個のシンボルを収集します。

% Set the M sweep values same as the commtest.ErrorRate object
getTestParameterSweepValues(errorRateTester,'M')
ans = 1×4

     2     4     8    16

MSweep = 2.^[1 2 3 4];
% Set EbNo sweep values same as the commtest.ErrorRate object
getTestParameterSweepValues(errorRateTester,'EbNo')
ans = 1×16

    -5    -4    -3    -2    -1     0     1     2     3     4     5     6     7     8     9    10

EbNoSweep = -5:10;
% Set minumum number of errors same as the commtest.ErrorRate object
errorRateTester.MinNumErrors
ans = 100
minNumErrors = 100;
% Set maximum number of transmissions same as the commtest.ErrorRate
% object. In this example a transmission is a symbol.
errorRateTester.MaxNumTransmissions
ans = 100000
MaxNumTransmissions = 1e5;
% Set frame length same as the commtest.ErrorRate object
errorRateTester.FrameLength
ans = 500
frameLength = 500;
% Find out if there is a parallel pool and how many workers are available
[licensePCT,~] = license('checkout','distrib_computing_toolbox');
if (licensePCT && ~isempty(ver('parallel')))
    p = gcp;
    if isempty(p)
        numWorkers = 1;
    else
        numWorkers = p.NumWorkers
    end
else
    numWorkers = 1;
end
numWorkers = 12
minNumErrorsPerWorker = minNumErrors/numWorkers;
maxNumSymbolsPerWorker = MaxNumTransmissions/numWorkers;

% Store results in an array, where first dimension is M and second
% dimension is EbNo. Initialize the vector with NaN values.
ser = nan(length(MSweep),length(EbNoSweep));
ber = nan(length(MSweep),length(EbNoSweep));

% First sweep is over M (modulation order)
for MIdx = 1:length(MSweep)
    M = MSweep(MIdx);
    bitsPerSymbol = log2(M);
    
    % Second sweep is over EbNo
    for EbNoIdx = 1:length(EbNoSweep)
        EbNo = EbNoSweep(EbNoIdx);
        
        SNR = EbNo+10*log10(bitsPerSymbol);
        
        numSymbolErrors = zeros(numWorkers,1);
        numBitErrors = zeros(numWorkers,1);
        numSymbols = zeros(numWorkers,1);
        
        parfor worker = 1:numWorkers
            symErrRate = comm.ErrorRate;
            bitErrRate = comm.ErrorRate;
            
            while (numSymbolErrors(worker) < minNumErrorsPerWorker) ...
                    || (numSymbols(worker) < maxNumSymbolsPerWorker)
                % Generate frameLength source outputs
                txMsg = randi([0 M-1],frameLength,1);
                
                % Modulate the data
                txOutput = pskmod(txMsg,M,0,'gray');
                % Pass data through an AWGN channel with current SNR value
                chnlOutput  = awgn(txOutput,SNR,'measured',[],'dB');
                % Demodulate the data
                rxOutput = pskdemod(chnlOutput,M,0,'gray');
                
                % Calculate number of symbol errors
                symErrVal = symErrRate(txMsg,rxOutput);
                numSymbolErrors(worker) = symErrVal(2);
                numSymbols(worker) = symErrVal(3);
                
                % Convert symbol streams to bit streams
                bTx = de2bi(txMsg,bitsPerSymbol,'left-msb')';
                bTx = bTx(:);
                bRx = de2bi(rxOutput,bitsPerSymbol,'left-msb')';
                bRx = bRx(:);
                
                % Calculate number of bit errors
                bitErrVal = bitErrRate(bTx,bRx);
                numBitErrors(worker) = bitErrVal(2);
            end
        end
        
        ber(MIdx,EbNoIdx) = sum(numBitErrors)/(sum(numSymbols)*bitsPerSymbol);
        ser(MIdx,EbNoIdx) = sum(numSymbolErrors)/sum(numSymbols);
    end
end
% Plot results
semilogy(EbNoSweep,ber,'*-')
grid on
title('MPSK BER')
xlabel('Eb/No')
ylabel('BER')
legendText = cell(length(MSweep),1);
for p=1:length(MSweep)
    legendText{p} = sprintf('M: %d',MSweep(p));
end
legend(legendText)

BERTool を使用した複数変数のスイープ

BERTool は、S/N 比の関数として BER を計算します。これは、MATLAB® 関数および Simulink® モデルのモンテカルロ シミュレーション、または選択されたタイプの通信システムに対応する閉形式の理論式のいずれかにより性能解析を行います。関数 bertoolBERTool を開きます。ここで、BERTool を設定して、以下に含まれる関数 mpsksim で定義されたシミュレーションを呼び出します。

function [ber,numBits] = mpsksim(EbNo,minNumErrs,maxNumBits)
% Import the Java class for BERTool, so that you will be able to stop the simulation using the "Stop" button on the BERTool.
import com.mathworks.toolbox.comm.BERTool;

frameLength = 500;

M = 16; % Can be 2, 4, 8, 16
bitsPerSymbol = log2(M);

maxNumSymbols = maxNumBits/bitsPerSymbol;

SNR = EbNo + 10*log10(bitsPerSymbol);

% Initialize variables related to exit criteria.
numBitErrors = 0;
numSymbols = 0;

while (numBitErrors < minNumErrs) || (numSymbols < maxNumSymbols)
  
  % Check if the user clicked the Stop button of BERTool.
  if (BERTool.getSimulationStop)
    break;
  end
  
  % Generate frameLength source outputs
  txMsg = randi([0 M-1],frameLength,1);
  numSymbols = numSymbols+frameLength;
  
  % Modulate the data
  txOutput = pskmod(txMsg,M,0,'gray');
  % Pass data through an AWGN channel with current SNR value
  chnlOutput  = awgn(txOutput,SNR,'measured',[],'dB');
  % Demodulate the data
  rxOutput = pskdemod(chnlOutput,M,0,'gray');
  
  % Convert symbol streams to bit streams
  bTx = de2bi(txMsg,bitsPerSymbol,'left-msb')';
  bTx = bTx(:);
  bRx = de2bi(rxOutput,bitsPerSymbol,'left-msb')';
  bRx = bRx(:);
  
  % Calculate number of bit errors
  numBitErrors = numBitErrors+sum(bTx~=bRx);
end

% Assign values to the output variables.
numBits = numSymbols*bitsPerSymbol;
ber = numBitErrors/numBits;

次のように BERTool を設定します。

関数 mpsksim で M=2 に設定し、[Run] をクリックします。[BER Data Set] 名を 'M=2' に設定します。

M=2 の BER 曲線を表示します。

関数 mpsksimM の値を M = 4816 に更新して、このプロセスを繰り返します。[Bit Error Rate Analysis Tool] ウィンドウと BER の図に以下のような結果が表示されます。

BERTool を使用した並列 SNR スイープ

シミュレーションに使用する関数を以下に含まれる関数 mpsksim_parfor と同じように設定することにより、parfor を使用して、各シミュレーション ポイントを並列実行します。parforBERTool の Java クラスと一緒に使用できないため、[Stop] ボタンを使用してシミュレーションを停止することはできません。

function [ber,numBits] = mpsksim_parfor(EbNo,minNumErrs,maxNumBits)

% Find out if there is a parallel pool and how many workers are available
if license('test','Distrib_Computing_Toolbox')
  p = gcp;
  if isempty(p)
    numWorkers = 1;
  else
    numWorkers = p.NumWorkers;
  end
else
  numWorkers = 1;
end

M = 2;
bitsPerSymbol = log2(M);

maxNumSymbols = maxNumBits/bitsPerSymbol;

minNumErrorsPerWorker = minNumErrs/numWorkers;
maxNumSymbolsPerWorker = maxNumSymbols/numWorkers;
frameLength = 500;

SNR = EbNo + 10*log10(bitsPerSymbol);

% Initialize variables related to exit criteria.
numBitErrors = zeros(numWorkers,1);
numSymbols = zeros(numWorkers,1);

parfor worker = 1:numWorkers
  while (numBitErrors(worker) < minNumErrorsPerWorker) ...
      || (numSymbols(worker) < maxNumSymbolsPerWorker)
    
    % Generate frameLength source outputs
    txMsg = randi([0 M-1],frameLength,1);
    numSymbols(worker) = numSymbols(worker)+frameLength;
    
    % Modulate the data
    txOutput = pskmod(txMsg, M, 0, 'gray');
    % Pass data through an AWGN channel with current SNR value
    chnlOutput  = awgn(txOutput,SNR,'measured',[],'dB');
    % Demodulate the data
    rxOutput = pskdemod(chnlOutput,M,0,'gray');
    
    % Convert symbol streams to bit streams
    bTx = de2bi(txMsg,bitsPerSymbol,'left-msb')';
    bTx = bTx(:);
    bRx = de2bi(rxOutput,bitsPerSymbol,'left-msb')';
    bRx = bRx(:);
    
    % Calculate number of bit errors
    numBitErrors(worker) = numBitErrors(worker)+sum(bTx~=bRx);
  end
end

% Assign values to the output variables.
ber = sum(numBitErrors)/sum(numSymbols);
numBits = sum(numSymbols)*bitsPerSymbol;

互換性の考慮事項

すべて展開する

R2019b での開始で警告

参考

オブジェクト

関数

R2009b で導入