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

comm.MER

説明

comm.MER (変調誤差比) オブジェクトは、デジタル変調アプリケーションの S/N 比 (SNR) を測定します。MER 測定値は、通信アプリケーションのシステム パフォーマンスを判断する場合に使用することができます。たとえば、DVB-T システムが該当する無線伝送規格に準拠しているかどうかを判断するには、正確な MER 測定値が必要です。ブロックの出力はすべて dB 単位で計測されます。

変調誤差比を測定するには、以下の手順に従います。

  1. MER オブジェクトを定義および設定します。構築を参照してください。

  2. step を呼び出して、comm.MER のプロパティに従い、変調誤差比を測定します。step の動作は、ツールボックスの各オブジェクト固有のものです。

メモ

R2016b 以降では、step メソッドを使用して、System object™ によって定義された演算を実行する代わりに、引数を関数であるかのように使ってオブジェクトを呼び出すことができます。たとえば、y = step(obj,x)y = obj(x) は同等の演算を実行します。

構築

MER = comm.MER は、変調誤差比 (MER) System object MER を作成します。このオブジェクトは、デジタル変調アプリケーションの S/N 比 (SNR) を測定します。

MER = comm.MER(Name,Value) は、指定された各プロパティを指定値に設定して、MER オブジェクトを作成します。(Name1,Value1,...,NameN,ValueN) のように、のように、追加の名前と値のペアの引数を任意の順番で指定できます。

: MER = comm.MER('ReferenceSignalSource','Estimated from reference constellation') は、基準コンスタレーションを使用して受信信号の MER を測定する MER オブジェクトを作成します。

プロパティ

ReferenceSignalSource

基準信号のソース

基準信号のソース。'Input port' (既定) または 'Estimated from reference constellation' のいずれかで指定します。入力信号を比較して測定する明示的な基準信号を与えるには、このプロパティを 'Input port' に設定します。基準コンスタレーションと比較して入力信号の MER を測定するには、このプロパティを 'Estimated from reference constellation' に設定します。

ReferenceConstellation

基準コンスタレーション

基準コンスタレーション。ベクトルで指定します。このプロパティは、ReferenceSignalSource プロパティが 'Estimated from reference constellation' である場合に使用できます。

既定の設定は [0.7071 - 0.7071i; -0.7071 - 0.7071i; -0.7071 + 0.7071i; 0.7071 + 0.7071i] です。これは標準 QPSK コンスタレーションに相当します。コンスタレーション点は変調関数または変調オブジェクトを使用して得られます。たとえば、16-QAM 信号の基準コンスタレーションを得るには、qammod(0:15,16) が使用できます。

MeasurementIntervalSource

測定間隔のソース

測定間隔のソース。'Input length' (既定)、'Entire history''Custom' または 'Custom with periodic reset' のいずれかで指定します。このプロパティは RMS MER 出力および最大 MER 出力のみに影響します。

  • 現在のサンプルのみを使用して MER を計算するには、このプロパティを 'Input length' に設定します。

  • すべてのサンプルの MER を計算するには、このプロパティを 'Entire history' に設定します。

  • 指定した間隔にわたって MER を計算し、スライディング ウィンドウを使用するには、このプロパティを 'Custom' に設定します。

  • 指定した間隔にわたって MER を計算し、測定間隔がいっぱいになるたびにオブジェクトをリセットするには、このプロパティを 'Custom with periodic reset' に設定します。

MeasurementInterval

測定間隔

MER を計算する測定間隔。サンプル単位で、実数の正の整数で指定します。このプロパティは、MeasurementIntervalSource'Custom' または 'Custom with periodic reset' である場合に使用できます。既定の設定は 100 です。

AveragingDimensions

平均化次元

平均化次元。正の整数または正の整数の行ベクトルで指定します。このプロパティは、平均化を実行する次元を決定します。たとえば、行全体の平均を求めるには、このプロパティを 2 に設定します。既定の設定は 1 です。

このオブジェクトは、平均化を実行する次元に対する可変サイズ入力をサポートします。ただし、平均化を行わない次元に対する入力サイズは、step 呼び出し間で一定に保たなければなりません。たとえば、入力のサイズが [4 3 2]Averaging dimensions[1 3] の場合、出力サイズは [1 3 1] となり、2 番目の次元は 3 に固定されなければなりません。

MinimumMEROutputPort

最小 MER 測定値出力端子

