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

berfit

非平滑実測ビット誤り率 (BER) データの曲線近似

構文

fitber = berfit(empEbNo,empber)
fitber = berfit(empEbNo,empber,fitEbNo)
fitber = berfit(empEbNo,empber,fitEbNo,options)
fitber = berfit(empEbNo,empber,fitEbNo,options,fittype)
[fitber,fitprops] = berfit(...)
berfit(...)
berfit(empEbNo,empber,fitEbNo,options,'all')

説明

fitber = berfit(empEbNo,empber) は、ベクトル empber の実測 BER データを曲線近似し、近似ビット誤り率 (BER) 点のベクトルを返します。empberfitber の値は、empEbNo によって与えられる Eb/N0 値 (dB 単位) に対応します。ベクトル empEbNo は昇順にし、4 つ以上の要素をもたなければなりません。

メモ

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

fitber = berfit(empEbNo,empber,fitEbNo) は、empEbNo によって与えられる Eb/N0 値 (dB 単位) に対応するベクトル empber の実測 BER データを曲線近似します。次に、fitEbNo によって与えられる Eb/N0 値 (dB 単位) で曲線を評価し、近似 BER 点を返します。fitEbNo の長さは、empEbNo 以上でなければなりません。

fitber = berfit(empEbNo,empber,fitEbNo,options) は、構造体 options を使用して、最適化に使用される既定のオプションをオーバーライドします。これらのオプションは、関数 fminsearch で使用されるものです。options 構造体は、関数 optimset を使用して作成できます。次の表は、特に関連のあるフィールドをまとめています。

フィールド説明
options.Display表示レベル: 'off' (既定の設定) は出力を表示しません。'iter' は各反復で出力を表示します。'final' は最終出力のみを表示します。'notify' は関数が収束しなかったときのみ出力を表示します。
options.MaxFunEvals最適化が終了するまでの関数評価の最大数。既定値は 104 です。
options.MaxIter最適化が終了するまでの反復の最大数。既定値は 104 です。
options.TolFun近似を生成するために使用される閉形式の関数の終端許容誤差。既定値は 10-4 です。
options.TolX近似を生成するために使用される閉形式の関数の係数値の終端許容誤差。既定値は 10-4 です。

fitber = berfit(empEbNo,empber,fitEbNo,options,fittype) は、関数 berfit が実測データを近似するために使用する閉形式を次のアルゴリズムに示された近似から選択して指定します。fittype は、'exp''exp+const''polyRatio''doubleExp+const' のいずれかです。既定の最適化オプションのオーバーライドを回避するには、options = [] を使用します。

[fitber,fitprops] = berfit(...) は、MATLAB 構造体 fitprops を返します。これは、曲線近似の結果を示します。次の表は、そのフィールドをまとめています。

フィールド説明
fitprops.fitType近似を生成するために使用される閉形式の関数タイプ: 'exp''exp+const''polyRatio''doubleExp+const'
fitprops.coeffs近似を生成するために使用される係数。有効な近似が見つからない場合、fitprops.coeffs は空のベクトルになります。
fitprops.sumSqErr近似 BER 点の対数と実測 BER 点の対数の残差平方和。
fitprops.exitStateberfit の終了条件: 'The curve fit converged to a solution.''The maximum number of function evaluations was exceeded.' または 'No desirable fit was found'
fitprops.funcCount残差平方和関数の最小化に使用される関数評価の回数。
fitprops.iterations残差平方和関数を最小化するための反復回数。これは必ずしも関数評価の回数と等しくなるとは限りません。

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

berfit(empEbNo,empber,fitEbNo,options,'all') は、次のアルゴリズムに示された有効な近似を返すすべての可能な近似から、実測および近似 BER データをプロットします。既定のオプションのオーバーライドを回避するには、options = [] を使用します。

メモ

有効な近似は、以下の条件を満たさなければなりません。

  • 実数値

  • 単調減少

  • 0 以上、1 以下

近似がこの条件を満たさない場合、棄却されます。

すべて折りたたむ

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

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

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

最適な近似をプロットします。曲線は EbN0 の値で近似式を評価して作成された点を連結します。曲線を滑らかにするには、berfit(EbN0,berdata,[0:0.2:13]) のような構文を使用します。この代替構文は曲線のプロット時により多くの点を使用しますが、近似式は変わりません。

誤りフロアをもつ BER 曲線の近似

実測 BER 配列を生成します。具体的には、Null 値 (ch = [0.5 0.47]) をもつチャネルを受信側で BPSK 変調と線形 MMSE イコライザーでシミュレートします。'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');

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

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

M = 8; EbN0 = 3:10;
berdata = berfading(EbN0,'psk',M,2); % Compute theoretical BER.
noisydata = berdata.*[.93 .92 1 .59 .08 .15 .01 .01];
% Say when fit fails to converge.
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

アルゴリズム

関数 berfit は、関数 fminsearch による制約なし非線形最適化を使用して、BER データを近似します。次の表は、関数 berfit で考慮される閉形式の関数の一覧です。ここで、x は線形項の Eb/N0 で (dB "ではない")、f は推定 BER です。これらの関数は、急激に減衰する BER、直線的に変化する BER、誤り率フロアのある 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 値の対数を使用することが重要です。

参考文献

For a general description of unconstrained nonlinear optimization, see the following work.

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

R2006a より前に導入