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

biterr

ビット誤り数とビット誤り率 (BER)

説明

[number,ratio] = biterr(x,y) は、x の要素の符号なしバイナリ表現を、y の要素の符号なしバイナリ表現と比較します。この関数は、比較の結果として異なるビット数 number と、ビット総数に対する number の比率 ratio を返します。この関数は、xy を比較する順序をそれらのサイズに基づいて決定します。詳細は、アルゴリズムの節を参照してください。

[number,ratio] = biterr(x,y,k) は、xy の各要素の最大ビット数 k も指定します。x または y のいずれかの要素の符号なしバイナリ表現が k 桁を超える場合、関数でエラーが発生します。

[number,ratio] = biterr(x,y,k,flag) は、flag を指定して、関数がどのように要素を比較し、どのように出力を計算するかの既定の設定をオーバーライドします。詳細については、アルゴリズムの節を参照してください。

[number,ratio,individual] = biterr(___)xy のバイナリ比較の結果を行列 individual として返します。前の構文の入力引数を任意に組み合わせて指定できます。

すべて折りたたむ

2 つのバイナリ行列を作成します。

x = [0 0; 0 0; 0 0; 0 0]
x = 4×2

     0     0
     0     0
     0     0
     0     0

y = [0 0; 0 0; 0 0; 1 1]
y = 4×2

     0     0
     0     0
     0     0
     1     1

ビット誤り数を求めます。

numerrs = biterr(x,y)
numerrs = 2

列方向の誤り数を計算します。

numerrs = biterr(x,y,[],'column-wise')
numerrs = 1×2

     1     1

行方向の誤り数を計算します。

numerrs = biterr(x,y,[],'row-wise')
numerrs = 4×1

     0
     0
     0
     2

全体の誤り数を計算します。動作は既定の動作と同じです。

numerrs = biterr(x,y,[],'overall')
numerrs = 2

ノイズの多い 64-QAM 信号を復調し、Eb/No 値の範囲のビット誤り率 (BER) を推定します。BER の推定値を理論上の値と比較します。

シミュレーション パラメーターを設定します。

M = 64;                 % Modulation order
k = log2(M);            % Bits per symbol
EbNoVec = (5:15)';      % Eb/No values (dB)
numSymPerFrame = 100;   % Number of QAM symbols per frame

結果のベクトルを初期化します。

berEst = zeros(size(EbNoVec));

主処理ループには以下のステップを実行します。

  • バイナリ データを生成して 64 値シンボルに変換します。

  • データ シンボルを QAM 変調します。

  • AWGN チャネルを通して、変調された信号を渡します。

  • 受信信号を復調します。

  • 復調したシンボルをバイナリ データに変換します。

  • ビット誤り数を計算します。

while ループは、誤りが 200 個検出されるか、1e7 ビットが転送されるまで継続します。

for n = 1:length(EbNoVec)
    % Convert Eb/No to SNR
    snrdB = EbNoVec(n) + 10*log10(k);
    % Reset the error and bit counters
    numErrs = 0;
    numBits = 0;
    
    while numErrs < 200 && numBits < 1e7
        % Generate binary data and convert to symbols
        dataIn = randi([0 1],numSymPerFrame,k);
        dataSym = bi2de(dataIn);
        
        % QAM modulate using 'Gray' symbol mapping
        txSig = qammod(dataSym,M);
        
        % Pass through AWGN channel
        rxSig = awgn(txSig,snrdB,'measured');
        
        % Demodulate the noisy signal
        rxSym = qamdemod(rxSig,M);
        % Convert received symbols to bits
        dataOut = de2bi(rxSym,k);
        
        % Calculate the number of bit errors
        nErrors = biterr(dataIn,dataOut);
        
        % Increment the error and bit counters
        numErrs = numErrs + nErrors;
        numBits = numBits + numSymPerFrame*k;
    end
    
    % Estimate the BER
    berEst(n) = numErrs/numBits;
end

