Main Content

このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。

ビット誤り率 (BER)

理論上の結果

一般的な表記法

この付録では以下の表記法を使用します。

数量または演算 表記法
変調コンスタレーションのサイズ

M

シンボルあたりのビット数

k=log2M

1 ビットあたりのパワー スペクトル密度対ノイズのエネルギーとパワー スペクトル密度

EbN0

シンボル対ノイズあたりのエネルギーとパワー スペクトル密度の比

EsN0=kEbN0

ビット誤り率 (BER)

Pb

シンボル誤り率 (SER)

Ps

実数部

Re[]

より小さい最大整数

以下の数学関数を使用します。

関数 数式
Q 関数

Q(x)=12πxexp(t2/2)dt

Marcum Q 関数

Q(a,b)=btexp(t2+a22)I0(at)dt

次数 ν の第 1 種変形ベッセル関数

Iν(z)=k=0(z/2)υ+2kk!Γ(ν+k+1)

ここで、

Γ(x)=0ettx1dt

はガンマ関数です。

合流型超幾何関数

F11(a,c;x)=k=0(a)k(c)kxkk!

ここで、ポッホハマー記号 (λ)k(λ)0=1(λ)k=λ(λ+1)(λ+2)(λ+k1) として定義されます。

以下の略語を使用します。

頭字語 定義
M-PSKM-ary 位相シフト キーイング
DE-M-PSK差分符号化された M-ary 位相シフト キーイング
BPSK2 位相シフト キーイング
DE-BPSK差分符号化された 2 位相シフト キーイング
QPSK四相位相シフト キーイング
DE-QPSK差分符号化された直交位相シフト キーイング
OQPSKオフセット直交位相シフト キーイング
DE-OQPSK差分符号化されたオフセット直交位相シフト キーイング
M-DPSKM-ary 差分位相シフト キーイング
M-PAMM-ary パルス振幅変調
M-QAMM-ary 直交振幅変調
M-FSKM-ary 周波数シフト キーイング
MSK最小シフト キーイング
M-CPFSKM-ary 連続位相差分周波数シフト キーイング

berawgn で使用される解析的表現

M-PSK-  [2] の式 8.22 から次の式を得ます。

Ps=1π0(M1)π/Mexp(kEbN0sin2[π/M]sin2θ)dθ

次の式は正確な BER ([4] および [2] の式 8.29 から) に非常に似ていますが、完全には等しくありません。