最小 MER 測定値出力端子。論理スカラーで指定します。最小 MER 測定値の出力端子を作成するには、このプロパティを true に設定します。既定の設定は false です。

XPercentileMEROutputPort

X 百分位 MER 測定値出力端子

X 百分位 MER 測定値出力端子。論理スカラーで指定します。X 百分位 MER 測定値の出力端子を作成するには、このプロパティを true に設定します。X 百分位 MER 測定値は、オブジェクトをリセットするまで維持されます。これらの測定値は、最後のリセット以降のすべての入力フレームを使用して計算されます。既定の設定は false です。

XPercentileValue

X 百分位値

MER 測定値の X% がその値を上回る X 百分位値。0100 の実数スカラーで指定します。このプロパティは、XPercentileMEROutputPorttrue である場合に適用されます。既定の設定は 95 です。

SymbolCountOutputPort

シンボル数出力端子

シンボル数出力端子。論理スカラーで指定します。X 百分位 MER 測定値の計算に使用された累積シンボル数を出力するには、このプロパティを true に設定します。このプロパティは、XPercentileMEROutputPort プロパティが true である場合に使用できます。既定の設定は false です。

メソッド

resetMER 測定オブジェクトの状態のリセット
step変調誤差比の測定
すべての System object に共通
release

System object のプロパティ値の変更の許可

すべて展開する

最小 MER、90 番目の百分位 MER およびシンボル数を出力する MER オブジェクトを作成します。

mer = comm.MER('MinimumMEROutputPort',true, ...
    'XPercentileMEROutputPort',true,'XPercentileValue',90,...
    'SymbolCountOutputPort',true);

ランダム データを生成します。単位平均パワーをもつ 16-QAM 変調を適用します。AWGN チャネルを通して信号を渡します。

data = randi([0 15],1000,1);
refsym = qammod(data,16,'UnitAveragePower',true);
rxsym = awgn(refsym,20);

RMS MER 値、最小 MER 値および 90 番目の百分位 MER 値を求めます。

[MERdB,MinMER,PercentileMER,NumSym] = mer(refsym,rxsym)
MERdB = 20.1071
MinMER = 11.4248
PercentileMER = 16.5850
NumSym = 1000

ランダム データ シンボルを生成して 8-PSK 変調を適用します。

d = randi([0 7],2000,1);
txSig = pskmod(d,8,pi/8);

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

rxSig = awgn(txSig,30);

MER オブジェクトを作成します。送信された信号を基準として使用し、MER を測定します。

mer = comm.MER;
mer1 = mer(txSig,rxSig);

MER オブジェクトを解放します。MER 値の測定に基準コンスタレーションを使用するようにオブジェクトを設定します。

release(mer)
mer.ReferenceSignalSource = 'Estimated from reference constellation';
mer.ReferenceConstellation = pskmod(0:7,8,pi/8);

受信信号のみを入力として使用して MER を測定します。測定値が、基準信号を使用して得られた結果と一致していることを確認します。

mer2 = mer(rxSig);
[mer1 mer2]
ans = 1×2

   30.0271   30.0271

カスタムの測定間隔 2 種類を使用し、ノイズを含む 8-PSK 信号の MER を測定します。結果を表示します。

フレーム数 M とフレームごとのサブフレーム数 K を設定します。

M = 2;
K = 5;

サブフレームのシンボル数を設定します。対応するフレーム長を計算します。

sfLen = 100;
frmLen = K*sfLen
frmLen = 500

MER オブジェクトを作成します。フレーム長と等しいカスタムの測定間隔を使用するようにオブジェクトを構成します。

mer1 = comm.MER('MeasurementIntervalSource','Custom', ...
    'MeasurementInterval',frmLen);

8-PSK 基準コンスタレーションを使用して MER を測定するようにオブジェクトを構成します。

mer1.ReferenceSignalSource = 'Estimated from reference constellation';
mer1.ReferenceConstellation = pskmod(0:7,8,pi/8);

MER オブジェクトを作成し、周期的なリセットを伴う 500 シンボルの測定間隔を使用するように構成します。8-PSK 基準コンスタレーションを使用して MER を測定するようにオブジェクトを構成します。

mer2 = comm.MER('MeasurementIntervalSource','Custom with periodic reset', ...
    'MeasurementInterval',frmLen);
mer2.ReferenceSignalSource = 'Estimated from reference constellation';
mer2.ReferenceConstellation = pskmod(0:7,8,pi/8);

MER の配列と S/N 比の配列を初期化します。

