Main Content

berfit

非平滑実測 BER データの曲線近似

説明

fitber = berfit(empEbNo,empber) は、実測 BER データ empber を曲線近似し、近似 BER 点のベクトルを返します。empberfitber の値は、empEbNo によって与えられる実測のビットあたりのエネルギー対ノイズ パワー スペクトル密度比 (Eb/N0) の値に対応します。制約なし非線形最適化の全般的な説明については、[1]を参照してください。

メモ

関数 berfit は、曲線近似または内挿 (外挿ではなく) を目的としています。最小実測 BER 値より 1 桁小さい値以上の BER データを外挿すると、本質的に信頼性が低くなります。

fitber = berfit(empEbNo,empber,fitEbNo) は、empEbNo の実測 Eb/N0 値に対応する empber の実測 BER データを曲線近似する際に使用する Eb/N0 値のベクトルを指定します。

fitber = berfit(empEbNo,empber,fitEbNo,options) は、最適化に使用される既定のオプションをオーバーライドするための構造体を指定します。

fitber = berfit(empEbNo,empber,fitEbNo,options,fittype) は、実測データの近似に使用される閉形式の関数を指定します。最適化用の既定のオプションをオーバーライドしない場合は、options として [ ] を指定します。

[fitber,fitprops] = berfit(___) は、曲線近似のプロパティを記述するフィールドをもつ fitprops 構造体を返します。前の構文の入力引数を任意に組み合わせて使用します。

berfit(___) は、実測および近似 BER データをプロットします。

berfit(empEbNo,empber,fitEbNo,options,'all') は、fittype の考えられるすべての有効な設定から、実測および近似 BER データをプロットします。最適化用の既定のオプションをオーバーライドしない場合は、options として [ ] を指定します。

メモ

有効にするには、近似が次の条件を満たす必要があり、条件を満たさない場合は棄却されます。

  • 実数値

  • 単調減少

  • 0 以上、1 以下

すべて折りたたむ

この例では、簡略化するためにハード符号化された BER 点または理論的な BER 点を使用して、関数berfitの使用方法を示します。シミュレーションにより実測 BER データを使用した例については、エラー レート プロットでの曲線近似の使用を参照してください。

サンプル データ セットの最適な近似

Eb/N0 値と BER 点の範囲を定義します。このデータを関数berfitの入力として使用します。

EbN0 = 0:13;
berdata = [.2 .15 .13 .12 .08 .09 .08 .07 .06 .04 .03 .02 .01 .004];
berfit(EbN0,berdata); 

Figure contains an axes object. The axes object with title BER vs. Eb/No with Best Curve Fit contains 2 objects of type line. These objects represent Empirical BER, Poly Ratio Fit.

最適な近似のプロット

曲線は指定された Eb/N0 値で近似式を評価して作成された点を連結します。曲線を滑らかにするには、曲線近似の Eb/N0 値の入力ベクトルを昇順で指定します。このベクトルは曲線をプロットする点をより多く提供しますが、近似式は変わりません。

fitEbNo = 0:0.2:13;
berfit(EbN0,berdata,fitEbNo)

Figure contains an axes object. The axes object with title BER vs. Eb/No with Best Curve Fit contains 2 objects of type line. These objects represent Empirical BER, Poly Ratio Fit.

エラー フロアをもつ BER 曲線の近似

Eb/N0 の範囲が [-10, 15] の場合に、Null 値 (ch = [0.5 0.47]) をもつチャネルを介して送信され、受信側で線形 MMSE イコライザーを使用して復元された BPSK データのシミュレーションの実測 BER 結果に対して、'all' オプションを使用して関数 berfit を実行します。曲線近似の各手法の結果を比較すると、次のようになります。

  • 'doubleExp+const' 近似タイプでは有効な近似は得られない

  • 'exp' 近似タイプはこのデータではうまく機能しない

  • 'exp+const' 近似タイプと 'polyRatio' 近似タイプはシミュレートされたデータによく一致する

EbN0 = -10:3:15;
empBER = [0.3361 0.3076 0.2470 0.1878 0.1212 0.0845 0.0650 0.0540 0.0474];
figure;
berfit(EbN0,empBER,[],[],'all');

Figure contains an axes object. The axes object with title BER vs. Eb/No with All Curve Fits contains 4 objects of type line. These objects represent Empirical BER, Exp Fit, Exp Plus Const Fit, Poly Ratio Fit.

options 入力構造体および fitprops 出力構造体の使用

表示レベルの 'notify' 値では、近似の試行の 1 つが収束しないと、関数が出力を生成します。出力構造体の exitState フィールドは、収束する近似タイプを示します。

Eb/N0 の範囲が [3, 10] dB の場合に、レイリー フェージング チャネルを介して送信されたダイバーシティ次数 2 の 8-PSK データについて理論上の BER の結果を生成します。

M = 8; EbN0 = 3:10;
berdata = berfading(EbN0,'psk',M,2); % Compute the theoretical BER
noisydata = berdata.*[.93 .92 1 .59 .08 .15 .01 .01];

関数optimsetを使用して options 構造体を作成し、近似タイプの結果の表示と通知を設定します。指数近似タイプと多項式比率近似タイプを実行します。

options = optimset('display','notify');
disp('*** Trying exponential fit.') % Poor fit
*** Trying exponential fit.
[fitber1,fitprops1] = berfit(EbN0,noisydata,EbN0,...
   options,'exp')
 
Exiting: Maximum number of function evaluations has been exceeded
         - increase MaxFunEvals option.
         Current function value: 2.749919 