Pb=1k(i=1M/2(wi')Pi)

ここで、wi'=wi+wMiwM/2'=wM/2wiはシンボル i に割り当てられたビットのハミング重みで、

Pi=12π0π(1(2i1)/M)exp(kEbN0sin2[(2i1)π/M]sin2θ)dθ12π0π(1(2i+1)/M)exp(kEbN0sin2[(2i+1)π/M]sin2θ)dθ

M=2 の特殊なケース。例: BPSK ([1] の式 5.2-57):

Ps=Pb=Q(2EbN0)

M=4 の特殊なケース。例: QPSK ([1] の式 5.2-59 および 5.2-62):

Ps=2Q(2EbN0)[112Q(2EbN0)]Pb=Q(2EbN0)

DE-M-PSK-  M=2。例: DE-BPSK ([2] の式 8.36):

Ps=Pb=2Q(2EbN0)2Q2(2EbN0)

M=4。例: DE-QPSK ([2] の式 8.38):

Ps=4Q(2EbN0)8Q2(2EbN0)+8Q3(2EbN0)4Q4(2EbN0)

[3] の式 5 から:

Pb=2Q(2EbN0)[1Q(2EbN0)]

OQPSK-  QPSK [2] と同じ BER/SER。

DE-OQPSK-  DE-QPSK [3] と同じ BER/SER。

M-DPSK-  [2] の式 8.84 から:

Ps=sin(π/M)2ππ/2π/2exp((kEb/N0)(1cos(π/M)cosθ))1cos(π/M)cosθdθ

次の式は正確な BER に非常に似ていますが、完全には等しくありません[4]

Pb=1k(i=1M/2(wi')Ai)

ここで、wi'=wi+wMiwM/2'=wM/2wiはシンボル i に割り当てられたビットのハミング重みで、

Ai=F((2i+1)πM)F((2i1)πM)F(ψ)=sinψ4ππ/2π/2exp(kEb/N0(1cosψcost))1cosψcostdt

M=2 の特殊なケース ([2] の式 8.85):

Pb=12exp(EbN0)

M-PAM-  [2] の式 8.3 と 8.7、および [1] の式 5.2-46 から:

Ps=2(M1M)Q(6M21kEbN0)

[5] から:

Pb=2Mlog2M×k=1log2Mi=0(12k)M1{(1)i2k1M(2k1i2k1M+12)Q((2i+1)6log2MM21EbN0)}

M-QAM-  正方形の M-QAM の場合、k=log2M は偶数 ([2]の式 8.10 および [1] の式 5.2-78 と 5.2-79):

Ps=4M1MQ(3M1kEbN0)4(M1M)2Q2(3M1kEbN0)

[5] から:

Pb=2Mlog2M×k=1log2Mi=0(12k)M1{(1)i2k1M(2k1i2k1M+12)Q((2i+1)6log2M2(M1)EbN0)}

長方形 (非正方形) の M-QAM の場合、k=log2M は奇数、M=I×JI=2k12J=2k+12:

Ps=4IJ2I2JM×Q(6log2(IJ)(I2+J22)EbN0)4M(1+IJIJ)Q2(6log2(IJ)(I2+J22)EbN0)

[5] から:

Pb=1log2(IJ)(k=1log2IPI(k)+l=1log2JPJ(l))

ここで、

PI(k)=2Ii=0(12k)I1{(1)i2k1I(2k1i2k1I+12)Q((2i+1)6log2(IJ)I2+J22EbN0)}

PJ(k)=2Jj=0(12l)J1{(1)j2l1J(2l1j2l1J+12)Q((2j+1)6log2(IJ)I2+J22EbN0)}

コヒーレント検出を使用した直交 M-FSK-  [2] の式 8.40 および [1] の式 5.2-21 から:

Ps=1[Q(q2kEbN0)]M112πexp(q22)dqPb=2k12k1Ps

コヒーレント検出を使用した非直交 2-FSK-  M=2 ([1] の式 5.2-21 および [2] の式 8.44 から) の場合:

Ps=Pb=Q(Eb(1Re[ρ])N0)

ρ は複素数の相関係数:

ρ=12Eb0Tbs˜1(t)s˜2*(t)dt

ここで、s˜1(t)s˜2(t) は複素数ローパス信号で、

Eb=120Tb|s˜1(t)|2dt=120Tb|s˜2(t)|2dt

次に例を示します。

s˜1(t)=2EbTbej2πf1t, s˜2(t)=2EbTbej2πf2t

ρ=12Eb0Tb2EbTbej2πf1t2EbTbej2πf2tdt=1Tb0Tbej2π(f1f2)tdt=sin(πΔfTb)πΔfTbejπΔft

ここで、Δf=f1f2 です。

    Re[ρ]=Re[sin(πΔfTb)πΔfTbejπΔft]=sin(πΔfTb)πΔfTbcos(πΔfTb)=sin(2πΔfTb)2πΔfTbPb=Q(Eb(1sin(2πΔfTb)/(2πΔfTb))N0)

([2] の式 8.44 から、ここで h=ΔfTb)

非コヒーレント検出を使用した直交 M-FSK-  [1] の式 5.4-46 および [2] の式 8.66 から:

Ps=m=1M1(1)m+1(M1m)1m+1exp[mm+1kEbN0]Pb=12MM1Ps

非コヒーレント検出を使用した非直交 2-FSK-  M=2 ([1] の式 5.4-53 および [2] の式 8.69 から) の場合:

Ps=Pb=Q(a,b)12exp(a+b2)I0(ab)

ここで、

a=Eb2N0(11|ρ|2), b=Eb2N0(1+1|ρ|2) 

コヒーレント検出を使用してプリコーディングされた MSK-  BPSK と同じ BER/SER。

コヒーレント検出を使用して差分符号化された MSK-  DE-BPSK と同じ BER/SER。

非コヒーレント検出を使用した MSK (最適なブロック単位による)-  上限 ([6] の式 10.166 および 10.164 から):

Ps=Pb12[1Q(b1,a1)+Q(a1,b1)]+14[1Q(b4,a4)+Q(a4,b4)]+12eEbN0

ここで、

a1=EbN0(134/π24),b1=EbN0(1+34/π24)a4=EbN0(114/π2),b4=EbN0(1+14/π2)

CPFSK コヒーレント検出 (最適なブロック単位による)-  下限 ([1] の式 5.3-17 から):

Ps>KδminQ(EbN0δmin2)

上限:

δmin2>min1iM1{2i(1sinc(2ih))}

ここで、h は変調指数で、Kδmin は最小距離のパス数です。

PbPsk

berfading で使用される解析的表現

表記法-  次の表記法は、berfading にある式で使用します。

表記法
フェージング振幅のべき乗 rΩ=E[r2]、ここで、E[] は統計的期待値を示します。
ダイバーシティ ブランチの数

L

ブランチあたりのシンボルあたり SNR

γ¯l=(ΩlEsN0)/L=(ΩlkEbN0)/L

一様に分布されたダイバーシティ ブランチの場合:

γ¯=(ΩkEbN0)/L

各ダイバーシティ ブランチのモーメント生成関数

レイリー フェージング:

Mγl(s)=11sγ¯l

ライス フェージング:

Mγl(s)=1+K1+Ksγ¯le[Ksγ¯l(1+K)sγ¯l]

ここで K は、反射成分のエネルギーと拡散成分のエネルギーの比率です (線形スケール)。

一様に分布されたダイバーシティ ブランチの場合: すべての l について Mγl(s)=Mγ(s)

以下の略語を使用します。

頭字語 定義
MRC最大比率の組み合わせ
EGC等価ゲインの組み合わせ

MRC を使用した M-PSK-  [2] の式 9.15 から:

Ps=1π0(M1)π/Ml=1LMγl(sin2(π/M)sin2θ)dθ

[4][2] から:

Pb=1k(i=1M/2(wi')P¯i)

ここで、wi'=wi+wMiwM/2'=wM/2wi はシンボル i に割り当てられたビットのハミング重みで、

P¯i=12π0π(1(2i1)/M)l=1LMγl(1sin2θsin2(2i1)πM)dθ12π0π(1(2i+1)/M)l=1LMγl(1sin2θsin2(2i+1)πM)dθ

レイリー フェージングについて M=2 の特殊なケースの場合 ([6] の式 C-18、C-21 および表 C-1 から):

Pb=12[1μi=0L1(2ii)(1μ24)i]

ここで、

μ=γ¯γ¯+1

L=1 の場合:

Pb=12[1γ¯γ¯+1]

MRC を使用した DE-M-PSK-  M=2 の場合 ([2] の式 8.37 および 9.8-9.11 から):

Ps=Pb=2π0π/2l=1LMγl(1sin2θ)dθ2π0π/4l=1LMγl(1sin2θ)dθ

MRC を使用した M-PAM-  [2] の式 9.19 から:

Ps=2(M1)Mπ0π/2l=1LMγl(3/(M21)sin2θ)dθ

[5][2] から:

Pb=2πMlog2M×k=1log2M i=0(12k)M1{(1)i2k1M(2k1i2k1M+12)0π/2l=1LMγl((2i+1)23/(M21)sin2θ)dθ}

MRC を使用した M-QAM-  正方形の M-QAM の場合、k=log2M は偶数 ([2] の式 9.21):

Ps=4π(11M)0π/2l=1LMγl(3/(2(M1))sin2θ)dθ4π(11M)20π/4l=1LMγl(3/(2(M1))sin2θ)dθ

[5][2] から:

Pb=2πMlog2M×k=1log2M i=0(12k)M1{(1)i2k1M(2k1i2k1M+12)0π/2l=1LMγl((2i+1)23/(2(M1))sin2θ)dθ}

長方形 (非正方形) の M-QAM の場合、k=log2M は奇数、M=I×JI=2k12J=2k+12γ¯l=Ωllog2(IJ)EbN0

Ps=4IJ2I2JMπ0π/2l=1LMγl(3/(I2+J22)sin2θ)dθ4Mπ(1+IJIJ)0π/4l=1LMγl(3/(I2+J22)sin2θ)dθ

[5][2] から:

Pb=1log2(IJ)(k=1log2IPI(k)+l=1log2JPJ(l))PI(k)=2Iπi=0(12k)I1{(1)i2k1I(2k1i2k1I+12)0π/2l=1LMγl((2i+1)23/(I2+J22)sin2θ)dθ}PJ(k)=2Jπj=0(12l)J1{(1)j2l1J(2l1j2l1J+12)0π/2l=1LMγl((2j+1)23/(I2+J22)sin2θ)dθ}

検出後 EGC を使用した M-DPSK-  [2] の式 8.165 から:

Ps=sin(π/M)2ππ/2π/21[1cos(π/M)cosθ]l=1LMγl([1cos(π/M)cosθ])dθ

[4][2] から:

Pb=1k(i=1M/2(wi')A¯i)

ここで、wi'=wi+wMiwM/2'=wM/2wi はシンボル i に割り当てられたビットのハミング重みで、

A¯i=F¯((2i+1)πM)F¯((2i1)πM)F¯(ψ)=sinψ4ππ/2π/21(1cosψcost)l=1LMγl((1cosψcost))dt

レイリー フェージングについて、M=2L=1 になる特殊なケースの場合 ([2] の式 8.173):

Pb=12(1+γ¯)

直交 2-FSK、MRC を使用したコヒーレント検出-  [2] の式 9.11 から:

Ps=Pb=1π0π/2l=1LMγl(1/2sin2θ)dθ

レイリー フェージングの特殊なケースの場合 ([1] の式 14.4-15 および 14.4-21):

Ps=Pb=12L(1γ¯2+γ¯)Lk=0L1(L1+kk)12k(1+γ¯2+γ¯)k

非直交 2-FSK、MRC を使用したコヒーレント検出-  [2] の式 9.11 および 8.44:

Ps=Pb=1π0π/2l=1LMγl((1Re[ρ])/2sin2θ)dθ

レイリー フェージングについて、L=1 の特殊なケースの場合 ([8] の式 20 および [2] の式 8.130):

Ps=Pb=12[1γ¯(1Re[ρ])2+γ¯(1Re[ρ])]

直交 M-FSK、EGC を使用した非コヒーレント検出-  レイリー フェージング ([1] の式 14.4-47):

Ps=101(1+γ¯)L(L1)!UL1eU1+γ¯(1eUk=0L1Ukk!)M1dUPb=12MM1Ps

ライス フェージング ([8] の式 41):

Ps=r=1M1(1)r+1eLKγ¯r/(1+γ¯r)(r(1+γ¯r)+1)L(M1r)n=0r(L1)βnrΓ(L+n)Γ(L)[1+γ¯rr+1+rγ¯r]nF11(L+n,L;LKγ¯r/(1+γ¯r)r(1+γ¯r)+1)Pb=12MM1Ps

ここで、

γ¯r=11+Kγ¯βnr=i=n(L1)nβi(r1)(ni)!I[0,(r1)(L1)](i)β00=β0r=1βn1=1/n!β1r=r

aib の場合は I[a,b](i)=1、それ以外の場合は 0 です。

非直交 2-FSK、ダイバーシティのない非コヒーレント検出-  [2] の式 8.163 から:

Ps=Pb=14πππ1ς21+2ςsinθ+ς2Mγ(14(1+1ρ2)(1+2ςsinθ+ς2))dθ

ここで、

ς=11ρ21+1ρ2

bercoding および BERTool で使用される解析的表現

この節の一般的な表記法

説明表記法
情報ビットあたりのパワー スペクトル密度とノイズのパワー スペクトル密度の比

γb=EbN0

メッセージ長

K

符号長

N

符号化率

Rc=KN

ブロック符号化-  ブロック符号化表現の固有の表記法 dmin は、その符号の最小距離です。

軟判定

BPSK、QPSK、OQPSK、PAM-2、QAM-4、プリコーディングされた MSK ([1] の式 8.1-52):

Pb12(2K1)Q(2γbRcdmin)

DE-BPSK、DE-QPSK、DE-OQPSK、DE-MSK:

Pb12(2K1)[2Q(2γbRcdmin)[1Q(2γbRcdmin)]]

BFSK、コヒーレント検出 ([1] の式 8.1-50 および 8.1-58):

Pb12(2K1)Q(γbRcdmin)

BFSK、非コヒーレント二乗検出 ([1] の式 8.1-65 および 8.1-64):

Pb122K122dmin1exp(12γbRcdmin)i=0dmin1(12γbRcdmin)i1i!r=0dmin1i(2dmin1r)

DPSK:

Pb122K122dmin1exp(γbRcdmin)i=0dmin1(γbRcdmin)i1i!r=0dmin1i(2dmin1r)

Hard Decision

一般線形ブロック符号 ([9] の式 4.3, 4.4、および [6] の式 12.136):

Pb1Nm=t+1N(m+t)(Nm)pm(1p)Nmt=12(dmin1)

ハミング符号 ([9] の式 4.11, 4.12、および [7] の式 6.72, 6.73):

Pb1Nm=2Nm(Nm)pm(1p)Nm=pp(1p)N1

(24, 12) 拡張された Golay コード ([9] の式 4.17、および [6] の式 12.139):

Pb124m=424βm(24m)pm(1p)24m

ここで、βm はチャネル シンボル誤りの平均数で、チャネルが m のシンボル誤りを引き起こした場合は訂正された N 組になります ([9]の表 4.2)。

N=Q1=2q1 のときのリード・ソロモン符号:

Pb2q12q11Nm=t+1Nm(Nm)(Ps)m(1Ps)Nm

は FSK ([9] の式 4.25, 4.27、[1] の式 8.1-115, 8.1-116、[7] の式 8.7, 8.8、[6] の式 12.142, 12.143) の場合で、

Pb1q1Nm=t+1Nm(Nm)(Ps)m(1Ps)Nm

は、それ以外の場合です。

log2Q/log2M=q/k=h の場合、ここで h は整数 ([10]の式 1):

Ps=1(1s)h

ここで s は符号化されていない AWGN チャネルのシンボル誤り率 (SER) です。

たとえば、BPSK の場合は、M=2Ps=1(1s)q

それ以外の場合は、Ps[10]の表 1 および式 2 で与えられます。

畳み込み符号化-  畳み込み符号化表現の固有の表記法 dfree はその符号の自由距離で、ad は初めてゼロ パスと融合される、ゼロ パスからの距離が d のパス数です。

軟判定

[1] の式 8.2-26, 8.2-24, 8.2-25 および [6] の式 13.28 と 13.27 から:

Pb<d=dfreeadf(d)P2(d)

伝達関数を使用して

T(D,N)=d=dfreeadDdNf(d)dT(D,N)dN|N=1=d=dfreeadf(d)Dd

ここで、f(d) は d の関数としての N の指数です。

BPSK、QPSK、OQPSK、PAM-2、QAM-4、プリコーディングされた MSK、DE-BPSK、DE-QPSK、DE-OQPSK、DE-MSK、DPSK、BFSK の結果は、次のように得られます。

P2(d)=Pb|EbN0=γbRcd

ここで、Pb は対応する符号化されていない AWGN チャネルの BER です。たとえば、BPSK の場合 ([1] の式 8.2-20):

P2(d)=Q(2γbRcd)

Hard Decision

[1] の式 8.2-33、8.2-28、8.2-29、および [6] の式 13.28、13.24、13.25:

Pb<d=dfreeadf(d)P2(d)

ここで、

P2(d)=k=(d+1)/2d(dk)pk(1p)dk

が d が奇数の場合、

P2(d)=k=d/2+1d(dk)pk(1p)dk+12(dd/2)pd/2(1p)d/2

が d が偶数の場合 (p は符号化されていない AWGN チャネルのビット誤り率 (BER) です)。

シミュレーションによる性能結果

この節の概要

通信システムのビット誤り率またはシンボル誤り率を計算する方法の 1 つは、データ メッセージの伝送をシミュレートし、すべてのメッセージをその伝送の前後で比較することです。Communications Toolbox™ を使用した通信システム コンポーネントのシミュレーションの詳細は、本ガイドの他の部分で説明されています。この節では、シミュレーションに出入りするデータ メッセージを比較する方法について説明します。

シミュレーションによる性能結果の計算については、曲線近似について説明した誤り率プロットの曲線近似に別の例があります。

シミュレートされたデータを使用したビット誤り率およびシンボル誤り率の計算

関数 biterr は 2 組のデータを比較して、ビット誤りの数とビット誤り率を計算します。関数 symerr は 2 組のデータを比較して、シンボル誤りの数とシンボル誤り率を計算します。誤りとは 2 組のデータの対応するポイントにおける相違を意味します。

2 組のデータとは、通常一方は送信側に入力されるメッセージであり、もう一方は受信側から出力される復元されたメッセージです。符号化器の入力データと復号化器の出力データなど、通信システムの別の部分に出入りするデータを比較する場合もあります。

通信システムで 1 つのシンボルを表現するのに複数ビットが使用されている場合は、ビット誤り数とシンボル誤り数が異なります。ビットまたはシンボルのいずれを計数する場合でも誤り率とは、誤り数を送信された (ビットまたはシンボルの) 総数で割った値を意味します。

メモ

正確な誤り率を計算するには、通常は少なくとも 100 の誤りが生成されるように、十分なデータを使用してシミュレートします。

誤り率がきわめて低いときは (たとえば、10-6 以下)、半解析的手法を併用すると、シミュレーションのみの場合よりも高速で結果を計算できる場合があります。この手法の利用についての詳細は、半解析的手法による性能結果を参照してください。

例:誤り率の計算

下記のスクリプトは、関数 symerr を使用して、ノイズを含む線形ブロック符号のシンボル誤り率を計算します。符号化されたメッセージに人為的にノイズを追加し、その結果生じたノイズを含む符号と元の符号とを比較します。次に復号化を実行して、復号化されたメッセージと元のメッセージを比較します。

m = 3; n = 2^m-1; k = n-m; % Prepare to use Hamming code.
msg = randi([0 1],k*200,1); % 200 messages of k bits each
code = encode(msg,n,k,'hamming');
codenoisy = rem(code+(rand(n*200,1)>.95),2); % Add noise.
% Decode and correct some errors.
newmsg = decode(codenoisy,n,k,'hamming');
% Compute and display symbol error rates.
noisyVec = step(comm.ErrorRate,code,codenoisy);
decodedVec = step(comm.ErrorRate,msg,newmsg);
disp(['Error rate in the received code: ',num2str(noisyVec(1))])
disp(['Error rate after decoding: ',num2str(decodedVec(1))])

出力は以下のようになります。復号化後は、ハミング復号化器によって一部の誤りが訂正されるため、誤り率が減少します。この例では乱数を使用しているため、結果は異なる場合があります。

Error rate in the received code: 0.054286
Error rate after decoding: 0.03

シンボル誤り率とビット誤り率の比較

上記の例では、各シンボルが 1 ビットであるため、シンボル誤り率とビット誤り率は等しくなります。下記のコマンドは、その他の状況でのシンボル誤り率とビット誤り率の違いを示しています。

a = [1 2 3]'; b = [1 4 4]';
format rat % Display fractions instead of decimals.
% Create ErrorRate Calculator System object
serVec = step(comm.ErrorRate,a,b);
srate = serVec(1)
snum = serVec(2)
% Convert integers to bits
hIntToBit = comm.IntegerToBit(3);
a_bit = step(hIntToBit, a);
b_bit = step(hIntToBit, b);
% Calculate BER
berVec = step(comm.ErrorRate,a_bit,b_bit);
brate = berVec(1)
bnum = berVec(2)

出力は以下のようになります。

snum =

      2      


srate =

     2/3     


bnum =

      5      


brate =

     5/9  

2 番目のエントリは 2 ビット、3 番目のエントリは 3 ビット異なるため、bnum は 5 です。合計ビット数が 9 なので、brate は 5/9 で表されます。ビット数の合計は、a または b のエントリ数に ab のすべてのエントリにおける最大ビット数を掛けた値として定義されます。

半解析的手法による性能結果

シミュレーションによる性能結果で説明されている手法は、さまざまな通信システムで適切に動作しますが、システムの誤り率がきわめて低い場合には (たとえば、10-6 以下)、計算に膨大な時間がかかる可能性があります。この節では、誤り率を計算する代替方法として、半解析的手法を使用する方法を説明します。システムの種類によっては、半解析的手法を使用すると、シミュレートされたデータのみを使用する非解析的手法よりも高速に結果を出せる場合があります。

半解析的手法では、シミュレーションと解析を組み合わせて使用することによって、通信システムの誤り率を決定します。Communications Toolbox の関数 semianalytic では一部解析を実行することにより、半解析的手法を効果的に実装します。

半解析的手法が必要な場合

半解析的手法はある種の通信システムには適していますが、適さないシステムもあります。以下のすべての特性が当てはまる場合には、半解析的手法が適合します。

  • マルチパス フェージング、量子化、および増幅器の非線形化の効果が、実際にモデル化されるチャネルのノイズの影響に "先行" していること。

  • 受信側が搬送周波数と完全に同期されており、タイミング ジッターが無視できるレベルにある。フェーズ ノイズやタイミング ジッターは低速なプロセスであるため、通信システムに対する半解析的手法の適用性が低くなります。

  • ノイズを含まないシミュレーションの場合、受信されたコンスタレーションに誤りがない。ノイズ以外に起因する歪みは、各信号点を適正な決定領域に保持できる程度に緩やかでなければなりません。そうでない場合には、計算された BER が低すぎる値になります。たとえば、モデル化されたシステムが受信信号点を適切な決定領域外に配置する位相回転をもつ場合、半解析的手法はシステム パフォーマンスの予測には適していません。

さらに、関数 semianalytic では、モデル化される実際のチャネルのノイズにガウス ノイズを想定しています。非ガウス ノイズに対して半解析的手法を適用する方法は、[11]の一般化指数分布に関する説明を参照してください。

半解析的手法の手順

以下に関数 semianalytic を使用した、半解析的手法の標準実装手順を説明します。

  1. "少なくとも" ML シンボルを含むメッセージ信号を作成します。ここで M は変調のアルファベット サイズで、L はチャネルのインパルス応答のシンボルの長さです。一般的な方法として、まず全長が (log2M)ML の拡張バイナリ疑似ノイズ (PN) シーケンスで始めます。"拡張" PN シーケンスは、余分な 0 が追加された PN シーケンスで、1 と 0 の分布を等しくします。

  2. ベースバンド変調を使って、メッセージ信号をもつ搬送波を変調します。サポートされている変調の種類は、semianalytic のリファレンス ページにリストされています。変調された信号をフィルター処理するために後で使用するオーバーサンプリング係数を使って、矩形パルス整形で結果の信号を整形します。このステップの結果を後で利用するために txsig を格納します。

  3. 送信フィルターを使って変調された信号をフィルター処理します。このフィルターは、多くの場合、ルート レイズド コサイン フィルターですが、バタワース、ベッセル、チェビシェフⅠ型またはⅡ型、楕円、あるいはより一般的には FIR または IIR フィルターも使用できます。ルート レイズド コサイン フィルターを使用する場合、これをオーバーサンプリングされていない変調信号に使用し、フィルター処理関数でオーバーサンプリング係数を指定します。他の種類のフィルターを使用する場合、矩形パルス整形された信号に適用できます。

  4. "ノイズのない" チャネルを通してフィルター処理された信号を実行します。このチャネルは、マルチパス フェージング効果、位相シフト、増幅器の非線形性、量子化、追加のフィルター処理を含むことができますが、ノイズを含んではいけません。このステップの結果を後で利用するために rxsig を格納します。

  5. 前の手順の txsigrxsig のデータを使用して、関数 semianalytic を呼び出します。関数の既定のフィルターを使用しない場合には、入力引数のペアで受信フィルターを指定します。関数は rxsig をフィルター処理してから各点に対してガウス ノイズ分布を解析的に適用することで、受信された各配置点の誤りの確率を決定します。関数は受信信号全体に対して誤りの確率を平均し、全体の誤りの確率を決定します。このように計算された誤り確率がシンボル誤り確率である場合、一般的にはグレイ符号化を仮定して、関数はこれをビット誤り率に変換します 関数はビット誤り率 (DQPSK 変調方式の場合はビット誤り率の上限) を返します。

半解析的手法の使用

以下の例では 16-QAM 変調を使用する半解析的手法の手順を説明します。また、半解析的手法で得られた誤り率と、公開済みの数式により得られ、関数 berawgn を使用して計算された誤り率の理論値を比較します。結果のプロットは、2 つの手法を使用して取得された誤り率がほとんど同じであることを示しています。理論値と計算値の不一致は、大半はノイズのないチャネル モデルを介して挿入された位相オフセットに由来するものです。

長さ >= M^L のメッセージ信号を生成します。

M = 16; % Alphabet size of modulation
L = 1; % Length of impulse response of channel
msg = [0:M-1 0]; % M-ary message sequence of length > M^L

ベースバンド変調を使用して、メッセージ信号を変調します。

modsig = qammod(msg',M); % Modulate data
Nsamp = 16;
modsig = rectpulse(modsig,Nsamp); % Use rectangular pulse shaping.

送信フィルターを適用します。

txsig = modsig; % No filter in this example

ノイズのないチャネルを介して txsig を実行します。

rxsig = txsig*exp(1i*pi/180); % Static phase offset of 1 degree

関数 semianalytic を使用します。

受信フィルターを入力引数のペアとして指定します。この場合、num と den は理想的な積分器を示します。

num = ones(Nsamp,1)/Nsamp;
den = 1;
EbNo = 0:20; % Range of Eb/No values under study
ber = semianalytic(txsig,rxsig,'qam',M,Nsamp,num,den,EbNo);

% For comparison, calculate theoretical BER.
bertheory = berawgn(EbNo,'qam',M);

% Plot computed BER and theoretical BER.
figure; semilogy(EbNo,ber,'k*');
hold on; semilogy(EbNo,bertheory,'ro');
title('Semianalytic BER Compared with Theoretical BER');
legend('Semianalytic BER with Phase Offset',...
    'Theoretical BER Without Phase Offset','Location','SouthWest');
hold off;

理論上の性能結果

理論上の誤り統計の計算

上記の関数 biterr は実測誤り統計データの収集に役立つだけでなく、それらの結果を理論上の誤り統計と比較することもできます。ある種の通信システムは、ビット誤り率またはその範囲に関しては、閉じた形の式に関連付けられています。次の表に記載された関数は、閉じた形の式が存在するいくつかの通信システムにおいて、その式を計算します。

通信システムの種類関数
符号化されていない AWGN チャネル berawgn
符号化された AWGN チャネル bercoding
符号化されていないレイリーおよびライス フェージング チャネル berfading
不完全な同期の符号化されていない AWGN チャネル bersync

各関数のリファレンス ページには、関数によって実装されている閉じた形の式が説明された 1 つまたは複数の書籍が掲載されています。

理論上の誤り率のプロット

次の例は、関数 bercoding を使用して、軟判定復号化器による畳み込み符号化のビット誤り率の上限を計算します。

coderate = 1/4; % Code rate

距離スペクトルに関する情報を含む構造体 dspec を作成します。EbNo のスイープ範囲を定義し、理論的な限界の結果を生成します。

dspec.dfree = 10; % Minimum free distance of code
dspec.weight = [1 0 4 0 12 0 32 0 80 0 192 0 448 0 1024 ...
    0 2304 0 5120 0]; % Distance spectrum of code
EbNo = 3:0.5:8;
berbound = bercoding(EbNo,'conv','soft',coderate,dspec);

理論的な限界の結果をプロットします。

semilogy(EbNo,berbound)
xlabel('E_b/N_0 (dB)'); 
ylabel('Upper Bound on BER');
title('Theoretical Bound on BER for Convolutional Coding');
grid on;

参照

[1] Proakis, J. G., Digital Communications, 4th Ed., McGraw-Hill, 2001.

[2] Frenger, Pal, Pal Orten, and Tony Ottosson, "Convolutional Codes with Optimum Distance Spectrum," IEEE Communications Letters, Vol. 3, #11, Nov. 1999, pp. 317-319

理論上の誤り率と実測誤り率の比較

次の例は、関数 berawgn を使用して、一連の Eb/N0 の値でパルス振幅変調 (PAM) のシンボル誤り率を計算します。このコードでは、比較のため 8-PAM を AWGN チャネルでシミュレートして実測シンボル誤り率を計算します。また、理論および実測によるシンボル誤り率を同一の座標軸セット上にプロットします。

berawgn を使用して理論上の誤り率を計算してプロットします。

rng('default') % Set random number seed for repeatability
M = 8;
EbNo = 0:13;
[ber, ser] = berawgn(EbNo,'pam',M);

semilogy(EbNo,ser,'r');
xlabel('E_b/N_0 (dB)');
ylabel('Symbol Error Rate');
grid on;

シミュレーションによって実測誤り率を計算します。シミュレーション パラメーターを定義し、変数を事前に割り当てて時間を節約します。EbNo から SNR に変換します。No = 2*noiseVariance^2 であるため、3 dB を追加して SNR を取得しなければなりません。詳細は、「Selected Bibliography for Performance Evaluation」にリストされた Proakis の書籍を参照してください。

n = 10000; % Number of symbols to process
k = log2(M); % Number of bits per symbol
snr = EbNo+3+10*log10(k);
ynoisy = zeros(n,length(snr));
z = zeros(n,length(snr));
berVec = zeros(3,length(EbNo));

AWGN チャネル誤り率計算機のオブジェクトを作成します。誤り率計算機を使用して、復号化されたシンボルと元の送信されたシンボルが比較されます。

awgnchan = comm.AWGNChannel('NoiseMethod', 'Signal to noise ratio (SNR)');
errcalc = comm.ErrorRate;

ランダム データ メッセージを生成して PAM 変調を適用します。チャネルを信号強度に正規化します。シミュレーションをループ処理し、SNR 値の範囲にある BER を生成します。

x = randi([0 M-1],n,1); % Create message signal.
y = pammod(x,M); % Modulate.
awgnchan.SignalPower = (real(y)' * real(y))/ length(real(y));

for jj = 1:length(snr)
    reset(errcalc)
    awgnchan.SNR = snr(jj); % Assign Channel SNR
    ynoisy(:,jj) = awgnchan(real(y)); % Add AWGN
    z(:,jj) = pamdemod(complex(ynoisy(:,jj)),M); % Demodulate.
    
    % Compute symbol error rate from simulation.
    berVec(:,jj) = errcalc(x,z(:,jj));
end

理論上の結果と実測結果を比較します。

hold on;
semilogy(EbNo,berVec(1,:),'b.');
legend('Theoretical SER','Empirical SER');
title('Comparing Theoretical and Empirical Error Rates');
hold off;

誤り率のプロット

この節の概要

通信システムの性能を検証するための視覚的な手段を提供する誤り率のプロットは、多くの出版物でも取り入れられています。この節では、誤り率のプロット作成に利用可能なツールについて説明し、これを必要に応じて修正し、誤り率データに対する曲線近似を実行します。また、曲線近似の例も示します。MATLAB® のプロット機能全般に関する詳細は、MATLAB ドキュメンテーション セットを参照してください。

semilogy を使用した誤り率プロットの作成

誤り率プロットの多くは、水平軸に Eb/N0 値 (dB) をとり、垂直軸に誤り率を 10 を底とする対数で表します。そういったプロットの例については、その作成コードと合わせて理論上の誤り率と実測誤り率の比較を参照してください。プロットを作成する例のこの部分は、関数 semilogy を使用して、垂直軸上に対数スケール、水平軸上に線形スケールを作成します。

その他の semilogy の使用例は、以下の節にあります。

  • 半解析的手法の使用、ここでは以下についても示しています。

    • 1 対の座標軸上への 2 セットのデータのプロット

    • タイトルの追加

    • 凡例の追加

  • 理論上の誤り率のプロット、ここでは以下についても示しています。

    • 軸ラベルの追加

    • グリッド線の追加

誤り率プロットの曲線近似

小規模または不完全なデータセットしかない場合に、滑らかな曲線をプロットしてプレゼンテーションを行いたいときには、曲線近似が役に立ちます。Communications Toolbox の関数 berfit は、実測データがさまざまな Eb/N0 値における誤り率を示している場合、その状態に非常に適した曲線近似の機能を提供します。この関数により以下が可能です。

  • 近似の生成に使用される閉じた形の関数の種類の (事前に設定された一覧からの) 選択など、曲線近似プロセスのさまざまな関連局面のカスタマイズ。

  • berfit がデータに近似させる曲線に沿った、実測データのプロット。

  • 実測データセットの Eb/N0 値間の近似曲線上に点を内挿し、プロット表示を平滑化。

  • 近似曲線に沿った点の数値や近似式の係数など、近似に関連する情報の収集。

メモ

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

関数 berfit のすべての入出力項目については、リファレンス ページを参照してください。

誤り率プロットの曲線近似

この例は、単純な差動 2 位相シフト キーイング (DBPSK) 通信システムをシミュレートし、一連の Eb/N0 値に対応する誤り率データをプロットします。関数 berfit を使用して、やや粗めの実測誤り率の集合を曲線で近似します。

シミュレーション パラメーターの初期化

入力信号メッセージ長、変調次数、処理対象とする Eb/N0 値の範囲、およびシミュレーションがその Eb/N0 値に対する誤り率を計算する前に発生しなければならない誤りの最小数を指定します。結果と中間結果の変数を事前に割り当てます。

誤り率の結果を統計的に正確なものにするには誤りの最小数を 100 のオーダーにする必要がありますが、このシミュレーションでは少ない誤り数を使用して実行時間を短縮し、粗いデータセットから滑らかな近似曲線を作成する方法を示します。

siglen = 100000; % Number of bits in each trial
M = 2; % DBPSK is binary.
EbN0vec = 0:5; % Vector of EbN0 values
minnumerr = 5; % Compute BER only after 5 errors occur.
numEbN0 = length(EbN0vec); % Number of EbN0 values

ber = zeros(1,numEbN0); % final BER values
berVec = zeros(3,numEbN0); % Updated BER values
intv = cell(1,numEbN0); % Cell array of confidence intervals

誤り率計算機 System object™ を作成します。

errorCalc = comm.ErrorRate;

シミュレーション ループ

DBPSK 変調された通信システムをシミュレートし、for ループを使用して Eb/N0 値に変化を与えて BER を計算します。内側の while ループは、各 Eb/N0 値に対して発生するビット誤りを最小数にします。曲線近似およびプロット時に、使用する各 Eb/N0 値について誤り率の統計が保存されます。

% Loop over the vector of EbN0 values.
for jj = 1:numEbN0
    EbN0 = EbN0vec(jj);
    snr = EbN0; % Because of binary modulation
    reset(errorCalc)
    awgnChan.SNR = snr; % Assign Channel SNR
    
    while (berVec(2,jj) < minnumerr)
        msg = randi([0,M-1],siglen,1); % Generate message sequence
        %        txsig = step(hMod,msg); % Modulate
        txsig = dpskmod(msg,M); % Modulate
        awgnChan.SignalPower = (txsig'*txsig)/length(txsig); % Calculate and assign signal power
        %        rxsig = awgnChan(txsig); % Add noise.
        rxsig = awgn(txsig,snr,'measured'); % Add noise.
        %        decodmsg = step(hDemod, rxsig); % Demodulate.
        decodmsg = dpskdemod(rxsig,M); % Demodulate.
        berVec(:,jj) = errorCalc(msg,decodmsg); % Calculate BER
    end

berconfint を使用して、Eb/N0 値に対する 98% の信頼区間での誤り率を計算します。

    [ber(jj), intv1] = berconfint(berVec(2,jj),berVec(3,jj),0.98);
    intv{jj} = intv1;
    disp(['EbN0 = ' num2str(EbN0) ' dB, ' num2str(berVec(2,jj)) ...
        ' errors, BER = ' num2str(ber(jj))])
end
EbN0 = 0 dB, 18392 errors, BER = 0.18392
EbN0 = 1 dB, 14307 errors, BER = 0.14307
EbN0 = 2 dB, 10190 errors, BER = 0.1019
EbN0 = 3 dB, 6940 errors, BER = 0.0694
EbN0 = 4 dB, 4151 errors, BER = 0.04151
EbN0 = 5 dB, 2098 errors, BER = 0.02098

berfit を使用して、滑らかなプロットを可能にするために内挿を行い、最良の近似曲線をプロットします。プロットに信頼区間を追加します。

fitEbN0 = EbN0vec(1):0.25:EbN0vec(end); % Interpolation values
berfit(EbN0vec,ber,fitEbN0);
hold on;
for jj=1:numEbN0
    semilogy([EbN0vec(jj) EbN0vec(jj)],intv{jj},'g-+');
end
hold off;

BERTool

コマンド bertool は、ビット誤り率解析ツール (BERTool) アプリケーションを起動します。

このアプリケーションを使用することで、通信システムのビット誤り率 (BER) 性能を解析できます。BERTool は、S/N 比の関数として BER を計算します。これは、MATLAB 関数および Simulink® モデルのモンテカルロ シミュレーションまたは選択されたタイプの通信システムに対応する閉形式の理論式のいずれかにより性能解析を行います。

BERTool では次の作業を実行できます。

  • 次を利用した、通信システムに対する BER データの作成

    • 選択された種類の通信システムの理論上の BER の性能に対する閉じた形の式

    • 半解析的手法

    • MATLAB シミュレーション関数または Simulink モデルに含まれるシミュレーション。システムをシミュレートする関数またはモデルを作成した後、BERTool は選択された E b/N0 の値について反復し、結果を集める。

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

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

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

メモ

BERTool はシンボル誤り率、ワード誤り率、あるいは他の種類の誤り率ではなく、ビット誤り率のみの解析のために設計されています。たとえば、シミュレーションがシンボル誤り率 (SER) を計算する場合、BERTool でのシミュレーションを利用する前に SER を BER に変換します。

次の節ではビット誤り率解析ツール (BERTool) を説明し、この GUI の使用方法を示す例を提供します。

BERTool の起動

BERTool を開くには次のように入力します。

bertool

BERTool 環境

BERTool のコンポーネント

  • 上部にあるデータ ビューアー。これは、最初は空です。

    BERTool に 1 つまたは複数の BER データ セットを作成するように指示するとデータ ビューアーに表示されます。データ セットがデータ ビューアーでどのように表示されるかを示す例については、例:BERTool での MATLAB シミュレーションの使用を参照してください。

  • 下部にある一連のタブ。[Theoretical][Semianalytic][Monte Carlo] というラベルが付いたタブは BERTool が BER データを生成する異なるメソッドに対応します。

    メモ

    BERTool を使用して、理論上の結果とモンテカルロの結果を比較する場合、提供された Simulink モデルは [Theoretical] タブのパラメーターによって定義されたシステムを正確にモデル化しなければなりません。

    各手法についてさらに学習するには、次を参照してください。

  • データ ビューアーにリストされている BER データ セットのいくつかまたはすべてを表示する個々の BER Figure ウィンドウ。BERTool は表示するデータ セットが少なくとも 1 つある場合に BER Figure ウィンドウを開きます。したがって、最初に BERTool を開いたときには BER Figure ウィンドウは表示されません。BER Figure ウィンドウの表示の例については、例:BERTool での [Theoretical] タブの利用を参照してください。

BERTool のコンポーネントの相互関係-  BERTool のコンポーネントは 1 つの統合されたツールとして動作します。次の動作は、それらの統合を反映しています。

  • データ ビューアーでデータ セットを選択すると BERTool はそのデータ セットに関連するパラメーターを示すためにタブを再設定し、BER Figure ウィンドウの相当するデータの強調表示も行います。これは、複数のデータ セットがデータ ビューアーに表示されている場合に、各データ セットの意味とオリジナルを確認したい場合に役立ちます。

  • BER Figure ウィンドウにプロットされたデータをクリックすると BERTool はそのデータセットに関連するパラメーターを示すためにタブを再設定し、データ ビューアーの相当するデータセットを強調表示します。

    メモ

    BERTool でモンテ カルロ シミュレーションの結果を生成している間はデータ点をクリックできません。すべてのデータ点が生成されるまで待ってからデータ点をクリックして詳細を表示してください。

  • 既存のデータ セットに反映済みの方法で [Semianalytic] または [Theoretical] タブを設定すると BERTool はデータ ビューアーのそのデータ セットを強調表示します。これは、要求された結果を表示する一方で BERTool がデータ ビューアー内の計算とエントリが重複することを防ぎます。

  • BER Figure ウィンドウを閉じた場合、BERTool の [Window] メニューから [BER Figure] を選択して再び開くことができます。

  • BER プロットに影響を与えるオプションをデータ ビューアーで選択すると BER Figure ウィンドウはその選択を直ちに反映します。このようなオプションは、データ セットの名前、信頼区間、曲線近似、BER プロットの特定のデータ セットが存在するかどうかに関連します。

メモ

BERTool にデータ セットがまだないために統合を確認できない場合は最初に例:BERTool での [Theoretical] タブの利用の手順を試してください。

メモ

BER Figure ウィンドウの [File] メニューを使用してウィンドウを保存する場合、結果のファイルはウィンドウの内容を含みますが、プロットの元になった BERTool データを含みません。BERTool セッション全体を保存するには、BERTool セッションの保存を参照してください。

理論上の BER の計算

この節の概要-  BERTool を利用して理論上の BER データを作成し解析できます。理論上のデータは、シミュレーション結果との比較に役立ちます。ただし、閉じた形の BER の式は、ある種の通信システムに対してのみ存在します。

理論上の BER データに関連する BERTool の機能にアクセスするには次の手順を実行します。

  1. BERTool を開き、[Theoretical] タブに移動します。

  2. 性能解析を行うシステムを表すようにパラメーターを設定します。他のパラメーターが特定の値をもつ場合に限り、使用可能になり表示されるパラメーターがあります。詳細は、利用可能な理論上の BER のデータ セットを参照してください。

  3. [Plot] をクリックします。

BERTool で理論上の BER データを作成し解析する方法を示す例については、例:BERTool での [Theoretical] タブの利用を参照してください。

さらに、利用可能な理論上の BER のデータ セット[Theoretical] タブ上でどのパラメーターの組み合わせが利用可能であるかとどの関数が計算を実行するかを示します。

例:BERTool での [Theoretical] タブの利用-  次の例では理論上の BER データを作成しプロットするために BERTool を使用する方法を説明します。特に、この例では、AWGN チャネルと異なる次数の QAM 変調を利用する通信システムの性能を比較します。

理論的な例の実行

  1. BERTool を開き、[Theoretical] タブに移動します。

  2. 次の図に示すようにパラメーターを設定します。

  3. [Plot] をクリックします。

    BERTool はデータ ビューアーにエントリを作成し、BER Figure ウィンドウにデータをプロットします。パラメーターは Eb/N0 が 18 まで増加することを要求していますが、BERTool は BER の値が少なくとも 10-8 であるものについてのみプロットします。次の図はこの手順を示します。

  4. [Modulation order] パラメーターを 16 に変更して [Plot] をクリックします。

    BERTool はデータ ビューアーに別のエントリを作成し、同じ BER Figure ウィンドウに新しいデータをプロットします (図示されていません)。

  5. [Modulation order] パラメーターを 64 に変更して [Plot] をクリックします。

    BERTool はデータ ビューアーに別のエントリを作成し、次の図に示すように同じ BER Figure ウィンドウに新しいデータをプロットします。

  6. 与えられた曲線に対応する [Modulation order] の値を確認するには曲線をクリックします。BERTool はその曲線に対応する値を示すために [Theoretical] タブのパラメーターを調整して応答します。

  7. 最後の曲線をプロット (ただし、データ ビューアーからではない) から削除するには、データ ビューアーの [Plot] の列の最後のエントリのチェック ボックスをオフにします。曲線をプロットに戻すには、チェック ボックスを再びオンにします。

利用可能な理論上の BER のデータ セット-  BERTool は理論的なビット誤り率の非常に大きなセットを生成できますが、現在、パラメーターの組み合わせがすべてサポートされているとは限りません。[Theoretical] タブは選択に合わせて調整を行い、パラメーターの組み合わせが常に有効であるようにします。メニューから選択するか、あるいは、フィールドに値を入力して、[Modulation order] パラメーターを設定できます。[Normalized timing error] は、0 から 0.5 までの値でなければなりません。

BERTool ではすべての変調にグレイ符号化が使用されていることを前提にしています。

QAM では log2M (M は変調次数) が奇数の場合、四角形のコンスタレーションを前提としています。

AWGN チャネル システムに対するパラメーターの組み合わせ

次の表は AWGN チャネルを使用するシステムに対する理論上の BER データの利用可能なセットを示します。

変調変調次数他の選択
PSK 2、4差分符号化または非差分符号化。
8、16、32、64、またはより高次の 2 のべき乗 
OQPSK4差分符号化または非差分符号化。
DPSK2、4、8、16、32、64、またはより高次の 2 のべき乗 
PAM 2、4、8、16、32、64、またはより高次の 2 のべき乗 
QAM 4、8、16、32、64、128、256、512、1024、またはより高次の 2 のべき乗 
FSK2直交または非直交、Coherent または Noncoherent 復調。
4、8、16、32、またはより高次の 2 のべき乗直交、Coherent 復調。
4、8、16、32 または 64直交、Noncoherent 復調。
MSK2通常またはプリコーディングされた Coherent、プリコーディングされた Noncoherent MSK。
CPFSK2、4、8、16、またはより高次の 2 のべき乗Modulation index > 0。

BER の結果は次の場合にも使用できます。

  • CPFSK 以外のすべての変調で硬判定復号化を使用するブロックおよび畳み込み符号化

  • CPFSK、非コヒーレント非直交 FSK、および非コヒーレント MSK 以外のすべてのバイナリ変調 (4-PSK と 4-QAM を含む) で軟判定復号化を使用するブロック符号化

  • CPFSK 以外のすべてのバイナリ変調 (4-PSK と 4-QAM を含む) で軟判定復号化を使用する畳み込み符号化

  • 同期エラーがある符号化されていない非差分符号化 2-PSK

パラメーターの特定の組み合わせについての詳細は閉じた式を含む文献の参照がある次の関数のリファレンス ページを参照してください。

  • berawgn - 符号化の無い完全同期のシステムを対象とする

  • bercoding - チャネル符号化をもつシステムを対象とする

  • bersync - BPSK 変調あり、符号化なしの、不完全同期のシステムを対象とする

レイリーおよびライス チャネル システムに対するパラメーターの組み合わせ

次の表はレイリー チャネルまたはライス チャネルを使用するシステムに対する理論上の BER データの利用可能なセットを示します。

ダイバーシティが使用されると各ダイバーシティ ブランチの SNR はダイバーシティ次数で除算されたチャネルの入力 (EbNo) での SNR から派生します。

変調変調次数他の選択
PSK2

差分符号化または非差分符号化

Diversity order ≧1

非差分符号化、ダイバーシティ次数 1、およびライス フェージングの場合は RMS 位相ノイズの値 (ラジアン単位) を指定できます。

4、8、16、32、64、またはより高次の 2 のべき乗Diversity order ≧1
OQPSK4Diversity order ≧1
DPSK2、4、8、16、32、64、またはより高次の 2 のべき乗Diversity order ≧1
PAM2、4、8、16、32、64、またはより高次の 2 のべき乗Diversity order ≧1
QAM4、8、16、32、64、128、256、512、1024、またはより高次の 2 のべき乗Diversity order ≧1
FSK2

相関係数 [1,1]

Coherent または Noncoherent 復調

Diversity order ≧1

非ゼロ相関係数および非コヒーレント復調の場合、ダイバーシティ次数は 1 だけです。

4、8、16、32、またはより高次の 2 のべき乗Noncoherent 復調のみ。Diversity order ≧1

パラメーターの特定の組み合わせについての詳細は閉じた式を含む文献の参照がある、関数 berfading のリファレンス ページを参照してください。

半解析的手法を利用する BER の計算

この節の概要-  BERTool を使用して半解析的手法で BER データを作成し解析できます。半解析的手法については半解析的手法による性能結果で説明します。半解析的手法が必要な場合は、特に参考資料として関連します。

BERTool の半解析的な機能にアクセスするには [Semianalytic] タブを開きます。

BERTool が半解析的手法を適用する方法についての詳細は、BERTool が計算の実行に使用する関数 semianalytic のリファレンス ページを参照してください。

例:BERTool での [Semianalytic] タブの利用-  次の例では BERTool が 16-QAM 変調を使用して半解析的手法を適用する方法を示します。この例は半解析的手法の使用の例を変えたものですが、関数 semianalytic を直接使用する代わりに BERTool を使用するように変更されています。

半解析的な例の実行

  1. 送信された信号および受信された信号を設定します。長さ >= ML のメッセージ信号を生成します。ベースバンド変調を使用して、メッセージ信号を変調します。さらに送信フィルター処理を行わず、パルス整形を適用します。ノイズのないチャネルを介して送信信号を渡します。

    M = 16; % Alphabet size of modulation
    L = 1; % Length of impulse response of channel
    msg = [0:M-1 0]; % M-ary message sequence of length > M^L
    
    modsig = qammod(msg,M); % Use 16-QAM.
    
    Nsamp = 16;
    modsig = rectpulse(modsig,Nsamp); % Use rectangular pulse shaping.
    txsig = modsig; % No filter in this example
    
    rxsig = txsig*exp(j*pi/180); % Static phase offset of 1 degree
  2. BERTool を開き、[Semianalytic] タブに移動します。

  3. 次の図に示すように、パラメーターを設定します。

  4. [Plot] をクリックします。

半解析的な例の表示できる結果

[Plot] をクリックするとデータ ビューアーに結果のデータのリストが作成されます。

BER Figure ウィンドウにデータがプロットされます。

BERTool の [Semianalytic] タブを利用するための手順-  次の手順では、BERTool を使用して半解析的手法を実行する標準的な方法を説明します。

  1. "少なくとも" ML シンボルを含むメッセージ信号を作成します。ここで M は変調のアルファベット サイズで、L はチャネルのインパルス応答のシンボルの長さです。一般的な方法として、まず全長が (log2M)ML の拡張バイナリ疑似ノイズ (PN) シーケンスで始めます。"拡張" PN シーケンスは、余分な 0 が追加された PN シーケンスで、1 と 0 の分布を等しくします。

  2. ベースバンド変調を使って、メッセージ信号をもつ搬送波を変調します。サポートされている変調の種類は、semianalytic のリファレンス ページにリストされています。変調された信号をフィルター処理するために後で使用するオーバーサンプリング係数を使って、矩形パルス整形で結果の信号を整形します。このステップの結果を後で利用するために txsig を格納します。

  3. 送信フィルターを使って変調された信号をフィルター処理します。このフィルターは、多くの場合、ルート レイズド コサイン フィルターですが、バタワース、ベッセル、チェビシェフⅠ型またはⅡ型、楕円、あるいはより一般的には FIR または IIR フィルターも使用できます。ルート レイズド コサイン フィルターを使用する場合、これをオーバーサンプリングされていない変調信号に使用し、フィルター処理関数でオーバーサンプリング係数を指定します。他の種類のフィルターを使用する場合、矩形パルス整形された信号に適用できます。

  4. "ノイズのない" チャネルを通してフィルター処理された信号を実行します。このチャネルは、マルチパス フェージング効果、位相シフト、増幅器の非線形性、量子化、追加のフィルター処理を含むことができますが、ノイズを含んではいけません。このステップの結果を後で利用するために rxsig を格納します。

  5. BERTool の [Semianalytic] タブ上で次の表のようにパラメーターを入力します。

    パラメーター名平均
    Eb/No の範囲BER のデータを集めるための Eb/N0 の値をリストするベクトル。このフィールドの値は MATLAB 式または MATLAB ワークスペースの変数の名前にすることができます。
    Modulation typeこれらのパラメーターは、この手順で前に使用された変調方式を記述します。
    変調次数
    差分符号化このチェック ボックスは MSK および PSK 変調の場合に表示され使用可能になり、差分符号化または非差分符号化を選択できます。
    シンボルあたりのサンプル数送信信号のシンボルあたりのサンプル数。この値は送信信号と受信信号の Hz 単位のサンプリング レートにもなります。
    送信信号この手順で以前に作成した txsig 信号
    受信信号この手順で以前に作成した rxsig 信号
    分子BERTool が受信信号に適用する受信フィルターの係数
    分母

    メモ

    GUI 内の値の整合性は重要です。たとえば、[Transmitted signal] フィールドで参照される信号が DPSK を使って作成され、[Modulation type][MSK] に設定すると、結果は意味をもたないことがあります。

  6. [Plot] をクリックします。

半解析的な計算と結果

[Plot] をクリックすると BERTool は以下のタスクを実行します。

  • rxsig をフィルター処理してから各点に対してガウス ノイズ分布を解析的に適用することで、受信された各配置点の誤りの確率を決定します。BERTool は受信信号全体に対して誤りの確率を平均し、全体の誤りの確率を決定します。このように計算された誤り確率がシンボル誤り確率である場合、一般的にはグレイ符号化を仮定して BERTool はこれをビット誤り率に変換します (変調の種類が DQPSK または cross QAM の場合、結果はビット誤り率自体ではなくビット誤り率の上限です)。

  • BERTool ウィンドウのデータ ビューアーに結果の BER のデータを入力します。

  • BER Figure ウィンドウに結果の BER データをプロットします。

MATLAB シミュレーションの実行

この節の概要-  BERTool を独自仕様の MATLAB シミュレーション関数とともに使用することにより、BER データの作成および解析を行うことができます。MATLAB 関数は動作確認を行いたい通信システムをシミュレートします。BERTool は、指定された Eb/N0 の値に対してシミュレーションを実行し、シミュレーションから BER データを集め、プロットを作成します。さらに、Eb/N0 の範囲を容易に変更でき、シミュレーションの停止条件を変更できます。

独自仕様のシミュレーション関数を BERTool に対応させる方法については、BERTool でのシミュレーション関数の利用を参照してください。

例:BERTool での MATLAB シミュレーションの使用-  この例では BERTool がどのように MATLAB シミュレーション関数を実行するかを示します。この関数は Communications Toolbox ソフトウェアに付属しているデモのファイルの 1 つである viterbisim です。

この例を実行するには、次の手順に従います。

  1. BERTool を開き、[Monte Carlo] タブに移動します。既定のパラメーターは Communications Toolbox がインストールされているかどうかに依存します。[BER variable name] フィールドは Simulink モデルに対してのみ適用されることにも注意してください。

  2. 次の図に示すように、パラメーターを設定します。

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

    BERTool は Eb/N0 の指定した値それぞれに対してシミュレーション関数を一度実行し、BER データを集めます。BERTool はこのタスクを行っている間、GUI の他のタブからデータをプロットするなど他のタスクを処理できません。

    データ ビューアーにリストが作成されます。

    BER Figure ウィンドウにデータがプロットされます。

  4. 各ケースで処理されるビット数を減らしながら Eb/N0 の範囲を変更するために [Eb/No range] フィールドに [5 5.2 5.3] と入力し、[Number of bits] フィールドに 1e5 と入力して、[実行] をクリックします。

    BERTool は Eb/N0 の新しい値それぞれに対してシミュレーション関数を再び実行し、新しい BER データを集めます。データ ビューアーにもう 1 つのリストが作成されます。

    新しいデータに対応するために横軸を調整して BER Figure ウィンドウにデータがプロットされます。

    2 つのデータ セットの 5 dB に相当する 2 点は異なります。2 回目のシミュレーションの [Number of bits] の小さい方の値によって、多くの誤りを観測する前にシミュレーションが停止します。BERTool がシミュレーションの終了のために使用する条件の詳細は、停止条件の変更を参照してください。

MATLAB シミュレーション関数を実行するために BERTool を使用する他の例については、例:BERTool で利用するシミュレーション関数の準備を参照してください。

停止条件の変更-  BERTool で利用する MATLAB シミュレーション関数を作成する場合は関数が目標数の誤りを検出するか、あるいは最大のビット数を処理するかのいずれかが初めて起きたときにシミュレーションを停止するようにフロー制御しなければなりません。この条件の詳細は、関数に必要となる条件を参照してください。例については、例:BERTool で利用するシミュレーション関数の準備を参照してください。

関数を作成した後、BERTool の [Monte Carlo] タブで目標の誤り数と最大のビット数を設定します。

一般的に、[Number of errors] の値が少なくとも 100 になると正確な誤り率が生成されます。[Number of bits] の値は、特に Eb/N0 の値が大きい場合、シミュレーションの実行が長くなりすぎるのを防ぎます。ただし、[Number of bits] の値が非常に小さいとシミュレーションで誤りがほとんど収集されないので、誤り率は正確でない可能性があります。信頼区間を使用して、シミュレーションで生成される誤り率の精度を測定できます。信頼区間が大きいほど、計算された誤り率の精度は低下します。

例として、例:BERTool での MATLAB シミュレーションの使用で説明する手順に従い、[Confidence Level] を 2 つのデータ セットそれぞれに対して、95 に設定します。2 番目のデータ セットに対する信頼区間は、最初のデータ セットに対するものよりも大きくなります。これは、2 番目のデータ セットが通信システムのプロパティと [Eb/No range] の値に比べて小さな値の [Number of bits] を使用するため、BER の値が少数の観測された誤りにのみ基づくことになるからです。

メモ

ボタンが押されたことを検出し、応答するように関数が設定されている場合、BERTool の [Stop] ボタンを使用して一連のシミュレーションを途中で停止させることができます。

信頼区間のプロット-  BERTool でシミュレーションを実行した後、データ ビューアーの結果のデータ セットは [Confidence Level] 列で利用可能なメニューをもちます。既定値は [off] なので BER Figure ウィンドウのシミュレーション データは信頼区間を示しません。

BER Figure ウィンドウに信頼区間を表示するには [Confidence Level] を以下の数値に設定します。[90%][95%]、または [99%]

BER Figure ウィンドウのプロットには、この選択がすぐに反映されます。サンプル プロットは、次のようになります。

Simulink シミュレーションに対する信頼区間をプロットする例については、例:BERTool での Simulink モデルの利用を参照してください。

[Confidence Level] メニューにリストされないレベルに対する信頼区間を見つけるには関数 berconfint を使用します。

BER の点を曲線近似する-  BERTool でシミュレーションを実行した後、BER Figure ウィンドウは個々の BER データ点をプロットします。少なくとも 4 点を含むデータ セットを曲線近似するには、データ ビューアーの [Fit] の列でボックスをオンにします。

BER Figure ウィンドウのプロットには、この選択がすぐに反映されます。サンプル プロットは、次のようになります。

Simulink シミュレーションからのデータに曲線近似を実行し、上記のようなプロットを作成する例として例:BERTool での Simulink モデルの利用を参照してください。MATLAB シミュレーション関数からのデータに対して曲線近似を実行する例については、例:BERTool で利用するシミュレーション関数の準備を参照してください。

BER データに曲線近似をする過程で柔軟性がより高まるように関数 berfit を使用してください。

BERTool でのシミュレーション関数の利用

関数に必要となる条件-  BERTool で利用するために MATLAB 関数を作成する場合、必ず関数が GUI と適切なやり取りをするようにしてください。この節では BERTool に対応する関数の入力、出力、基本操作を説明します。

入力引数

BERTool は GUI のフィールドのエントリを評価し、関数に次のデータを順に入力引数として渡します。

  • BERTool がシミュレーション関数を呼び出すたびに [Eb/No range] ベクトルからの 1 つの値

  • [Number of errors] の値

  • [Number of bits] の値

出力引数

シミュレーション関数は、次の出力引数を順に計算して出力しなければなりません。

  • シミュレーションのビット誤り率

  • BER を計算するときに処理されるビット数

BERTool は結果をレポートしプロットする際にこれらの出力引数を使用します。

シミュレーション操作

シミュレーション関数は、以下のタスクを行わなければなりません。

  • 最初の入力引数で指定される Eb/N0 値に対して通信システムをシミュレートする。

  • 誤り数または処理されたビット数がそれぞれ、2 番目または 3 番目の入力引数で指定されるしきい値以上になるとき、シミュレーションを停止する。

  • BERTool で [Stop] がクリックされたかどうかを検出し、検出された場合はシミュレーションを停止する。

シミュレーション関数に対するテンプレート-  BERTool に対応するようにコードを適応させる場合は次のテンプレートを利用してください。MATLAB のコマンド ウィンドウに edit bertooltemplate と入力すると、エディターで開くことができます。テンプレートの理解ではテンプレートの重要なセクションを説明し、テンプレートの利用では、テンプレートを独自のシミュレーション コードと組み合わせて使う方法を示します。また、テンプレートを使用しないシミュレーション関数の開発も可能ですが、関数に必要となる条件で説明した条件を満たすことを確かめてください。

メモ

テンプレートは BERTool で使用する準備がまだ整っていません。INSERT YOUR CODE HERE とマークされた場所にシミュレーション コードを挿入しなければなりません。このテンプレートに基づき作成された例については、例:BERTool で利用するシミュレーション関数の準備を参照してください。

function [ber, numBits] = bertooltemplate(EbNo, maxNumErrs, maxNumBits)
% Import Java class for BERTool.
import com.mathworks.toolbox.comm.BERTool;

% Initialize variables related to exit criteria.
berVec = zeros(3,1); % Updated BER values

% --- Set up parameters. ---
% --- INSERT YOUR CODE HERE.
% Simulate until number of errors exceeds maxNumErrs
% or number of bits processed exceeds maxNumBits.
while((berVec(2) < maxNumErrs) && (berVec(3) < maxNumBits))

   % Check if the user clicked the Stop button of BERTool.
   if (BERTool.getSimulationStop)
      break;
   end

   % --- Proceed with simulation.
   % --- Be sure to update totErr and numBits.
   % --- INSERT YOUR CODE HERE.
end % End of loop

% Assign values to the output variables.
ber = berVec(1);
numBits = berVec(3);
テンプレートの理解-  

関数テンプレートのコードを調べ、関数が関数に必要となる条件に示された条件をどのように満たしているか、また、独自コードを挿入するのに適切な位置がどこであると示されているかに注目してください。特に、

  • 関数は、適切な入力引数と出力引数をもちます。

  • 関数は与えられた Eb/N0 値に対してシステムをシミュレートするコードに対するプレースホルダーを含みます。

  • 関数はループ構造を利用し、誤り数が maxNumErrs を超えること、あるいはビット数が maxNumBits を超えることのいずれかが初めて起こったときにシミュレーションを停止する。

    メモ

    ループの while 文は終了の条件を記述しますが、Proceed with simulation とマークされた箇所に挿入された独自仕様のコードでは誤り数とビット数を計算しなければなりません。独自仕様のコードがこれらの計算を実行しない場合、ループを終了させる唯一の方法は [Stop] をクリックすることです。

  • それぞれのループの繰り返しにおいて、関数は BERTool における [Stop] のクリックを検出します。

テンプレートの利用-  

独自仕様のシミュレーション コードを含むテンプレートの利用手順は、次のようになります。

  1. 実行しなければならない設定タスクを決めます。たとえば、変調のアルファベット サイズ、フィルター係数、畳み込み符号化トレリス、畳み込みインターリーバーの状態を含む変数を初期化したい場合があります。これらの設定のためのコードを Set up parameters とマークされたテンプレートの位置に置きます。

  2. すべての設定作業が既に実行されたと仮定して、コア シミュレーション タスクを決めます。たとえば、これらのタスクには、誤り制御符号化、変調/復調、チャネル モデル作成などが含まれます。これらのコア シミュレーション タスクのためのコードを Proceed with simulation とマークされたテンプレートの位置に置きます。

  3. Proceed with simulation とマークされたテンプレートの位置にも totErrnumBits の値を更新するコードが含まれます。totErr の値はこれまでに観測された誤り数を表します。numBits の値はこれまでに処理されたビット数を表します。これらの変数を更新する計算は、コア シミュレーション タスクがどのように動作するかによります。

    メモ

    誤りとビット数の更新は、確実にループが終了するために重要です。ただし、関数テンプレートを使用して開発作業の早い段階で無限ループを誤って作成してしまった場合はシミュレーションを停止するために BERTool の [Stop] をクリックします。

  4. BERTool は GUI に入力されたデータを評価後、これらの値を入力引数として関数に渡すので EbNomaxNumErrs、または maxNumBits を初期化するコードの設定を省略します。

  5. 使用する変数名や意味に矛盾がないように、独自コードやテンプレート コードを必要に応じて変更します。たとえば、独自仕様のコードが ebn0 という変数を利用し、テンプレートの関数宣言 (最初の行) が変数名 EbNo を使用する場合、これらの名前が一致するように一方を変更しなければなりません。他の例として独自仕様のコードが Eb/N0 ではなく SNR を使用する場合、値を適切に変換しなければなりません。

例:BERTool で利用するシミュレーション関数の準備-  この節では、シミュレーション関数に対するテンプレートで指定した関数テンプレートを変更します。

関数の準備

BERTool で利用する関数を準備するには次の手順に従います。

  1. シミュレーション関数に対するテンプレート からのテンプレートを MATLAB エディターの新しい MATLAB ファイルにコピーします。MATLAB パス上のフォルダーにファイル名 bertool_simfcn を使用してこれを保存します。

  2. 元の例から、以下の行は設定のタスクです。これらは EbNovecnumerrmin などの変数を直接定義せず、BERTool が関数に提供する入力引数を利用するように元の例が修正されています。

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

    テンプレートの Set up parameters とマークされた箇所にこれらのコード行を置きます。

  3. 元の例から、設定のすべてのタスクが実行された後、次の行はコア シミュレーション タスクです。

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

    これらのコア シミュレーション タスクのためのコードを Proceed with simulation とマークされたテンプレートの位置に置きます。

関数 bertool_simfcn は BERTool に対応しています。元の例と違い、ここでの関数は EbNovec を初期化 "せず"EbNo をスカラーとして定義、あるいは目標の誤り数として numerrmin を使用することに注意してください。これは BERTool が同じような値に対して入力引数を与えるためです。関数 bertool_simfcn は BERTool によってコードを記述せずに同様のタスクを対話形式で行うことができるので、プロット、曲線近似、信頼区間に関連するコードを除くこともできます。

用意された関数の利用

bertool_simfcn を BERTool とともに使用するには次の手順に従い例を続けます。

  1. BERTool を開き、[Monte Carlo] タブに移動します。

  2. 次の図に示すように、[Monte Carlo] タブでパラメーターを設定します。

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

    BERTool によって計算結果がプロットされます (計算には少し時間がかかります)。このシミュレーションでは EbNo の各値に対して 5 つの誤りしか必要としなかったので、結果が滑らかな曲線に乗らないように見えます。

  4. BER Figure ウィンドウの一連の点を曲線近似するには、データ ビューアーで [Fit] の隣のボックスをオンにします。

    次の図に示すように曲線がプロットされます。

Simulink シミュレーションの実行

この節の概要-  BERTool を Simulink モデルと組み合わせて使用すると、BER データを生成して分析できます。Simulink モデルはパフォーマンスを調査する通信システムをシミュレートし、BERTool はモデルを使用して一連のシミュレーションを管理し、BER データを収集します。

メモ

BERTool 内で Simulink モデルを使用するには、Simulink ライセンスが必要です。Communications Toolbox ソフトウェアを使用してください。この節の後半では、Simulink と Communications Toolbox の両方のアプリケーションのライセンスがあるものと仮定します。

Simulink モデルに関連する BERTool の機能にアクセスするには、[Monte Carlo] タブを開きます。

シミュレーション データに対する信頼区間と曲線近似の詳細は、それぞれ信頼区間のプロットおよびBER の点を曲線近似するを参照してください。

例:BERTool での Simulink モデルの利用-  この例では、BERTool で Simulink モデルの一連のシミュレーションを管理し、プロットを変更する方法を示します。モデルは commgraycode で、Communications Toolbox ソフトウェアに含まれているデモ モデルの 1 つです。この例では、Communications Toolbox ソフトウェアがインストールされていると仮定しています。

この例を実行するには、次の手順に従います。

  1. BERTool を開き、[Monte Carlo] タブに移動します。モデルのファイル名 commgraycode.mdl が、[Simulation MATLAB file or Simulink model] パラメーターとして表示されます。(ここに viterbisim.m が表示された場合は、Communications Toolbox ソフトウェアがインストールされていることを指定してください)。

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

    BERTool では、メモリへのモデルの読み込み (および MATLAB ワークスペースの一部の変数の初期化)、Eb/N0 の値ごとに 1 回のシミュレーションの実行、および BER データの収集を行い、データ ビューアーにリストが作成されます。

    BER Figure ウィンドウにデータがプロットされます。

  3. BER Figure ウィンドウの一連の点を曲線近似するには、データ ビューアーで [Fit] の隣のボックスをオンにします。

    以下に示すように曲線がプロットされます。

  4. シミュレーション データの各点の周囲に 99% の信頼区間を示すには、データ ビューアーで [Confidence Level]99% に設定します。

    以下に示すように、信頼区間を表す誤差範囲が表示されます。

一連の Simulink シミュレーションを管理するために BERTool を使用する例が例:BERTool で使用するモデルの準備にあります。

停止条件の変更-  BERTool で使用する Simulink モデルを作成する場合、シミュレーションで目標の誤り数が検出された場合、またはビットの最大数が処理された場合、どちらが先に発生するかに関係なくシミュレーションが終了するように設定しなければなりません。この条件の詳細は、モデルに対する必要事項を参照してください。例については、例:BERTool で使用するモデルの準備を参照してください。

Simulink モデルを作成した後、BERTool の [Monte Carlo] タブで目標の誤り数と最大のビット数を設定します。

一般的に、[Number of errors] の値が少なくとも 100 になると正確な誤り率が生成されます。[Number of bits] の値は、特に Eb/N0 の値が大きい場合、シミュレーションの実行が長くなりすぎるのを防ぎます。ただし、[Number of bits] の値が非常に小さいとシミュレーションで誤りがほとんど収集されないので、誤り率は正確でない可能性があります。信頼区間を使用して、シミュレーションで生成される誤り率の精度を測定できます。信頼区間が大きいほど、計算された誤り率の精度は低下します。

BERTool で [Stop] をクリックして一連のシミュレーションを途中で停止することもできます。

BERTool での Simulink モデルの利用

モデルに対する必要事項-  BERTool で使用する Simulink モデルは、次の条件を満たさなければなりません。ここで、大文字と小文字が区別される変数名は下記に示すとおりに指定しなければなりません。

  • チャネル ブロックは、Eb/N0 に対するハードコードされた値ではなく、変数 EbNo を使用しなければなりません。

  • 誤りの数が変数 maxNumErrs の値に達した場合、または処理されたビット数が変数 maxNumBits の値に達した場合、いずれが先に発生したかに関係なくシミュレーションを停止しなければなりません。

    そのような条件に基づいてシミュレーションを停止するように Communications Toolbox ソフトウェアの Error Rate Calculation ブロックを設定できます。

  • シミュレーションは、最終的な誤り率データを BERTool の [BER variable name] フィールドに入力する値をもつ変数として MATLAB ワークスペースに送ります。変数は BER、ビット誤りの数、および処理されたビット数をリストする 3 要素ベクトルでなければなりません。

    この 3 要素ベクトルの形式は、Error Rate Calculation ブロックによってサポートされています。

モデルを準備するためのヒント-  ここでは、BERTool で使用する Simulink モデルを準備するためのヒントを紹介します。

  • 後続の手順で Simulink ブロックに対して定義されていない変数名をダイアログ ボックスで使用しないようにするために、下記のようなコマンドを使用して MATLAB ワークスペースに変数を設定します。

    EbNo = 0; maxNumErrs = 100; maxNumBits = 1e8;
    

    将来の MATLAB セッションでモデルを再び開く際に変数を初期化するように、事前に読み込まれているモデルの関数コールバックに同じコマンドを配置することもできます。

    BERTool を使用するとき GUI での入力に基づき実際の値が指定されるので、上記の初期値は任意になります。

  • チャネルのモデルを作成するには、Communications Toolbox ソフトウェアで AWGN Channel ブロックを以下のパラメーターとともに使用します。

    • [Mode] = Signal to noise ratio (Eb/No)

    • [Eb/No] = EbNo

  • 誤り率を計算するには、Communications Toolbox ソフトウェアの Error Rate Calculation ブロックを以下のパラメーターとともに使用します。

    • [Stop simulation] をオンにします。

    • [Target number of errors] = maxNumErrs

    • [Maximum number of symbols] = maxNumBits

  • Error Rate Calculation ブロックから MATLAB ワークスペースにデータを送るには、[Output data][Port] に設定し、To Workspace (Simulink) ブロックを加え、このブロックの [Limit data points to last] パラメーターを 1 に設定します。To Workspace (Simulink) ブロックの [Variable name] パラメーターは、BERTool の [BER variable name] フィールドに入力した値に一致しなければなりません。

    ヒント

    1 つ以上の To Workspace (Simulink) ブロックを使用できます。To Workspace (Simulink) を DSP System Toolbox™ / Sinks ライブラリから必ず選択します。

  • モデルがビット誤り率ではなくシンボル誤り率を計算する場合、Communications Toolbox ソフトウェアの Integer to Bit Converter ブロックを使用してシンボルをビットに変換します。

  • フレームベースのシミュレーションは、多くの場合、同じビット数の処理についてサンプル ベースのシミュレーションより高速で実行されます。シミュレーションでは常に各フレームで一定のデータ量が処理されるので、誤り数または処理されるビット数は BERTool に入力した値より多くなる場合があります。

  • [Signal to noise ratio (Eb/No)] 以外の [Mode] パラメーターを使用して AWGN Channel ブロックを使用する既存のモデルがある場合、代わりに Eb/No モードを使用するようにブロックを変更することができます。ブロックのさまざまなモードがどのように関連しているかの詳細は、AWGN Channel ブロックの [Help] ボタンをクリックして表示されるオンライン リファレンス ページを参照してください。

  • モデルがプリロード関数またはその他のコールバックを使用して、読み込むときに MATLAB ワークスペースの変数を初期化する場合、BERTool の [実行] ボタンを使用する前に次のいずれかの条件が満たされていることを確認してください。

    • モデルが現在メモリ内にない。この場合、BERTool はメモリにモデルを読み込んでコールバック関数を実行します。

    • モデルは (ウィンドウ内にあるかどうかに関係なく) メモリ内にあり、変数は変化していない。

    BERTool の [実行] ボタンを使用する前に、モデルの変数を消去または上書きした場合、あるいはそれらの値を復元する場合、MATLAB のコマンド ウィンドウで関数 bdclose を使用してメモリからモデルを消去することができます。その場合、[実行] をクリックした後、BERTool はモデルを再び読み込みます。同様に、clear all または clear variables コマンドを発行してワークスペースを更新する場合、bdclose all を使用してメモリからモデルを消去する必要もあります。

例:BERTool で使用するモデルの準備-  この例では、BERTool で使用するためにセットアップされた Simulink モデルを使用します。この例は、Simulink シミュレーションの BER のパフォーマンスを理論上の BER の結果と比較する方法も示します。この例では、Communications Toolbox ソフトウェアがインストールされていると仮定しています。

BERTool で使用するモデルを準備するには、大文字と小文字が厳密に区別される変数名を使用して、次の手順に従います。

  1. MATLAB コマンド ウィンドウで次のコマンドを入力してモデルを開きます。

    doc_bpsk
    

  2. MATLAB ワークスペースでパラメーターを初期化し、未定義の変数をブロック パラメーターとして使用しないようにするには、MATLAB コマンド ウィンドウで次のコマンドを入力します。

    EbNo = 0; maxNumErrs = 100; maxNumBits = 1e8;
    
  3. シミュレーションを実行するたびに BERTool が正確な量のノイズを使用することを確認するには、ブロックをダブルクリックして AWGN Channel ブロックのダイアログ ボックスを開きます。[Es/No]EbNo に設定されていることを確認し、[OK] をクリックします。この特定のモデルでは、変調の種類が BPSK なので、Es/N0 は Eb/N0 と等価です。

  4. 各反復に対して BERTool で正しい停止条件を使用するようにするため、

    • Error Rate Calculation ブロックのダイアログ ボックスを開きます。[Target number of errors]maxNumErrs に設定され、[Maximum number of symbols]maxNumBits に設定されていることを確認します。[OK] をクリックします。

    • シミュレーション終了時間は、Inf に設定しなければなりません。

  5. Error Rate Calculation ブロックが計算する BER の結果に BERTool がアクセスできるようにするため、To Workspace (Simulink) ブロック、BER が Error Rate Calculation ブロックの出力に接続されます。

    ヒント

    1 つ以上の To Workspace (Simulink) ブロックを使用できます。To Workspace (Simulink) を DSP System Toolbox / Sinks ライブラリから必ず選択します。

BERTool で doc_bpsk モデルを使用するには、次の手順に従います。

  1. BERTool を開き、[Monte Carlo] タブに移動します。

  2. 次の図に示すように、[Monte Carlo] タブでパラメーターを設定します。

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

    BERTool によって計算結果がプロットされます (計算には少し時間がかかります)。

  4. これらのシミュレーション結果を理論上の結果と比較するには、BERTool の [Theoretical] タブに移動し、下記に示すようにパラメーターを設定します。

  5. [Plot] をクリックします。

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

BER データの管理

データ セットまたは BERTool セッションのエクスポート-  BERTool では、MATLAB ワークスペースや MAT ファイルに個々のデータ セットをエクスポートできます。エクスポートのオプションには、BERTool 外でデータを処理するために便利なオプションがあります。たとえば、BERTool からのデータを使用して高度にカスタマイズされたプロットを作成するには、BERTool データ セットを MATLAB ワークスペースにエクスポートし、MATLAB でプロット コマンドのいずれかを使用します。エクスポートのもう 1 つのオプションを使用すると、後で BERTool にデータを再びインポートできます。

BERTool では、セッション全体を保存することもできます。これは、後のセッションで返す必要のある複数のデータ セットが現在のセッションに含まれている場合に便利です。

この節では、以下の機能について説明します。

データ セットのエクスポート

個々のデータ セットをエクスポートするには、次の手順に従います。

  1. データ ビューアーで、エクスポートするデータ セットを選択します。

  2. [File]、[Export Data] を選択します。

  3. [Export to] を設定して、データの形式とエクスポート先を指定します。

    1. 後で BERTool にデータを再度インポートする場合は、[Workspace structure] または [MAT-file structure] を選択して、MATLAB ワークスペースまたは MAT ファイルに構造体を作成しなければなりません。

      [Structure name] という新しいフィールドが表示されます。BERTool で作成する構造体に付ける名前を設定します。

      [Workspace structure] を選択し、選択した変数名を BERTool で使用する場合、その名前の変数が既にワークスペースに存在する場合でも [Overwrite variables] を選択します。

    2. 後で BERTool にデータを再びインポートする必要がない場合、BERTool 外のデータにアクセスする簡単な方法は、BERTool で MATLAB ワークスペースに配列のペアを作成することです。1 つの配列は Eb/N0 値を含み、もう 1 つの配列は BER 値を含みます。このオプションを選択するには、[Export to][Workspace arrays] に設定します。

      次に、[Variable names] の下のフィールドに 2 つの変数名を入力します。

      その名前の変数がワークスペースに既に存在する場合でも、選択した変数名を BERTool で使用する場合は、[Overwrite variables] を選択します。

  4. [OK] をクリックします。[MAT-file structure] を選択した場合、作成する MAT ファイルのパスを指定するよう求めるメッセージが表示されます。

後で構造体を再びインポートするには、データ セットのインポートを参照してください。

エクスポートされた構造体の確認

この節では、BERTool がワークスペースまたは MAT ファイルにエクスポートする構造体のコンテンツについて簡単に説明します。この構造体のフィールドを次の表に示します。エクスポートされたデータを操作する場合に最も重要なフィールドは、paramsEvaleddata です。

フィールド名説明
paramsBERTool GUI のパラメーター値。一部は非表示で、計算に関係ありません。
paramsEvaledデータ セットを計算する場合に BERTool で使用するパラメーター値。
dataEb/N0、BER、および処理されたビット数。
dataViewデータ ビューアーの外観に関する情報。データを再びインポートするために BERTool で使用されます。
cellEditabilitiesデータ ビューアーが [Confidence Level] または [Fit] の有効なエントリをもつかどうかを示します。データを再びインポートするために BERTool で使用されます。

パラメーター フィールド

params が GUI の正確な状態を示し、paramsEvaled が計算で実際に使用される値を示すことを除き、params フィールドと paramsEvaled フィールドは互いに似ています。たとえば、AWGN チャネルをもつ理論的なシステムの場合、params ではダイバーシティ次数パラメーターを記録しますが、paramsEvaled では省略します。ダイバーシティ次数はレイリー チャネルをもつシステムの場合にのみ関係するので、計算では使用されません。もう 1 つの例として、Eb/N0 値の範囲として GUI で [0:3]+1 と入力すると、params[0:3]+1 を示しますが、paramsEvaled1 2 3 4 を示します。

関連する情報だけが表示されるので、paramsEvaled の長さと正確な内容はデータ セットに応じて異なります。paramsEvaled の内容の意味を調べても明らかにならない場合、データセットを BERTool に再びインポートして、GUI に表示されるパラメーター値を調べます。構造体を再びインポートするには、データ セットまたは BERTool セッションのインポートの説明に従います。

データ フィールド

エクスポートされたワークスペース変数の名前が ber0 である場合、フィールド ber0.data は、以下のベクトルに数値結果を含むセル配列です。

  • ber0.data{1} は、Eb/N0 値をリストします。

  • ber0.data{2} は、各 Eb/N0 値に対応する BER 値をリストします。

  • ber0.data{3} は、シミュレーションまたは半解析的な結果に対して、対応する BER のそれぞれの値を計算するときに BERTool で処理されたビットの数を示します。

BERTool セッションの保存-  

BERTool セッション全体を保存するには、次の手順に従います。

  1. [File]、[Save Session] を選択します。

  2. 指示された場合は、作成するファイルのパスを入力します。

データ セットに関連する GUI パラメーターと共に、現在データ ビューアーにあるすべてのデータ セットを記録するテキスト ファイルが作成されます。

メモ

特定のワークスペース変数 ([Semianalytic] タブの txsigrxsig など) が BERTool セッションで必要な場合、MATLAB で save コマンドを使用して MAT ファイルに別々に保存します。

データ セットまたは BERTool セッションのインポート-  BERTool では、以前に構造体にエクスポートした個々のデータ セットを再びインポートすることや、以前に保存したセッション全体を再び読み込むことができます。この節では、以下の機能について説明します。

BERTool のデータ セットのエクスポートまたはセッションの保存の詳細は、データ セットまたは BERTool セッションのエクスポートを参照してください。

データ セットのインポート-  

以前に BERTool から構造体にエクスポートした個々のデータ セットをインポートするには、次の手順に従います。

  1. [File]、[Import Data] を選択します。

  2. [Import from][Workspace structure] または [MAT-file structure] に設定します。[Workspace structure] を選択する場合、[Structure name] フィールドにワークスペース変数の名前を入力します。

  3. [OK] をクリックします。[MAT-file] を選択する場合、インポートする構造体を含むファイルを選択するよう求められます。

[Data Import] ダイアログ ボックス (MAT ファイルの場合はファイルを選択するダイアログ ボックス) を終了した後、新しくインポートされたデータ セットは、データ ビューアーに表示されて BER Figure ウィンドウにプロットされます。

以前の BERTool セッションを開く

データ ビューアーのデータ セットを以前の BERTool セッションのデータ セットと置き換えるには、次の手順に従います。

  1. [File]、[Open Session] を選択します。

    メモ

    BERTool に既にデータ セットが含まれている場合、現在のセッションを保存するかどうかを尋ねるメッセージが表示されます。保存せずに読み込み処理を続行する場合、ファイルから新しいセッションを開くと現在のセッションは破棄されます。

  2. 指示された場合は、開くファイルのパスを入力します。BERTool の [Save Session] オプションを使用して以前に作成したファイルを指定します。

BERTool にセッション ファイルが読み込まれると、ファイルのデータ セットがデータ ビューアーに表示されます。

MAT ファイルに別々に保存した特定のワークスペース変数 ([Semianalytic] タブの txsigrxsig など) が BERTool セッションで必要な場合、MATLAB で load コマンドを使用して取得できます。

データ ビューアーでのデータの管理-  データ ビューアーを使用して、データ セットの名前の変更、データ セットの削除、およびデータ ビューアー内での列の並べ替えを行うことができます。

  • データ ビューアーでデータ セットの名前を変更するには、[BER Data Set] 列に表示される名前をダブルクリックして、新しい名前を入力します。

  • データ ビューアーからデータ セットを削除するには、そのデータ セットを選択して、[Edit]、[Delete] を選択します。

    メモ

    [Semianalytic] または [Theoretical] タブに含まれていたデータ セットは、確認なしにデータが削除されます。この操作を元に戻すことはできません。

  • データ ビューアーで列を移動するには、列の見出しをマウスで左または右にドラッグします。たとえば、次の図は [BER] 列を既定の位置の左側にマウスでドラッグしているところを示します。列はマウスボタンを離した位置に配置されます。