merNoReset = zeros(K,M);
merReset = zeros(K,M);
snrdB = zeros(K,M);

両方のオブジェクトを使用して、ノイズを含む 8-PSK 信号の MER を測定します。SNR は、サブフレーム間で 1 dB 増加します。merNoReset では、最新の 500 シンボルが推定の計算に使用されます。この場合は、データ フレーム全体が推定のベースとして使われるように、スライディング ウィンドウを使用します。merReset では、フレームが新しくなるたびにシンボルが消去されます。

for m = 1:M
    for k = 1:K
        data = randi([0 7],sfLen,1);
        txSig = pskmod(data,8,pi/8);
        snrdB(k,m) = k+(m-1)*K+7;
        rxSig = awgn(txSig,snrdB(k,m));
        merNoReset(k,m) = mer1(rxSig);
        merReset(k,m) = mer2(rxSig);
    end
end

2 つの方法を使用して推測した MER を表示します。1 番目のケースで使用したウィンドウ処理では、サブフレーム全体を平均しています。2 番目のケースでは、計算される MER 値が現在の SNR をより正確に反映するように、最初のフレームの後に MER オブジェクトがリセットされています。

stairs(snrdB(:),[merNoReset(:) merReset(:)])
xlabel('SNR (dB)')
ylabel('MER (%)')
legend('No Reset','Periodic Reset')

OFDM 変調器オブジェクトと OFDM 復調器オブジェクトを作成します。

ofdmmod = comm.OFDMModulator('FFTLength',32,'NumSymbols',4);
ofdmdemod = comm.OFDMDemodulator('FFTLength',32,'NumSymbols',4);

OFDM 信号の副搬送波とシンボルの数を決定します。

ofdmDims = info(ofdmmod);
numSC = ofdmDims.DataInputSize(1)
numSC = 21
numSym = ofdmDims.DataInputSize(2)
numSym = 4

ランダムなシンボルを生成して QPSK 変調を適用します。

msg = randi([0 3],numSC,numSym);
modSig = pskmod(msg,4,pi/4);

QPSK 信号を OFDM 変調します。AWGN チャネルを通して信号を渡します。ノイズを含む信号を復調します。

txSig = ofdmmod(modSig);
rxSig = awgn(txSig,10,'measured');
demodSig = ofdmdemod(rxSig);

MER オブジェクトを作成します。ここで、結果は副搬送波全体で平均されます。MER を測定します。4 つの OFDM シンボルそれぞれに対応する 4 つのエントリが存在します。

mer = comm.MER('AveragingDimensions',1);
modErrorRatio = mer(demodSig,modSig)
modErrorRatio = 1×4

   11.2338   12.5315   12.8882   12.7015

MER オブジェクトを上書きします。ここで、結果は OFDM シンボル全体で平均されます。MER を測定します。21 個の副搬送波それぞれに対応する 21 個のエントリが存在します。

mer = comm.MER('AveragingDimensions',2);
modErrorRatio = mer(demodSig,modSig)
modErrorRatio = 21×1

   10.8054
   14.9655
   14.5721
   13.6024
   13.0132
   12.1391
   10.4012
    9.5017
    8.8055
   13.3824
      ⋮

MER を測定し、副搬送波と OFDM シンボルの両方で全体で平均します。

mer = comm.MER('AveragingDimensions',[1 2]);
modErrorRatio = mer(demodSig,modSig)
modErrorRatio = 12.2884

アルゴリズム

MER は、変調された信号の SNR を dB 単位で計算した測定値です。N シンボルに対する MER は次のようになります。

MER=10·log10(n=1N(Ik2+Qk2)n=1N(ek))dB,

k 番目のシンボルに対する MER は次のようになります。

MERk=10*log10(1Nn=1N(Ik2+Qk2)ek)dB.

最小 MER は 1 つのバースト中で最も小さい MER を表し、次のようになります。

MERmin=mink[1,...,N]{MERk},

ここで、

  • ek = ek=(IkI˜k)2+(QkQ˜k)2

  • Ik = バーストにおける k 番目のシンボルの同相での計測

  • Qk = バーストにおける k 番目のシンボルの直交位相での計測

  • Ik および Qk は理想 (基準) 値。I˜k および Q˜k は測定された (受信した) シンボル。

ブロックは、流入する全 MERk 値のヒストグラムを作成することにより、X 百分位 MER を計算します。出力で MER 値が得られます。MER 値の X% がこの値を上回ります。

拡張機能

R2012a で導入