関数 berawgn を使用して理論上の BER 曲線を決定します。

berTheory = berawgn(EbNoVec,'qam',M);

BER データの推定値と理論値をプロットします。推定された BER データ点は理論上の曲線とよく一致しています。

semilogy(EbNoVec,berEst,'*')
hold on
semilogy(EbNoVec,berTheory)
grid
legend('Estimated BER','Theoretical BER')
xlabel('Eb/No (dB)')
ylabel('Bit Error Rate')

入力引数

すべて折りたたむ

比較のための入力。非負の整数要素を含むベクトルまたは行列として、個別に引数を指定します。関数は、比較のために xy の各要素を符号なしバイナリ表現に変換します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | 論理値

xy の入力要素の最大ビット数。正の整数として指定します。x または y のいずれかの要素のバイナリ表現に必要なビット数が k より大きい場合、関数でエラーが発生します。

k を設定しない場合、関数によって xy の最大要素のバイナリ表現のビット数が設定されます。

データ型: single | double

関数の既定の設定をオーバーライドするフラグ。'overall''row-wise'、または 'column-wise' を指定します。フラグは、関数が入力 x,y の要素をどのように比較し、出力をどのように計算するかを指定します。詳細は、アルゴリズムの節を参照してください。

データ型: string | char

出力引数

すべて折りたたむ

ビット誤り数。非負の整数または整数のベクトルとして返されます。

データ型: single | double

ビット誤り率。スカラーとして返されます。ratio は、バイナリ表現に使用するビット総数に対するビット誤り率 number です。ビット総数は、入力 x,y のうち小さい方のエントリ数を k 倍した値です。

xy の各入力要素のバイナリ比較の結果。xy のうち大きい方の次元をもつ行列として返されます。各要素には、そのペアの要素で異なっているビット数が指定されます。

データ型: single | double

アルゴリズム

すべて折りたたむ

サイズに基づく入力の比較

この関数は、xy のサイズを使用して、それらの要素を比較する順序を決定します。

  • 入力が同じ次元をもつ行列である場合、関数は要素ごとに入力を比較します。この場合、number は非負の整数です。たとえば、次の図のケース (a) を参照してください。

  • 一方の入力が行列で、もう一方の入力が列ベクトルの場合、関数は行列の各列と列ベクトルを要素ごとに比較します。行列の行数と列ベクトルの長さは等しくなければなりません。つまり、行列の次元が m 行 n 列の場合、列ベクトルの次元は m 行 1 列でなければなりません。たとえば、次の図のケース (b) を参照してください。

  • 一方の入力が行列で、もう一方の入力が行ベクトルの場合、関数は行列の各行と行ベクトルを要素ごとに比較します。行列の列数と行ベクトルの長さは等しくなければなりません。つまり、行列の次元が m 行 n 列の場合、行ベクトルの次元は 1 行 n 列でなければなりません。たとえば、次の図のケース (c) を参照してください。

フラグに基づく入力の比較

次の表は、flag の異なる値に基づいて出力がどのように計算されるかを示しています。この表で、x は行列と見なされ、y のサイズはさまざまです。

y のサイズflag の値比較のタイプnumber の値ビット総数
行列'overall' (既定の設定)要素ごとビット誤り総数ky の要素数の積
'row-wise'x の m 番目の行と y の m 番目の行の比較要素が各行のビット誤りを表す列ベクトルky の要素数の積
'column-wise'x の m 番目の列と y の m 番目の列の比較 要素が各列のビット誤りを表す行ベクトルky の要素数の積
行ベクトル'overall'yx の各行の比較ビット誤り総数kx の要素数の積
'row-wise' (既定の設定)yx の各行の比較要素が x の各行のビット誤りを表す列ベクトルky のサイズの積
列ベクトル'overall'yx の各列の比較ビット誤り総数kx の要素数の積
'column-wise' (既定の設定)yx の各列の比較要素が x の各列のビット誤りを表す行ベクトルky のサイズの積

R2006a より前に導入