fitber1 = 1×8

    0.1247    0.0727    0.0376    0.0168    0.0064    0.0020    0.0005    0.0001

fitprops1 = struct with fields:
       fitType: 'exp'
        coeffs: [4x1 double]
      sumSqErr: 2.7499
     exitState: 'The maximum number of function evaluations has been exceeded'
     funcCount: 10001
    iterations: 6193

disp('*** Trying polynomial ratio fit.') % Good fit
*** Trying polynomial ratio fit.
[fitber2,fitprops2] = berfit(EbN0,noisydata,EbN0,...
   options,'polyRatio')
fitber2 = 1×8

    0.1701    0.0874    0.0407    0.0169    0.0060    0.0016    0.0003    0.0001

fitprops2 = struct with fields:
       fitType: 'polyRatio'
        coeffs: [6x1 double]
      sumSqErr: 2.3880
     exitState: 'The curve fit converged to a solution'
     funcCount: 554
    iterations: 331

入力引数

すべて折りたたむ

実測 Eb/N0 値 (dB 単位)。少なくとも 4 つの要素をもつベクトルとして指定します。ベクトルの要素の値は昇順でなければなりません。

データ型: single | double

実測 BER データ。入力 empEbNo と同数の要素をもつベクトルとして指定します。empber の値は、empEbNo によって与えられる Eb/N0 値に対応します。

データ型: single | double

曲線近似の Eb/N0 値 (dB 単位)。要素の値が昇順であるベクトルとして指定します。fitEbNo の長さは、入力 empEbNo 以上でなければなりません。

データ型: single | double

最適化に使用される既定のオプションのオーバーライド。構造体として指定します。options 構造体で指定したフィールドは、関数 fminsearch によって使用されます。options 構造体は、関数 optimset を使用して作成できます。次の表に、関数 berfit を使用する場合に最も重要なフィールドを示します。既定のオプションを使用するには、この入力として [ ] を指定します。

フィールド説明
options.Display

表示レベル。

  • 'off' (既定) –- 出力を表示しない

  • 'iter' –- 各反復で出力を表示する

  • 'final' –- 最終出力のみを表示する

  • 'notify' –- 関数が収束しなかったときのみ出力を表示する

options.MaxFunEvals最適化が終了するまでの関数評価の最大数。既定値は 104 です。
options.MaxIter最適化が終了するまでの反復の最大数。既定値は 104 です。
options.TolFun近似を生成するために使用される閉形式の関数の終端許容誤差。既定値は 10-4 です。
options.TolX近似を生成するために使用される閉形式の関数の係数値の終端許容誤差。既定値は 10-4 です。

データ型: struct

実測データの近似に使用される閉形式の関数。'exp''exp+const''polyRatio' または 'doubleExp+const' として指定します。詳細については、アルゴリズムを参照してください。

データ型: char | string

出力引数

すべて折りたたむ

近似 BER 点。ベクトルとして返されます。BER は、入力 empEbNo ベクトルで指定された Eb/N0 設定ごとに計算されます。

データ型: double

近似プロパティ。曲線近似のプロパティを記述する次のフィールドをもつ構造体として返されます。

フィールド説明
fitprops.fitType近似を生成するために使用される閉形式の関数タイプ。有効な値には、'exp''exp+const''polyRatio''doubleExp+const' が含まれます。
fitprops.coeffs近似を生成するために使用される係数。有効な近似が見つからない場合、fitprops.coeffs は空のベクトルになります。
fitprops.sumSqErr近似 BER 点の対数と実測 BER 点の対数の残差平方和。
fitprops.exitState

berfit の終了条件。有効な値には次が含まれます。

  • 'The curve fit converged to a solution.'

  • 'The maximum number of function evaluations was exceeded.'

  • 'No desirable fit was found.'

fitprops.funcCount残差平方和関数の最小化に使用される関数評価の回数。
fitprops.iterations残差平方和関数を最小化するための反復回数。この値は必ずしも関数評価の回数と等しくなるとは限りません。

データ型: struct

アルゴリズム

関数 berfit は、関数 fminsearch による制約なし非線形最適化を使用して、BER データを近似します。次の表に、fittype 入力引数の値に基づいて berfit で考慮される閉形式の関数を示します。これらの関数は、急激に減衰する BER、直線的に変化する BER、誤り率フロアのある BER 曲線など、さまざまな状況において精度の高い近似を示すことが経験上知られています。関数式で、x は線形の Eb/N0 値 (dB 値ではない)、f(x) は推定された BER です。

fittype の値関数式
'exp'

f(x)=a1exp[(xa2)a3a4]

'exp+const'

f(x)=a1exp[(xa2)a3a4]+a5

'polyRatio'

f(x)=a1x2+a2x+a3x3+a4x2+a5x+a6

'doubleExp+const'

a1exp[(xa2)a3a4]+a5exp[(xa6)a7a8]+a9

fminsearch が最小化しようとする残差平方和関数は次のとおりです。

F=[log(empirical BER)log(fitted BER)]2

近似 BER 点は出力 fitber の値で、和は入力 empEbNo で与えられる Eb/N0 点の合計です。高 BER 領域が目的関数を占めないように、平方和方程式では、BER 値そのものではなく BER 値の対数を使用します。

参照

[1] Chapra, Steven C., and Raymond P. Canale. Numerical Methods for Engineers. Fourth Edition. New York, McGraw-Hill, 2002.

バージョン履歴

R2006a より前に導入