ドキュメンテーション

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

ビット誤り率 (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!

ここで Pochhammer シンボル (λ)k(λ)0=1(λ)k=λ(λ+1)(λ+2)(λ+k1) として定義されます。

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

略語 定義
M-PSKM-ary 位相シフト キーイング
DE-M-PSK差分符号化された M-ary 位相シフト キーイング
BPSKバイナリ位相シフト キーイング
DE-BPSK差分符号化されたバイナリ位相シフト キーイング
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)

硬判定-  

一般線形ブロック符号 ([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)

硬判定-  

[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 つは、データ メッセージの伝送をシミュレートし、すべてのメッセージをその伝送の前後で比較することです。Communication 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 System 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 つの手法を使用して取得された誤り率がほとんど同じであることを示しています。理論値と計算値の不一致は、大半はこの例のチャネル モデルの位相オフセットに由来するものです。

% Step 1. Generate message signal of length >= 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

% Step 2. Modulate the message signal using baseband modulation.
hMod = comm.RectangularQAMModulator(M);  % Use 16-QAM.
modsig = step(hMod,msg'); % Modulate data
Nsamp = 16;
modsig = rectpulse(modsig,Nsamp); % Use rectangular pulse shaping.

% Step 3. Apply a transmit filter.
txsig = modsig; % No filter in this example

% Step 4. Run txsig through a noiseless channel.
rxsig = txsig*exp(1i*pi/180); % Static phase offset of 1 degree
% Step 5. Use the semianalytic function.
% Specify the receive filter as a pair of input arguments.
% In this case, num and den describe an ideal integrator.
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 を使用して、軟判定復号器によるたたみ込みコーディングのビット誤り率の上限を計算します。発生器および距離スペクトルには、それぞれ『[1]』と『[12]』のデータを使用します。

coderate = 1/4; % Code rate
% Create a structure dspec with information about distance spectrum.
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) % Plot the results.
xlabel('E_b/N_0 (dB)'); ylabel('Upper Bound on BER');
title('Theoretical Bound on BER for Convolutional Coding');
grid on;

この例では以下のプロットが作成されます。

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

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

% 1. Compute theoretical error rate using BERAWGN.
rng('default')      % Set random number seed for repeatability
%
M = 8; EbNo = 0:13;
[ber, ser] = berawgn(EbNo,'pam',M);
% Plot theoretical results.
figure; semilogy(EbNo,ser,'r');
xlabel('E_b/N_0 (dB)'); ylabel('Symbol Error Rate');
grid on; drawnow;

% 2. Compute empirical error rate by simulating.
% Set up.
n = 10000; % Number of symbols to process
k = log2(M); % Number of bits per symbol
% Convert from EbNo to SNR.
% Note: Because No = 2*noiseVariance^2, we must add 3 dB
% to get SNR. For details, see Proakis' book listed in
% "Selected Bibliography for Performance Evaluation."
snr = EbNo+3+10*log10(k);
% Preallocate variables to save time.
ynoisy = zeros(n,length(snr));
z      = zeros(n,length(snr));
berVec = zeros(3,length(EbNo));

% PAM modulation and demodulation system objects
h  = comm.PAMModulator(M);
h2 = comm.PAMDemodulator(M);

% AWGNChannel System object
hChan = comm.AWGNChannel('NoiseMethod', 'Signal to noise ratio (SNR)');


% ErrorRate calculator System object to compare decoded symbols to the
% original transmitted symbols.
hErrorCalc = comm.ErrorRate;

% Main steps in the simulation
x = randi([0 M-1],n,1); % Create message signal.
y = step(h,x); % Modulate.
hChan.SignalPower = (real(y)' * real(y))/ length(real(y));

% Loop over different SNR values.
for jj = 1:length(snr)
    reset(hErrorCalc)
    hChan.SNR = snr(jj); % Assign Channel SNR
    ynoisy(:,jj) = step(hChan,real(y)); % Add AWGN
    z(:,jj) = step(h2,complex(ynoisy(:,jj))); % Demodulate.

    % Compute symbol error rate from simulation.
    berVec(:,jj) = step(hErrorCalc, x, z(:,jj));
end

% 3. Plot empirical results, in same figure.
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 の使用例は、以下の節にあります。

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

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

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

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

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

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

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

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

例: 誤り率プロットにおける曲線近似

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

シミュレーションのパラメーターの設定-  例における最初のステップとして、シミュレーションで使用するパラメーターを設定します。パラメーターには、処理対象とする Eb/N0 値の範囲と、シミュレーションがその Eb/N0 値に対する誤り率を計算する前に発生しなければならない誤りの最小数があります。

    メモ:    ほとんどのアプリケーションでは、この例で使用されているより大きな誤り数を基に誤り率を計算する必要があります (たとえば、以下のコードの numerrmin100 に変更します)。ただし、この例では、粗いデータセットから滑らかな近似曲線を作成する方法を示すために、少ない誤り数を使用しています。

% Set up initial parameters.
siglen = 100000; % Number of bits in each trial
M = 2; % DBPSK is binary.
% DBPSK modulation and demodulation System objects
hMod  = comm.DBPSKModulator;
hDemod = comm.DBPSKDemodulator;
% AWGNChannel System object
hChan = comm.AWGNChannel('NoiseMethod', 'Signal to noise ratio (SNR)');
% ErrorRate calculator System object to compare decoded symbols to the
% original transmitted symbols.
hErrorCalc = comm.ErrorRate;
EbNomin = 0; EbNomax = 9; % EbNo range, in dB
numerrmin = 5; % Compute BER only after 5 errors occur.
EbNovec = EbNomin:1:EbNomax; % Vector of EbNo values
numEbNos = length(EbNovec); % Number of EbNo values
% Preallocate space for certain data.
ber = zeros(1,numEbNos); % final BER values
berVec = zeros(3,numEbNos); % Updated BER values
intv = cell(1,numEbNos); % Cell array of confidence intervals

ループを利用したシステムのシミュレーション-  次のステップでは、for ループを使用して、Eb/N0 値 (コードでは EbNo と記述) に変化を与えて、それぞれの値について通信システムをシミュレートします。内側の while ループが、少なくとも事前に定義された最小限の誤りが発生するまでは、シミュレーションが指定された EbNo 値を使用し続けることを保証します。システムのノイズが非常に多い場合は while ループの通過は 1 回のみにする必要がありますが、それ以外の場合は、複数回ループするように設定します。

通信システムのシミュレーションでは、以下のツールボックス関数を使用します。

  • randi - ランダムなメッセージ シーケンスを生成

  • dpskmod - DBPSK 変調を実行

  • awgn - ホワイト ガウス ノイズの追加によるチャネルのモデル化

  • dpskdemod - DBPSK 復調を実行

  • biterr - while ループを通過する指定パスに対する誤り数を計算

  • berconfint 指定された値における最終的な誤り率と信頼区間を計算 EbNo

例で示された処理は for ループの処理中に以下のデータを収集し、後に曲線近似およびプロットに使用します。

  • ber - 一連の EbNo 値に対するビット誤り率を格納したベクトル。

  • intv - 一連の EbNo 値に対する信頼区間を格納したセル配列。intv の各エントリは、間隔の端点を指定する 2 要素ベクトルです。

% Loop over the vector of EbNo values.
berVec = zeros(3,numEbNos); % Reset
for jj = 1:numEbNos
    EbNo = EbNovec(jj);
    snr = EbNo; % Because of binary modulation
    reset(hErrorCalc)
    hChan.SNR = snr; % Assign Channel SNR
    % Simulate until numerrmin errors occur.
    while (berVec(2,jj) < numerrmin)
        msg = randi([0,M-1], siglen, 1); % Generate message sequence.
        txsig = step(hMod, msg); % Modulate.
        hChan.SignalPower = (txsig'*txsig)/length(txsig);  % Calculate and
        % assign signal power
        rxsig = step(hChan,txsig); % Add noise.
        decodmsg = step(hDemod, rxsig); % Demodulate.
        if (berVec(2,jj)==0)
            % The first symbol of a differentially encoded transmission
            % is discarded.
            berVec(:,jj) = step(hErrorCalc, msg(2:end),decodmsg(2:end));
        else
            berVec(:,jj) = step(hErrorCalc, msg, decodmsg);
        end
    end
    % Error rate and 98% confidence interval for this EbNo value
    [ber(jj), intv1] = berconfint(berVec(2,jj),berVec(3,jj)-1,.98);
    intv{jj} = intv1; % Store in cell array for later use.
    disp(['EbNo = ' num2str(EbNo) ' dB, ' num2str(berVec(2,jj)) ...
        ' errors, BER = ' num2str(ber(jj))])
end

例のこの部分は、for ループ処理中のコマンド ウィンドウの出力を表示しています。この例では乱数を使用しているため、正確な出力内容は異なることがあります。

EbNo = 0 dB, 189 errors, BER = 0.18919
EbNo = 1 dB, 139 errors, BER = 0.13914
EbNo = 2 dB, 105 errors, BER = 0.10511
EbNo = 3 dB, 66 errors, BER = 0.066066
EbNo = 4 dB, 40 errors, BER = 0.04004
EbNo = 5 dB, 18 errors, BER = 0.018018
EbNo = 6 dB, 6 errors, BER = 0.006006
EbNo = 7 dB, 11 errors, BER = 0.0055028
EbNo = 8 dB, 5 errors, BER = 0.00071439
EbNo = 9 dB, 5 errors, BER = 0.00022728
EbNo = 10 dB, 5 errors, BER = 1.006e-005

実測結果と近似曲線のプロット-  

この例の最後の部分では、シミュレーション ループで収集された BER データを曲線で近似します。さらに、関数 berconfint の出力を使用して誤差範囲もプロットします。

% Use BERFIT to plot the best fitted curve,
% interpolating to get a smooth plot.
fitEbNo = EbNomin:0.25:EbNomax; % Interpolation values
berfit(EbNovec,ber,fitEbNo,[],'exp');

% Also plot confidence intervals.
hold on;
for jj=1:numEbNos
   semilogy([EbNovec(jj) EbNovec(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 の動画によるデモは、「ビット誤り率解析ツールビット誤り率解析ツール」を参照してください。

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

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

BERTool の起動

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

bertool

BERTool 環境

BERTool のコンポーネント-  

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

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

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

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

  • データ ビューアーにリストされている 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 プロットの特定のデータ セットが存在するかどうかに関連します。

    メモ:    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 データの利用可能なセットを示します。

変調変調次数他の選択
PSK2, 4差分符号化または非差分符号化。
 
 
 
8、16、32、64、または 2 のより高い累乗 
OQPSK4差分符号化または非差分符号化。 
DPSK2、4、8、16、32、64、または 2 のより高い累乗 
PAM2、4、8、16、32、64、または 2 のより高い累乗 
QAM4、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 MSK、あらかじめコーディングされた 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. 送信信号と受信信号を設定するために、「例: 半解析的手法の使用」のコード例のステップ 1 から 4 を実行します。コードを、下記に繰り返します。

    % Step 1. Generate message signal of length >= 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
    
    % Step 2. Modulate the message signal using baseband modulation.
    hMod = comm.RectangularQAMModulator(M);  % Use 16-QAM.
    modsig = step(hMod,msg'); % Modulate data
    Nsamp = 16;
    modsig = rectpulse(modsig,Nsamp); % Use rectangular pulse shaping.
    
    % Step 3. Apply a transmit filter.
    txsig = modsig; % No filter in this example
    
    % Step 4. Run txsig through a noiseless channel.
    rxsig = txsig*exp(1i*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 ワークスペースの変数の名前にすることができます。
    変調タイプこれらのパラメーターは、この手順で前に使用された変調方式を記述します。
    変調次数
    差分符号化このチェック ボックスは 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 System Toolbox ソフトウェアに付属しているデモのファイルの 1 つである viterbisim です。

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

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

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

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

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

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

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

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

    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 は結果をレポートしプロットする際にこれらの出力引数を使用します。

シミュレーション操作-  

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

  • 第 1 の入力引数で指定される 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.
    % DBPSK modulation and demodulation System objects
    hMod  = comm.DBPSKModulator;
    hDemod = comm.DBPSKDemodulator;
    % AWGNChannel System object
    hChan = comm.AWGNChannel('NoiseMethod', 'Signal to noise ratio (SNR)');
    % ErrorRate calculator System object to compare decoded symbols to the
    % original transmitted symbols.
    hErrorCalc = comm.ErrorRate;
    snr = EbNo; % Because of binary modulation
    hChan.SNR = snr; %Assign Channel SNR

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

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

    msg = randi([0,M-1], siglen, 1); % Generate message sequence.
    txsig = step(hMod, msg); % Modulate.
    hChan.SignalPower = (txsig'*txsig)/length(txsig);  % Calculate and
                                                    % assign signal power
    rxsig = step(hChan,txsig); % Add noise.
    decodmsg = step(hDemod, rxsig); % Demodulate.
    berVec = step(hErrorCalc, 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 System Toolbox ソフトウェアを使用してください。この節の後半では、Simulink と Communications System Toolbox の両方のアプリケーションのライセンスがあるものと仮定します。

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

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

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

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

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

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

    BERTool では、メモリへのモデルの読み込み (および MATLAB ワークスペースの一部の変数の初期化)、b/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 System 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 System Toolbox ソフトウェアで AWGN Channel ブロックを以下のパラメーターと共に使用します。

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

    • [Eb/No] = EbNo

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

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

    • [Target number of errors] = maxNumErrs

    • [Maximum number of symbols] = maxNumBits

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

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

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

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

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

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

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

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

例: BERTool で使用するモデルの準備-  この例は、『Communications System Toolbox Getting Started』ドキュメンテーションで例として作成された Simulink モデルから開始して、BERTool で使用できるようにモデルを変更する方法を示します。この例は、Simulink シミュレーションの BER のパフォーマンスを理論上の BER の結果と比較する方法も示します。この例では、Communications System 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] をクリックします。

  5. Error Rate Calculation ブロックが計算する BER の結果に BERTool がアクセスできるようにするには、モデルに Signal to Workspace ブロックを挿入し、Error Rate Calculation ブロックの出力に接続します。

      メモ:    Signal to Workspace ブロックは DSP System Toolbox ソフトウェアにあり、Simulink の To Workspace ブロックとは異なります。

  6. 新しく追加された Signal to Workspace ブロックを設定するために、そのダイアログ ボックスを開きます。[Variable name]BER に設定し、[Limit data points to last]1 に設定して、[OK] をクリックします。

  7. (オプション) シミュレーションの実行を高速化するには、Bernoulli Binary Generator ブロックのダイアログ ボックスを開きます (特に Eb/N0 の値が大きい場合)。[Frame-based outputs] を選択して、[Samples per frame]1000 に設定します。

  8. ファイル名 bertool_bpskdoc.mdl を使用して、モデルを MATLAB パスのフォルダーに保存します。

  9. (オプション) このモデルを将来の MATLAB セッションで再び開く場合、Simulink でパラメーターを初期化するには、MATLAB コマンド ウィンドウで次のコマンドを入力してモデルを再び保存します。

    set_param('bertool_bpskdoc','preLoadFcn',...
       'EbNo = 0; maxNumErrs = 100; maxNumBits = 1e8;');
    

bertool_bpskdoc モデルは BERTool との互換性をもつようになりました。これを BERTool と共に使用するには、以下の手順に従って例を続行します。

  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 name] の下のフィールドに 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] 列を既定の位置の左側にマウスでドラッグしているところを示します。列はマウスボタンを離した位置に配置されます。

誤り率テスト コンソール

誤り率テスト コンソールは、通信システムでシミュレーションを実行して誤り率性能を測定できるオブジェクトです。

誤り率テスト コンソールは testconsole.SystemBasicAPI クラスで定義される特定の API で作成した通信システムと互換性があります。このクラス定義内で、通信システムの機能を定義します。

システム誤り率テスト コンソールに追加してシミュレーションを実行し、誤り率データを取得します。

システムの異なる場所でテスト中の誤り率を入手するには、固有のテスト ポイントを定義します。各テスト ポイントには、システムがデータをテスト コンソールに記録するためのプローブのペアが含まれています。テスト コンソールに登録した情報によって、テスト プローブの各ペアがどのようにデータを比較するかが指定されます。たとえばフレーム ベースのシステムの場合、誤り率テスト コンソールで送受信ヘッダー ビット、または送受信データ ビットを比較できます。同様に、CRC 誤り数を比較して、システム内のさまざまなポイントのフレーム誤り率を取得することもできます。また、誤り率テスト コンソールを設定して複数のプローブ ペアのデータを比較し、複数の誤り率結果を得ることもできます。

必要な数のテスト パラメーターでシミュレーションを実行し、結果を解析し、どのパラメーターが独立変数として機能するかを指定することによってパラメトリックなプロットや表面プロットを取得することができます。

誤り率テスト コンソールに関連した 2 つの主なタスクは、「システムの作成」「誤り率テスト コンソールへのシステムの追加」です。

誤り率テスト コンソールに接続されていないシステムを実行した場合、システムはデバッグ モードで実行されます。デバッグ モードは、設計中のシステムのコードを評価、またはデバッグする際に役立ちます。

システムを作成してシミュレーションを実行する例の全体を見るには、「さまざまな Eb/No および変調次数値のビット誤り率のシミュレーション」を参照してください。

次の節では、誤り率テスト コンソールとその機能について説明します。

システムの作成

システム誤り率テスト コンソールに追加してシミュレーションを実行し、誤り率データを取得します。テスト中のシステムを追加する場合、特定の情報をテスト コンソールに登録して、システムのテスト入力、テスト パラメーター、テスト プローブなどを定義します。

誤り率テスト コンソールで使用する通信システムを作成するには、次の手順に従います。

  • システム クラスを記述し、testconsole.SystemBasicAPI クラスを拡張する。

  • 登録メソッドを記述する

    • テスト関連の登録を行う

    • テスト パラメーター、テスト プローブ、テスト入力などの項目を定義する

  • 設定メソッドを記述する

  • リセット メソッドを記述する

  • 実行メソッドを記述する

    メソッドを使用することで、テスト コンソールとの通信が可能になります。

システム ファイルを表示するには、次の場所に移動してください。

matlab\toolbox\comm\comm\+commtest

次に、MATLAB コマンド ラインで以下の構文を入力します。

edit MPSKSYSTEM.m

登録メソッドの記述-  register メソッドを使用すると、テスト入力、テスト パラメーター、テスト プローブを誤り率テスト コンソールに登録できます。これらの項目を誤り率テスト コンソールに登録する際には、registerTestInputregisterTestParameter、および registerTestProbe メソッドを使用します。

  • 作成するすべての通信システムに対して register メソッドを記述します。

  • システムに register メソッドを実装しなくても、システムを誤り率テスト コンソールに追加することは可能です。テスト コンソールでは指定の回数の反復がシステムで実行されますが、シミュレーション パラメーターを制御したり、シミュレーションから結果を取得したりすることはできません。

テスト入力の登録-  

シミュレーションを実行するには、テスト中のシステムで誤り率テスト コンソールの入力をテストする必要があります。これらのテスト入力データを使用することで、テスト中のシステムでシミュレーションを実行できます。

誤り率テスト コンソールを追加するまで、特定の入力タイプを要求することはできません。さらに特定の入力タイプをテスト コンソールに登録しなければなりません。

register メソッド内で registerTestInput(sys,inputName) メソッドを呼び出してテスト入力を登録します。

  • sys はユーザー定義の System object のハンドルを表します。

  • inputName はシステム登録される入力の名前を表します。この名前は、誤り率テスト コンソールで使用可能なテスト入力名に一致しなければなりません。一致しない場合、エラーが発生します。

    • 'NumTransmissions' - getInput メソッドを呼び出すと、フレーム長が返されます。システム自体がデータ ソースを使用して、データ フレームを生成します。

    • 'RandomIntegerSource' - getInput メソッドを呼び出すと、誤り率テスト コンソールの FrameLength プロパティで指定される長さをもつシンボルのベクトルが返されます。システムがこのソース タイプを登録した場合、変調次数に対応する [M] という名前のテスト パラメーターも登録しなければなりません。

テスト パラメーターの登録-  

テスト パラメーターは、誤り率テスト コンソールがシミュレーション結果を取得するシステム パラメーターです。誤り率テスト コンソールを使用してこれらのパラメーターのスイープ範囲を指定し、異なるシステム条件のシミュレーション結果を取得します。

テスト中のシステムは、システム パラメーターを誤り率テスト コンソールに登録し、テスト パラメーターを作成します。テスト パラメーターを誤り率テスト コンソールに登録する際には、registerTestParameter(sys,name,default,validRange) メソッドを使用します。

  • sys はユーザー定義の System object のハンドルを表します。

  • name はシステムが誤り率テスト コンソールに登録するパラメーター名を表します。

  • default はテスト パラメーターの既定値を指定します。数値または文字列を使用できます。

  • validRange はテスト パラメーターの入力値の範囲を指定します。上限および下限をもつ数値の 1 行 2 列のベクトルか、文字のセル配列 (Enum) を使用できます。

文字タイプのパラメーターは、システム条件を定義する場合に役立ちます。たとえば通信システムで Channel パラメーターを定義して、‘Rayleigh’、‘Rician’、‘AWGN’などの値を取るようにすることができます。Channel の文字値によっては、さまざまなチャネルから伝送データがフィルターされることもあります。これにより、さまざまなチャネルのシナリオでシステムのシミュレーションを実行できるようになります。

‘X’と言うテスト パラメーターを登録した場合、システムには‘X’ と言う名前の可読プロパティも含めなければなりません。含めないと、登録プロセスでエラーが発生します。このプロセスは、デバッグ モードで getTestParameter メソッドを呼び出すと、対応するプロパティで保持されている値が確実に返されるようにします。

テスト プローブの登録-  

テスト プローブは、誤り率テスト コンソールでテスト メトリックの計算に使用されるシミュレーション データ、誤り数、送信数および誤り率を記録します。データをプローブに記録するには、通信システムでプローブを誤り率テスト コンソールに登録しなければなりません。

テスト プローブを誤り率テスト コンソールに登録する際には、registerTestProbe(sys,name,description) メソッドを使用します。

  • sys はユーザー定義の System object のハンドルを表します。

  • name はテスト プローブの名前を表します。

  • description にはテスト プローブに関する情報が含まれます。プローブの用途を知る際に便利です。説明の入力はオプションです。

任意の数のプローブ数を定義して、システム内の複数ポイントのテスト データを記録することができます。

設定メソッドを記述する-  誤り率テスト コンソールは、新しいスイープ ポイントのシミュレーションの始めに setup メソッドを呼び出します。スイープ ポイントはシステムをシミュレートする際の複数セットのシミュレーション パラメーターです。テスト中のシステムで getTestParameter メソッドを使用すると、setup メソッドは現在のシミュレーションのスイープ値を誤り率テスト コンソールに要求し、これに従ってさまざまなシステム コンポーネントを設定します。setup メソッドは、現在のテスト パラメーターのスイープ値で生成された条件にシステムを設定します。

作成する通信システムごとに setup メソッドを記述する必要はありません。setup メソッドはオプションです。

リセット メソッドを記述する-  reset メソッドを使用して、次のさまざまなシステム コンポーネントの状態をリセットします。オブジェクト、データ バッファーまたはシステム フラグ。誤り率テスト コンソールはシステムの reset メソッドを呼び出します。

  • 新しいスイープ ポイントのシミュレーションの前で呼び出します (この状態は、誤り率テスト コンソールの ResetMode を 'Reset at new simulation point' に設定した場合に発生します)。

  • 各シミュレーションの反復時に呼び出します (この状態は、誤り率テスト コンソールの(この状態は、誤り率テスト コンソールの ResetMode を 'Reset at every iteration' に設定した場合に発生します)。

作成する通信システムごとに reset メソッドを記述することは必須ではありません。reset メソッドはオプションです。

実行メソッドを記述する-  作成するすべての通信システムに対して run メソッドを記述します。run メソッドには、テスト中のシステムの基本的な機能が含まれています。各シミュレーションの反復ごとに、誤り率テスト コンソールはテスト中のシステムの run メソッドを呼び出します。

通信システムを設計する場合、実行時にコンポーネンが現在のシミュレーション テスト パラメーターのスイープ値に設定されるようにします。固有の設計によっては、実行時に通信システムで次の処理が実行されることがあります。

  • getInput メソッドを使用して、テスト コンソールからテスト入力を要求する

  • setTestProbeData メソッドを使用して、テスト データをテスト プローブに記録する

  • setUserData メソッドを使用して、ユーザー データをテスト コンソールに記録する

  • この処理は設定時に行うことをお勧めしますが、システムで getTestParameter メソッドを使用して現在のシミュレーションのスイープ値を要求することもできます。

シミュレーション実行時に誤り率テスト コンソールと通信するメソッド

誤り率テスト コンソールからのテスト入力の取得-  シミュレーション時に設計する通信システムから誤り率テスト コンソールに入力データを要求できます。テスト対象のシステムで特定のタイプの入力データを要求するには誤り率テスト コンソールにその入力タイプを登録しなければなりません。テスト対象のシステムは getInput(obj,inputName) メソッドを呼び出して誤り率テスト コンソールにテスト入力を要求します。

  • obj は誤り率テスト コンソールのハンドル

  • inputName はテスト対象のシステムが誤り率テスト コンソールから取得する入力

誤り率テスト コンソールでは inputName として NumTransmissions または RandomDiscreetSource を選択できます。

テスト対象のシステムでは次の入力を提供します。

  • 'NumTransmissions' - getInput メソッドを呼び出すと、フレーム長が返されます。システム自体がデータ ソースを使用して、データ フレームを生成します。

  • 'RandomIntegerSource' - getInput メソッドを呼び出すと、誤り率テスト コンソールの FrameLength プロパティで指定される長さをもつシンボルのベクトルが返されます。システムがこのソース タイプを登録した場合、変調次数に対応する [M] という名前のテスト パラメーターも登録しなければなりません。

登録されたテスト パラメーターの現在のシミュレーション スイープ値の取得-  シミュレーション反復のたびにテスト対象のシステムは登録されたテスト パラメーターから現在のシミュレーション スイープ値を要求する場合があります。誤り率テスト コンソールからこれらの値を取得するにはテスト対象のシステムで getTestParameter(sys,name) メソッドを呼び出します。

登録されたテスト プローブに対するテスト データ ログの作成-  シミュレーション時にテスト対象のシステムで setTestProbeData(sys,name,data) メソッドを使用すると登録されたテスト プローブに対するログ データを作成できます。

  • sys はシステムのハンドル

  • name は登録されたテスト プローブの名前

  • data はプローブによって誤り率テスト コンソールにログが作成されるデータ

誤り率テスト コンソールへのユーザー定義のデータ ログの作成-  シミュレーション時にテスト対象のシステムで setUserData メソッドを呼び出すと誤り率テスト コンソールにユーザー データ ログを作成できます。このユーザー データはユーザー定義の特定のメトリック計算関数に直接渡されます。次のように誤り率テスト コンソールにユーザー データ ログを作成します。

setUserData(sys,data)

  • sys はシステムのハンドル

  • data はプローブによって誤り率テスト コンソールにログが作成されるデータ

デバッグ モード

誤り率テスト コンソールに接続されていないシステムを実行した場合、システムはデバッグ モードで実行されます。デバッグ モードは、設計中のシステムのコードを評価、またはデバッグする際に役立ちます。

testconsole.SystemBasicAPI クラスを拡張するシステムは誤り率テスト コンソールに接続せずに単独で実行できます。このシナリオはデバッグ モードと呼ばれます。デバッグ モードは、設計中のシステムのコードを評価、またはデバッグする際に役立ちます。たとえば、システムの設計時にブレーク ポイントを定義するとシステムをデバッグ モードで実行してエラーや警告が発生しないかどうかを確認できます。

デバッグ モードの既定の入力生成関数の実装-  システムがテスト入力を登録し、シミュレーション実行時に getInput メソッドを呼び出してデバッグ モードで実行する場合はシステムに既定の入力生成関数を実装しなければなりません。このメソッドは誤り率テスト コンソールと一致する入力を返します。

input = generateDefaultInput(obj)

誤り率テスト コンソールを使用したシミュレーションの実行

誤り率テスト コンソールを使用してシミュレーションを実行するためのタスクは次のとおりです。

  • 誤り率テスト コンソールの作成

  • システムの接続

  • シミュレーション条件の定義

    • 停止基準の指定

    • 反復モードの指定

    • リセット モードの指定

    • スイープ値の指定

  • テスト ポイントの指定

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

  • 結果の取得とプロット

誤り率テスト コンソールの作成-  次のいずれかになるように誤り率テスト コンソールを作成します。

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

  • h = commtest.ErrorRate(sys) は誤り率テスト コンソール h と、接続するテスト対象のシステム sys を返す。

  • h = commtest.ErrorRate(sys,'PropertyName',PropertyValue,...) は誤り率テスト コンソール h と、接続するテスト対象のシステム sys を返す。指定された各プロパティ PropertyName は指定された値 PropertyValue に設定されます。

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

誤り率テスト コンソールへのシステムの接続-  システム誤り率テスト コンソールに追加してシミュレーションを実行し、誤り率データを取得します。システムを誤り率テスト コンソールに接続するには 2 つの方法があります。

  • システムを誤り率テスト コンソールに接続するには MATLAB コマンド ラインで次のように入力します。

    attachSystem(testConsole, mySystem)

  • 誤り率テスト コンソールの作成時にシステムを接続する場合は「誤り率テスト コンソールの作成」を参照してください。

  • mySystem はテスト対象のシステムの名前です。

テスト対象のシステム A が誤り率テスト コンソールH1 に接続されているときに attachSystem(H2,A) を呼び出すと、A が H1 から切り離されて誤り率テスト コンソール H2 に接続されます。これにより、システム A には H1 から切り離されて H2 に接続されたことを示す警告メッセージが表示されます。

シミュレーション条件の定義-  

テスト ポイントの登録-  テスト対象のシステムのさまざまなポイントで誤り率の結果を取得するには固有のテスト ポイントを定義します。各テスト ポイントではテスト対象のシステムがデータを記録するために使用するプローブと誤り率テスト コンソールがデータを取得するために使用するプローブをグループ化します。この 1 組のプローブのテスト ポイントを作成するにはこれらのプローブを誤り率テスト コンソールに登録しなければなりません。

誤り率テスト コンソールでは 1 組のプローブで使用可能なデータを比較して誤り率を計算します。

テスト ポイントには各スイープ ポイント シミュレーションの誤り数と伝送数が保持されます。

info メソッドはどのテスト ポイントが誤り率テスト コンソールに登録されれているかを表示します。

registerTestPoint(h, name, actprobe, expprobe) は name という名前の新しいテスト ポイントを誤り率テスト コンソール h に登録します。

テスト ポイントには誤り率値を取得するためにデータが比較される 1 組のテスト プローブ actprobeexpprobe が登録されていなければなりません。actprobe には実際のデータが含まれ、expprobe には予想データが含まれます。誤り率はプローブで使用可能なデータ ベクトルの 1 対 1 の比較を単純に実行する既定の誤り率計算関数を使用して計算されます。

registerTestPoint(h, name, actprobe, expprobe, fcnhandle) は、プローブ actprobeexprobe のデータ比較に既定の関数に代わって使用される、ユーザー定義の誤り計算関数を指す関数ハンドル fcnhandle を追加し、誤り率の結果を取得します。

ユーザー定義の誤り計算関数の記述-  

ユーザー定義の誤り計算関数は次の構文に従わなければなりません。

[ecnt tcnt] = functionName(act, exp, udata)。ここで、出力 ecnt は誤り数に対応し、出力 tcnt は誤り数の取得で使用される伝送数です。入力 actexp は実際のデータと予想データに対応します。誤り率テスト コンソールはこれらの入力を前述の 1 組のテスト ポイント プローブ actprobeexpprobe で使用可能なデータに設定します。udata はテスト対象のシステムが setUserData メソッドを使用して実行時に誤り率テスト コンソールに渡す場合があるユーザー データ入力です。udata には遅延やデータのバッファーなど、誤りを計算するために必要なデータが含まれている場合があります。誤り率テスト コンソールはテスト対象のシステムによって記録された同じユーザー データを登録されたすべてのテスト ポイントの誤り計算関数に渡します。info メソッドを呼び出して登録されたテスト ポイントの名前、それらに関連付けられた誤り率計算関数、および登録されたテスト プローブの名前を確認します。

テスト情報の取得-  現在の誤り率テスト コンソールの設定のレポートを返します。

info(h) は次の情報を表示します。

  • 誤り率テスト コンソールの名前

  • テスト対象のシステムの名前

  • 使用可能なテスト入力

  • 登録されたテスト入力

  • 登録されたテスト パラメーター

  • 登録されたテスト プローブ

  • 登録されたテスト ポイント

  • メトリック計算関数

  • テスト判定基準

シミュレーションの実行-  シミュレーションを実行するには誤り率テスト コンソールの run メソッドを呼び出します。

run(testConsole) は指定されたパラメーター値セットに対して接続されているテスト対象のシステムを指定された反復回数実行します。Parallel Computing Toolbox™ ライセンスが使用可能で parpool が開いている場合は、使用可能な数のワーカー間に反復を分散できます。

結果の取得とデータのプロット-  テスト結果を取得するには誤り率テスト コンソールの getResults メソッドを呼び出します。

r = getResults(testConsole) は誤り率テスト コンソール testConsole のシミュレーション結果 r を返します。r は testconsole.Results 型のオブジェクトであり、登録されたすべてのテスト ポイントのシミュレーション データが含まれています。

シミュレーション結果データを取得するには結果オブジェクト r の getData メソッドを呼び出します。結果データをプロットするには結果オブジェクト r の plot メソッドと semilogy メソッドを呼び出します。詳細は、「testconsole.Results」を参照してください。

複数パラメーター シミュレーションの結果の解析とプロット-  DPSKModulationTester.mat ファイルには DPSK 変調システムを使用する誤り率テスト コンソールがあります。このシステムでは次の 3 つのテスト パラメーターを定義します。

  • ビットあたりのエネルギー対ノイズ パワー スペクトル密度比 EbNo (dB)

  • 変調次数 M

  • 最大ドップラー シフト MaxDopplerShift (Hz)

これらのパラメーターのスイープ値は次のとおりです。

  • EbNo = [-2:4] dB

  • M = [2 4 8 16]

  • MaxDopplerShift = [0 0.001 0.09] Hz

一般にシミュレーションの実行には長い時間がかかるため、シミュレーションはオフラインで実行されました。DPSKModulationTester.mat ファイルには結果が保存された誤り率テスト コンソールがあります。シミュレーション ポイントごとに少なくとも 2500 の誤りと 5e6 のフレーム伝送を取得するようにシミュレーションが実行されました。

シミュレーション結果を読み込むには MATLAB コマンド ラインで次のように入力します。

load DPSKModulationTester.mat

複数パラメーターのシミュレーションの結果を解析してプロットするには次の手順を実行します。

  1. getSweepParameterValues メソッドを使用して各テスト パラメーターのシミュレーションで使用されたスイープ パラメーター値を表示します。たとえば、次のように入力すると MaxDopplerShift のスイープ値が表示されます。

    getTestParameterSweepValues(testConsole,'MaxDopplerShift') 

    次の結果が返されます。

    ans =
    
             0    0.0010    0.0900
  2. コマンド ラインで次のように入力してシミュレーション結果を解析してプロットする結果オブジェクトを取得します。

    DPSKResults = getResults(testConsole)

    MATLAB は次の結果を返します。

    DPSKResults =
    
            TestConsoleName: 'commtest.ErrorRate'
        SystemUnderTestName: 'commexample.DPSKModulation'
              IterationMode: 'Combinatorial'
                  TestPoint: 'BitErrors'
                     Metric: 'ErrorRate'
             TestParameter1: 'EbNo'
             TestParameter2: 'None'
  3. setParsingValues メソッドを使用して変調次数が 4 で最大ドップラー シフトが 0.001Hz の場合の誤り率の結果対 Eb/No のプロットを有効にします。プロットするには次のように入力します。

    setParsingValues(DPSKResults,'M',4,'MaxDopplerShift',0.001)
  4. getParsingValues メソッドを使用して現在の解析値設定を確認します。

    getParsingValues(DPSKResults)

    MATLAB は、以下を返します。

    ans =
    
                   EbNo: -2
                      M: 4
        MaxDopplerShift: 1.0000e-003

    指定しなかった場合、既定ではテスト パラメーターの解析値が最初のスイープ値に設定されます。この例では EbNo の最初のスイープ値は -2dB になります。ただし、ここでは TestParameter1 が EbNo に設定されているため、Error Rate Test Console は getParsingValues メソッドでリストされた値だけでなくすべての EbNo スイープ値の結果をプロットします。

  5. 変調次数が 4 で最大ドップラー シフトが 0.001Hz の場合のビット誤り率対 Eb/No の対数スケール プロットを取得します。

    semilogy(DPSKResults)

    MATLAB は次の図を生成します。

  6. 結果オブジェクトの TestParameter2 プロパティを MaxDopplerShift に設定します。この設定により最大ドップラー シフトの各スイープ値について複数の誤り率曲線に対する Eb/No をプロットできます。

    DPSKResults.TestParameter2 = 'MaxDopplerShift';

  7. 各最大ドップラー シフト スイープ値で変調次数が 2 の場合のビット誤り率対 Eb/No の対数スケール プロットを取得します。

    setParsingValues(DPSKResults,'M',2)
    semilogy(DPSKResults)
    

    MATLAB は次の図を生成します。

  8. 前のステップと同じタイプの曲線を取得しますが、変調次数を 16 にします。

    setParsingValues(DPSKResults,'M',16)
    semilogy(DPSKResults)
    

    MATLAB は次の図を生成します。

  9. TestParameter1 を M に、TestParameter2 を EbNo に設定し、各 Eb/No スイープ値の変調次数に対する誤り率のプロットを取得します。setParsingValues メソッドを使用すると最大ドップラー シフトが 0Hz の場合の結果をプロットできます。

    DPSKResults.TestParameter1 = 'M';
    DPSKResults.TestParameter2 = 'EbNo';
    setParsingValues(DPSKResults, 'MaxDopplerShift',0)
    semilogy(DPSKResults)
    

    MATLAB は次の図を生成します。

  10. 次のように入力して以前にプロットされたビット誤り率値をもつデータ行列を取得します。

    BERMatrix = getData(DPSKResults)

    MATLAB は次の結果を返します。

    BERMatrix =
    
      Columns 1 through 7
    
        0.2660    0.2467    0.2258    0.2049    0.1837    0.1628    0.1418
        0.3076    0.2889    0.2702    0.2504    0.2296    0.2082    0.1871
        0.3510    0.3384    0.3258    0.3120    0.2983    0.2837    0.2685
        0.3715    0.3631    0.3535    0.3442    0.3350    0.3246    0.3147
    
      Columns 8 through 13
    
        0.1217    0.1022    0.0844    0.0677    0.0534    0.0406
        0.1658    0.1451    0.1254    0.1065    0.0890    0.0728
        0.2531    0.2369    0.2204    0.2042    0.1874    0.1704
        0.3044    0.2945    0.2839    0.2735    0.2626    0.2512

    行列の行は TestParameter1 プロパティ M が定義するテスト パラメーターの値に対応し、列は TestParameter2 プロパティ EbNo が定義するテスト パラメーターの値に対応します。

  11. 次のように入力して結果を 3 次元データとしてプロットします。

    surf(DPSKResults) 

    MATLAB は次のプロットを生成します。

    この場合、x 軸は TestParameter1 プロパティ M が定義するパラメーターで、y 軸は TestParameter2 プロパティ EbNo が定義するパラメーターで制御されます。

さまざまな Eb/No および変調次数値のビット誤り率のシミュレーション

さまざまな En/No 値と変調次数値に対するビット誤り率シミュレーションの実施におけるタスク。

誤り率テスト コンソールの読み込み-  誤り率テスト コンソールは、誤り率結果を取得するためのシミュレーション ツールです。MATLAB ソフトウェアには、誤り率テスト コンソールで使用するデータ ファイルが含まれています。このデータ ファイルは、このチュートリアルの手順を実行するときに使用します。このデータ ファイルには、グレイ符号変調システムが付加された誤り率テスト コンソール オブジェクトが含まれています。この例の誤り率テスト コンソールは、さまざまな EbNo および変調次数 (すなわち M 値) に対してビット誤り率シミュレーションを実行するように設定されています。

  1. 誤り率テスト コンソールと付加されたグレイ符号変調システムが含まれているファイルを読み込みます。MATLAB コマンド ラインで次のように入力します。

    load GrayCodedModTester_EbNo_M
  2. テスト コンソールをそのプロパティを表示して検証します。MATLAB コマンド ラインで次のように入力します。

    testConsole

    MATLAB は、次の出力を返します。

    testConsole =
    
                       Description: 'Error Rate Test Console'
               SystemUnderTestName: 'commexample.GrayCodedMod_EbNo_M'
                     IterationMode: 'Combinatorial'
                   SystemResetMode: 'Reset at new simulation point'
             SimulationLimitOption: 'Number of errors or transmissions'
        TransmissionCountTestPoint: 'DemodBitErrors'
               MaxNumTransmissions: 100000000
               ErrorCountTestPoint: 'DemodBitErrors'
                      MinNumErrors: 100
    

    SystemUnderTest はグレイ符号変調システムです。SimulationLimitOption は「誤りまたは送信の数」なので、シミュレーションは 100 の誤り (1e8 ビット) に達するまで実行されます。

シミュレーションの実行と結果の取得-  この例では、tic および toc を使用してシミュレーションの実行時間を比較します。

  1. tic および toc コマンドを使用してシミュレーションを実行します。MATLAB コマンド ラインで次のように入力します。

    tic; run(testConsole); toc

    MATLAB によって、以下のような出力が返されます。

    Running simulations...
    Elapsed time is 174.671632 seconds.
    
  2. MATLAB コマンド ラインで次のように入力し、getResults メソッドを使用してシミュレーションの結果を取得します。

    grayResults = getResults(testConsole)

    MATLAB は、次の出力を返します。

    grayResults =
    
            TestConsoleName: 'commtest.ErrorRate'
        SystemUnderTestName: 'commexample.GrayCodedMod_EbNo_M'
              IterationMode: 'Combinatorial'
                  TestPoint: 'DemodBitErrors'
                     Metric: 'ErrorRate'
             TestParameter1: 'EbNo'
             TestParameter2: 'None'
    

次の節では、結果オブジェクトを使用して誤り値を取得し、誤り率の曲線をプロットします。

誤り率結果の Figure ウィンドウの生成-  semilogy メソッドは、グレイ符号変調システムの復調器のビット誤りテスト ポイント (DemodBitErrors) の誤り率曲線を含んでいる Figure を生成します。次の図は、誤り率と、復調器の誤り率テスト ポイントの No 曲線に対する Eb を示します。このテスト ポイントは、システムが送信するビット数と受信するビット数を比較することによってビット誤りを収集します。X 軸には、EbNo 値を含んでいる grayResultsTestParameter1 プロパティが表示されます。

  1. MATLAB コマンド ラインで次のように入力して Figure を生成します。

    semilogy(grayResults)

    このスクリプトによって、次の Figure が生成されます。

  2. TestParameter2 プロパティを M に設定します。MATLAB コマンド ラインで次のように入力します。

    grayResults.TestParameter2 = 'M'

    以前に、複数の変調次数 (M) 値のシミュレーションを実行しました。X 軸には、EbNo 値を含んでいる grayResultsTestParameter1 プロパティが表示されます。複数の M 値についてシミュレーションが実行されましたが、この実行には、M = 2 のデータが含まれています。

  3. MATLAB コマンド ラインで次のように入力することによって、複数の誤り率曲線をプロットします。

    semilogy(grayResults)

    このスクリプトによって、次の Figure が生成されます。

Parallel Computing Toolbox ソフトウェアを使った並列シミュレーションの実行-  Parallel Computing Toolbox のユーザー ライセンスがあり、parpool を作成する場合、テスト コンソールはシミュレーションを並列実行します。この方法では処理時間を短縮できます。

    メモ:    Parallel Computing Toolbox のライセンスがない場合、チュートリアルのこのセクションは実行できません。

  1. Parallel Computing Toolbox ライセンスがある場合は、次のコマンドを実行して既定の parpool を開始します。

    mypool = parpool()

    使用しているコンピューターがマルチコアの場合、既定の parpool は、ワーカーとしてそれらのコアを使用します。

  2. ワーカーを使用してシミュレーションを実行します。MATLAB コマンド ラインで次のように入力します。

tic; run(testConsole); toc

MATLAB によって、以下のような出力が返されます。

4 workers available for parallel computing. Simulations ...,
will be distributed among these workers.
Running simulations...
Elapsed time is 87.449652 seconds.

シミュレーションは、前の節のときよりも 3 倍の速さで実行されます。

システム ファイルの作成とテスト コンソールへのシステム ファイルの付加-  前の節では、既存のグレイ符号変調器のシステム ファイルを使用してデータを生成しました。この節では、システム ファイルを作成し、これを誤り率テスト コンソールに付加します。

この例では、レガシ コードを、誤り率テスト コンソールに付加できるシステム ファイルに変換するために必要なタスクの概要について説明します。システム ファイルの起点として commdoc_gray を使用します。チュートリアルのこの節で使用するファイルは、次のフォルダーにあります。

matlab\help\toolbox\comm\examples

  1. システムの基本 API テンプレートである SystemBasicTemplate.m を MyGrayCodedModulation.m という名前でコピーします。

  2. ファイル内のシステム名に対する参照の名前を変更します。最初に、クラス名を MyGrayCodedModulation に変更することによってシステム定義の名前を変更します。ファイルの次の行 (行 1 および 2) を、

    classdef SystemBasicTemplate < testconsole.SystemBasicAPI
    %SystemBasicTemplate Template for creating a system
    

    以下の行で置き換えます。

    classdef MyGrayCodedModulation < testconsole.SystemBasicAPI
    %MyGrayCodedModulation Gray coded modulation system
    
  3. 次の行を、

    function obj = SystemBasicTemplate
    %SystemBasicTemplate Construct a system

    次の行に置き換えることによって、コンストラクターの名前を変更します。

    function obj = MyGrayCodedModulation
    %MyGrayCodedModulation Construct a Gray coded modulation system
    
  4. システムの説明を入力します。obj.Description パラメーターを、次の情報を使用して更新します。

    obj.Description = 'Gray coded modulation';
    

    このシステムでは reset および setup メソッドを使用しないので、これらのメソッドは空白にしてください。

  5. commdoc_gray.m の行 12 ~ 44 を run メソッドの本文にコピーします。

  6. commdoc_gray.m の行 54 ~ 57 を run メソッドの本文にコピーします。

  7. EbNo をテスト パラメーターに変更します。この変更によって、システムは誤り率テスト コンソールから EbNo 値を取得できるようになります。テスト パラメーターである EbNo は変数になります。この変数を使用して、さまざまな値についてシミュレーションを実行できます。ファイルの次の構文行を見つけます。

    EbNo = 10; % In dB
    

    次の行で置き換えます。

    EbNo = getTestParameter(obj,'EbNo');
  8. 変調次数 M を、シミュレーションの新しいテスト パラメーターとして追加します。次の構文を探します。

     M = 16;                     % Size of signal constellation

    次の行で置き換えます。

    M = getTestParameter(obj,'M');
    
  9. テスト パラメーターをテスト コンソールに登録します。

    • register メソッドの本文に次のコード行を配置して、EbNo をテスト パラメーターとして宣言します。

      registerTestParameter(obj,'EbNo',0,[-50 50]);

      このパラメーターの既定値は 0 dB です。-50 dB ~ 50 dB の値を指定できます。

    • register メソッドの本文に次のコード行を配置して M をテスト パラメーターとして宣言します。

      registerTestParameter(obj,'M',16,[2 1024]);
      

      このパラメーターの既定値は 16 QAM 変調です。2 ~ 1024 の値を指定できます。

  10. EbNo および M を、MyGrayCodedModulationFile ファイルのテスト パラメーター リストに追加します。

     % Test Parameters
        properties
            EbNo = 0;
      		 M = 16;
        end

    これによって、EbNo および M がテスト パラメーター リストに追加されます。EbNo の既定値は 0 dB です。M の既定値は 16 です。

  11. run メソッドで、テスト プローブの場所を定義します。この例では、エンドツーエンドの誤り率を計算します。この計算には、送信ビット数と受信ビット数が必要です。送信ビット数の取得のためのプローブ 1 つ、受信ビット数の取得のためのプローブ 1 つを追加します。

    • 次の行を検索して、ランダム バイナリ データ ストリームの作成コードを見つけます。

      % Create a binary data stream as a column vector.
        x = randi([0 1],n,1); % Random binary data stream
      
    • ランダム バイナリ データ ストリーム作成の後にプローブ TxBits を追加します。

       % Create a binary data stream as a column vector.
       x = randi([0 1],n,1); % Random binary data stream
       setTestProbeData(obj,'TxBits',x);
      

      このコードは、ランダム バイナリ データ ストリーム x をプローブ TxBits に送信します。

    • 次の行を検索して復調コードを見つけます。

      % Demodulate signal using 16-QAM.
      z = demodulate(hDemod,yRx);
      
    • 復調コードの後にプローブ RxBits を追加します。

      % Demodulate signal using 16-QAM.
      z = demodulate(hDemod,yRx);
      setTestProbeData(obj,'RxBits',z);
      

    このコードは、バイナリ受信データ ストリーム z をプローブ RxBits に送信します。

  12. テスト プローブを誤り率テスト コンソールに登録し、システムからデータを取得できるようにします。次の 2 行を register メソッドに追加することによって、関数 register(obj) にこれらのプローブを追加します。

    function register(obj)
    % REGISTER Register the system with a test console
    % REGISTER(H) registers test parameters and test probes of the
    % system, H, with a test console.
    
                registerTestParameter(obj,'EbNo',0,[-50 50]);
    					registerTestParameter(obj,'M',16,[2 1024]);
                registerTestProbe(obj,'TxBits')
                registerTestProbe(obj,'RxBits')
            end
    
  13. ファイルを保存します。システムでファイルを使用する準備ができました。

  14. グレイ符号変調システムを作成します。MATLAB コマンド ラインで次のように入力します。

    mySystem = MyGrayCodedModulation

    MATLAB は、次の出力を返します。

    mySystem =
    
        Description: 'Gray coded modulation'
               EbNo: 0
    	            M: 16
    
  15. MATLAB コマンド ラインに次を入力することによって、誤り率テスト コンソールを作成します。

    testConsole = commtest.ErrorRate

    MATLAB ソフトウェアによって、次の出力が返されます。

    testConsole =
    
                       Description: 'Error Rate Test Console'
               SystemUnderTestName: 'commtest.MPSKSystem'
                       FrameLength: 500
                     IterationMode: 'Combinatorial'
                   SystemResetMode: 'Reset at new simulation point'
             SimulationLimitOption: 'Number of transmissions'
        TransmissionCountTestPoint: 'Not set'
               MaxNumTransmissions: 1000
    
  16. MATLAB コマンド ラインで次を入力して、システム ファイル MyGrayCodedModulation を誤り率テスト コンソールに付加します。

    attachSystem(testConsole, mySystem)

誤り率テスト コンソールの設定とシミュレーションの実行-  付加されたシステムから誤り率判定基準を取得するように、誤り率テスト コンソールを設定します。誤り率テスト コンソールは、誤り数、送信数、誤り率として判定基準を定義します。

  1. MATLAB コマンド ラインで次のように入力します。

    registerTestPoint(testConsole, 'DemodBitErrors', 'TxBits', 'RxBits');

    この行は、テスト ポイント DemodBitErrors を定義し、TxBits プローブからのビット数を RxBits プローブからのビット数と比較します。誤り率テスト コンソールによって、このテスト ポイントの判定基準が計算されました。

  2. EbNo 値のシミュレーションを実行するように誤り率テスト コンソールを設定します。2 dB から 10 dB (2dB の刻み幅で) まで、および M 値 2、4、8、16 を設定します。MATLAB コマンド ラインで次のように入力します。

    setTestParameterSweepValues(testConsole, 'EbNo', 2:2:10)
    setTestParameterSweepValues(testConsole, 'M', [2 4 8 16])
    
  3. シミュレーションの制限を送信回数に設定します。

    testConsole.SimulationLimitOption = 'Number of transmissions'
  4. 送信の最大数を 1,000 に設定します。

    testConsole.MaxNumTransmissions = 1000
    
  5. 送信ビット数を判定するために復調器ビット誤り率テスト ポイントを使用するように誤り率テスト コンソールを設定します。

    testConsole.TransmissionCountTestPoint = 'DemodBitErrors'
    
  6. シミュレーションを実行します。MATLAB コマンド ラインで次のように入力します。

    run(testConsole)
  7. シミュレーションの結果を取得します。MATLAB コマンド ラインで次のように入力します。

    grayResults = getResults(testConsole)
  8. より正確な結果を取得するには、所定の最小誤り数についてシミュレーションを実行します。この例でも、シミュレーションが無制限に実行されないようにシミュレーション ビット数を制限します。MATLAB コマンド ラインで次のように入力します。

    testConsole.SimulationLimitOption = 'Number of errors or transmissions';
    testConsole.MinNumErrors = 100;
    testConsole.ErrorCountTestPoint = 'DemodBitErrors';
    testConsole.MaxNumTransmissions = 1e8;
    testConsole
  9. MATLAB コマンド ラインで次を入力してシミュレーションを実行します。

    run(testConsole);
  10. MATLAB コマンド ラインで次を入力して Figure ウィンドウに新しい結果を生成します。

    grayResults = getResults(testConsole);
    grayResults.TestParameter2 = 'M'
    semilogy(grayResults)

    このスクリプトによって、次の Figure が生成されます。

パラメーター化されたシミュレーションを使ったシステム パフォーマンスの最適化-  前の例では、システムで run メソッドのみ使用しました。このオブジェクトは、run メソッドを呼び出すたびに (このシミュレーションでは 3e4 ビットごとに)、M および SNR 値を設定します。この時間間隔には、テスト コンソールからの数値の取得、中間値の計算、他の変数の設定が含まれます。

一方、システムの基本 API には、誤り率テスト コンソールがシミュレーション ポイントごとにシステムを 1 回設定する setup メソッドが用意されています。この変更によって、run メソッドでシミュレーション パラメーターの取得と設定を実行する必要がなくなり、シミュレーション時間が短縮します。

システムの run メソッドは、新しい変調器 (hMod) と新しい復調器 (hDemod) も作成します。変調器と復調器の作成には、これらのオブジェクトのプロパティを変更するだけよりも、はるかに時間がかかります。システムが構築されたら、変調器と復調器のオブジェクトを作成します。さらに、システムのセットアップ メソッドでそのプロパティを変更すると、シミュレーションが加速します。

  1. MyGrayCodedModulation ファイルを MyGrayCodedModulationOptimized という名前で保存します。

  2. MyGrayCodedModulationOptimized ファイルで、コンストラクター名とクラス定義名を置き換えます。

    • 次のコード行を探します。

      classdef MyGrayCodedModulation < testconsole.SystemBasicAPI
      %MyGrayCodedModulation Gray coded modulation system
    • 次の行で置き換えます。

      classdef MyGrayCodedModulationOptimized < testconsole.SystemBasicAPI
      %MyGrayCodedModulationOptimized Gray coded modulation system
  3. MyGrayCodedModulationOptimized ファイルで、コンストラクター名を置き換えます。

    • 次のコード行を探します。

      function obj = MyGrayCodedModulation
      %MyGrayCodedModulation Construct a Gray coded modulation system
    • 次の行で置き換えます。

      function obj = MyGrayCodedModulationOptimized
      %MyGrayCodedModulationOptimized Construct a Gray
      %coded modulation system
      
  4. run メソッドから setup メソッドへ、オーバーサンプルレート定義を移動します。

    nSamp = 1;                  % Oversampling rate
  5. M の設定に関連するコードを setup メソッドに移動します。run メソッドの次の行を切り取り、setup メソッドに貼り付けます。

                M = getTestParameter(obj,'M');
                k = log2(M);                % Number of bits per symbol
    
  6. setup メソッドで、M をオブジェクト プロパティ M で置き換えます。

    obj.M = getTestParameter(obj,'M');
    k = log2(obj.M);                % Number of bits per symbol
    

    以上の変更によって、run メソッドから M 値にアクセスできるようになります。

  7. EbNo の設定に関連するコードを setup メソッドに移動します。run メソッドの次の行を切り取り、setup メソッドに貼り付けます。

    EbNo = getTestParameter(obj,'EbNo');
    
    SNR = EbNo + 10*log10(k) - 10*log10(nSamp);
    
  8. setup メソッドで、EbNo をオブジェクト プロパティ EbNo で置き換えます。以上の変更によって、run メソッドから EbNo 値にアクセスできるようになります。

    obj.EbNo = getTestParameter(obj,'EbNo');
    SNR = obj.EbNo + 10*log10(k) - 10*log10(nSamp);
    
  9. 計算された SNR 値を保存するために、SNR という新しい内部変数を作成します。SNR プロパティをプライベート プロパティとして定義します。これは、テスト パラメーターではありません。以上の変更によって、setup メソッドで SNR が計算され、run メソッドからアクセスできるようになります。システム ファイルの次のコード行を、Test Parameters ブロックの後に追加します。

    %=================================================================
        % Internal variables
        properties (Access = private)
            SNR
        end
    
  10. setup メソッドで、SNR を SNR オブジェクト プロパティで置き換えます。

     obj.SNR = obj.EbNo + 10*log10(k) - 10*log10(nSamp);
  11. run メソッドで、M を obj.M で、SNR を obj.SNR で置き換えます。

    hMod = modem.qammod(obj.M); % Create a 16-QAM modulator
    yNoisy = awgn(yTx,obj.SNR,'measured'); 

    run メソッドは、QAM 変調器および復調器を作成することに注意してください。

  12. QAM 変調器および復調器作成を run メソッドから移動します。run メソッドからコンストラクター (method named MyGrayCodedModulationOptimized) に次の行を移動します。

    %% Create Modulator and Demodulator
    hMod = modem.qammod(obj.M);     % Create a 16-QAM modulator
    hMod.InputType = 'Bit';         % Accept bits as inputs
    hMod.SymbolOrder = 'Gray';      % Accept bits as inputs
    hDemod = modem.qamdemod(hMod);  % Create a 16-QAM based on
                                    % the modulator
    
  13. 変調器および復調器オブジェクトを保存するための Modulator および Demodulator というプライベート プロパティを作成します。

    % Internal variables
    properties (Access = private)
    SNR
    Modulator
    Demodulator
    end
    
  14. コンストラクター メソッドで、hModhDemod を、それぞれ obj.Modulator および obj.Demodulator オブジェクト プロパティで置き換えます。

    obj.Modulator = modem.qammod(obj.M);     % Create a 16-QAM modulator
    obj.Modulator.InputType = 'Bit';         % Accept bits as inputs
    obj.Modulator.SymbolOrder = 'Gray';      % Accept bits as inputs
    obj.Demodulator = modem.qamdemod(obj.Modulator);
    
  15. run メソッドで、hModhDemod を、obj.Modulator および obj.Demodulator オブジェクト プロパティで置き換えます。

    y = modulate(obj.Modulator,x);
    z = demodulate(obj.Demodulator,yRx);
    
  16. ファイルのセットアップ領域を見つけます。

    function setup(obj)
    % SETUP Initialize the system
    % SETUP(H) gets current test parameter value(s) from the test
    % console and initializes system, H, accordingly.
    
  17. 次のコード行をこのセットアップに追加して、変調器と復調器の M 値を設定します。

    obj.Modulator.M = obj.M;
    obj.Demodulator.M = obj.M;
    
  18. ファイルを保存します。

  19. 最適化されたシステムを作成します。MATLAB コマンド ラインで次のように入力します。

    myOptimSystem = MyGrayCodedModulationOptimized
  20. 誤り率テスト コンソールを作成し、このテスト コンソールにシステムを付加します。MATLAB コマンド ラインに以下を入力します。

    testConsole = commtest.ErrorRate(myOptimSystem)
  21. MATLAB コマンド ラインに以下を入力します。

    registerTestPoint(testConsole, 'DemodBitErrors', 'TxBits', 'RxBits');

    この行は、テスト ポイント DemodBitErrors を定義し、TxBits プローブからのビット数を RxBits プローブからのビット数と比較します。誤り率テスト コンソールによって、このテスト ポイントの判定基準が計算されました。

  22. EbNo 値のシミュレーションを実行するように誤り率テスト コンソールを設定します。2 dB から 10 dB (2dB の刻み幅で) まで、および M 値 2、4、8、16 を設定します。MATLAB コマンド ラインで次のように入力します。

    setTestParameterSweepValues(testConsole, 'EbNo', 2:2:10)
    setTestParameterSweepValues(testConsole, 'M', [2 4 8 16])
    
  23. 送信ビット数を判定するために復調器ビット誤り率テスト ポイントを使用するように誤り率テスト コンソールを設定します。

    testConsole.TransmissionCountTestPoint = 'DemodBitErrors'
    
  24. より正確な結果を取得するには、所定の最小誤り数についてシミュレーションを実行します。この例でも、シミュレーションが無制限に実行されないようにシミュレーション ビット数を制限します。MATLAB コマンド ラインに以下を入力します。

    testConsole.SimulationLimitOption = 'Number of errors or transmissions';
    testConsole.MinNumErrors = 100;
    testConsole.ErrorCountTestPoint = 'DemodBitErrors';
    testConsole.MaxNumTransmissions = 1e8;
    testConsole
  25. シミュレーションを実行します。MATLAB コマンド ラインに以下を入力します。

    tic; run(testConsole); toc

    MATLAB が、次の情報を返します。

    Running simulations...
    Elapsed time is 191.748359 seconds.
    

    以上の最適化によって、シミュレーション時間が約 10 % 短縮します。

  26. Figure ウィンドウで新しい結果を生成します。MATLAB コマンド ラインに以下を入力します。

    grayResults = getResults(testConsole);
    grayResults.TestParameter2 = 'M'
    semilogy(grayResults) 

    このスクリプトによって、次の Figure が生成されます。

この情報は役に立ちましたか?