Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

comm.MER

受信信号の変調誤差比の測定

説明

comm.MER System object™ は、受信機が信号を正確に復調する能力を評価するために使用できる S/N 比 (SNR) 測定の形式を計算します。具体的には、受信信号の変調誤差比 (MER)、最小 MER、百分位 MER を返します。MER 測定値は、通信アプリケーションのシステム パフォーマンスを判断する場合に使用します。たとえば、該当する DVB-T システムが無線伝送規格に準拠しているか確認するには、適合性テストで正確な MER 測定が必要です。

受信信号の MER を測定するには、次のようにします。

  1. comm.MER オブジェクトを作成し、そのプロパティを設定します。

  2. 関数と同様に、引数を指定してオブジェクトを呼び出します。

System object の機能の詳細については、System object とは を参照してください。

作成

説明

mer1 = comm.MER は、既定のプロパティ値を使用して MER の System object を作成します。

mer1 = comm.MER(Name=Value) は、名前と値の引数を 1 つ以上使用してプロパティを設定します。たとえば、comm.MER(ReferenceSignalSource="Estimated from reference constellation") は、基準コンスタレーションに対する受信信号の MER を測定するオブジェクトを構成します。

プロパティ

すべて展開する

特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトの呼び出し後に値を変更することはできません。オブジェクトは呼び出すとロックされ、ロックを解除するには関数 release を使用します。

プロパティが "調整可能" の場合、その値をいつでも変更できます。

プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計を参照してください。

基準信号のソース。'Input port' または 'Estimated from reference constellation' として指定します。

  • 入力 refSym を使用して基準信号を指定するには、このプロパティを 'Input port' に設定します。

  • ReferenceConstellation プロパティを使用して基準信号を指定するには、このプロパティを 'Estimated from reference constellation' に設定します。

基準コンスタレーション。ベクトルで指定します。既定値は、単位平均パワーをもつ直交位相偏移変調 (QPSK) コンスタレーションに対応します。コンスタレーション点は変調関数または変調オブジェクトを使用して得られます。

例: QAM のコンスタレーション点が最小距離 2 で分割されるように、スケーリングされた 16-QAM 信号として基準コンスタレーションを定義するには、このプロパティを qammod(0:15,16) に設定します。

依存関係

このプロパティを有効にするには、ReferenceSignalSource プロパティを 'Estimated from reference constellation' に設定します。

データ型: double
複素数のサポート: あり

MER 測定および最小 MER 測定における測定間隔のソース。以下のいずれかの値として指定します。

  • 'Input length' — 現在のサンプルのみを使用して MER を測定します。

  • 'Entire history' — すべてのサンプルの MER を測定します。

  • 'Custom' — 指定した間隔でスライディング ウィンドウを使用して MER を測定します。

  • 'Custom with periodic reset' — 指定した間隔で MER を測定し、各間隔で測定した後にブロックをリセットします。

このプロパティは MER 出力および最小 MER 出力のみに影響します。

測定間隔。正の整数として指定します。

依存関係

このプロパティを有効にするには、MeasurementIntervalSource プロパティを 'Custom' または 'Custom with periodic reset' に設定します。

データ型: double

オブジェクトが MER の測定値を平均化する平均化次元。範囲 [1, 3] の整数のベクトルとして指定します。たとえば、列全体を平均化するには、このプロパティを 2 に設定します。

このオブジェクトは、平均化を行う次元の可変サイズ入力をサポートします。ただし、平均化を行わない次元の入力サイズは、オブジェクトの呼び出し間で一定に保たなければなりません。たとえば、入力のサイズが [1000 3 2] で、このプロパティを [1 3] に設定した場合、出力サイズは [1 3 1] となり、2 番目の次元要素の数は必ず 3 に固定されます。

データ型: double

最小 MER の測定値を返すかどうかのオプション。logical 1 (true) または logical 0 (false) として指定します。

データ型: logical

第 X 百分位の MER 測定値を返すかどうかのオプション。logical 1 (true) または logical 0 (false) として指定します。XPercentileValue プロパティで X の値を指定します。このプロパティを 1 (true) に設定すると、第 X 百分位の MER 測定値が、オブジェクトをリセットするまで維持されます。オブジェクトは、最後のリセット以降の入力フレームをすべて使用してこれらの測定を実行します。

データ型: logical

MER 測定値の下位 X% の値。範囲 [0, 100] のスカラーとして指定します。

依存関係

このプロパティを有効にするには、XPercentileMEROutputPort プロパティを true に設定します。

データ型: double

最後のリセット以降の第 X 百分位の MER を測定するためにオブジェクトが使用する累積シンボル数を返すかどうかのオプション。logical 1 (true) または logical 0 (false) として指定します。

依存関係

このプロパティを有効にするには、XPercentileMEROutputPort プロパティを true に設定します。

データ型: logical

使用法

説明

merdb = mer1(refSym,rxSym) は、MeasurementIntervalSource プロパティおよび MeasurementInterval プロパティで指定した測定間隔で、基準信号 refSym に対する受信信号 rxSym の MER を返します。

[merdb,minMER] = mer1(refSym,rxSym) は、構成された測定間隔での最小パーセンテージ MER も返します。

この構文を使用するには、MinimumMEROutputPort プロパティを true に設定します。

[___,pMER] = mer1(refSym,rxSym) は、測定間隔の構成に関係なく、最後のリセット以降の入力フレームすべてについて、MER 測定値の下位 X% の値も返します。XPercentileValue プロパティで X の値を設定します。たとえば、XPercentileValue95 に設定すると、pMER は最後のリセット以降のすべての MER 測定値の下位 95% の値になります。

この構文を使用するには、XPercentileMEROutputPort プロパティを true に設定します。

[___,pMER,numSym] = mer1(refSym,rxSym) は、MER の測定に使用されるシンボルの数も返します。この構文を使用するには、XPercentileMEROutputPort および SymbolCountOutputPorttrue に設定します。

[___] = mer1(rxSym) は、ReferenceConstellation プロパティで指定した基準信号に対する受信信号の MER を測定します。この構文は、前述のいずれかの出力引数を組み合わせて使用できます。

この構文を使用するには、ReferenceSignalSource プロパティを "Estimated from reference constellation" に設定します。

入力引数

すべて展開する

基準信号。スカラー、ベクトル、行列、または 3 次元配列として指定します。この入力を指定すると、オブジェクトは、この入力を基準コンスタレーションとして使用して、rxSym 入力の MER を測定します。この入力の次元は、rxSym 入力の次元と一致していなければなりません。オブジェクトは、この入力の各要素を rxSym 入力の対応する要素の基準シンボルとして使用します。

データ型: single | double | int8 | int16 | int32 | int64 | fi
複素数のサポート: あり

受信信号。スカラー、ベクトル、行列または 3 次元配列として指定します。

データ型: single | double | int8 | int16 | int32 | int64 | fi
複素数のサポート: あり

出力引数

すべて展開する

構成された測定間隔での受信信号のパーセンテージ MER。デシベル単位のスカラーとして返されます。

データ型: double

構成された測定間隔での最小パーセンテージ MER。デシベル単位のスカラーとして返されます。

データ型: double

最後のリセット以降の MER 測定値の下位 X% の値。デシベル単位のスカラーとして返されます。XPercentileValue プロパティで X の値を設定します。

データ型: double

オブジェクトが pMER 出力の測定に使用したシンボル数。正の整数として返されます。

データ型: double

オブジェクト関数

オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj という名前の System object のシステム リソースを解放するには、次の構文を使用します。

release(obj)

すべて展開する

stepSystem object のアルゴリズムの実行
releaseリソースを解放し、System object のプロパティ値と入力特性の変更を可能にします。
resetSystem object の内部状態のリセット

すべて折りたたむ

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

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

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

rxSym = awgn(refSym,30);

既定のプロパティ値を使用して MER オブジェクトを作成します。

mer = comm.MER;

送信された信号を基準として使用し、MER を測定します。

rmsMER1 = mer(refSym,rxSym);

MER オブジェクトを解放します。

release(mer)

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

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

受信信号のみを入力として使用して MER を測定します。2 つの MER 測定値が一致することを確認します。

rmsMER2 = mer(rxSym);
[rmsMER1 rmsMER2]
ans = 1×2

   30.0271   30.0271

FFT 長、サブキャリアの数、シンボルの数、サイクリック プレフィックス長を指定します。

nfft = 32;  % Number of subcarriers
nSym = 4;   % Number of OFDM symbols
cplen = 16; % Cyclic prefix length

ランダム信号を生成して QPSK 変調を適用します。

msg = randi([0 3],nfft,nSym);
refSym = pskmod(msg,4,pi/4);

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

txSig = ofdmmod(refSym,nfft,cplen);
rxSig = awgn(txSig,10,"measured");
rxSym = ofdmdemod(rxSig,nfft,cplen);

サブキャリア間の平均 MER を測定する MER オブジェクトを構成します。行方向に平均化すると、各 OFDM シンボルに対応する MER 測定値が返されます。

mer = comm.MER(AveragingDimensions=1);
merdB = mer(refSym,rxSym)
merdB = 1×4

    9.1136   11.7584    9.1921    9.8452

OFDM シンボル間の MER を測定する MER オブジェクトを構成します。列方向に平均化すると、各サブキャリアに対応する MER 測定値が返されます。

mer = comm.MER(AveragingDimensions=2);
merdB = mer(refSym,rxSym)
merdB = 32×1

    8.7805
    7.6542
    7.6455
    6.5291
   10.5659
    8.5554
   10.1859
   15.5139
    9.7574
    8.4784
      ⋮

行方向と列方向に平均化すると、すべてのサブキャリアと OFDM シンボルの MER 測定値が返されます。

mer = comm.MER(AveragingDimensions=[1 2]);
merdB = mer(refSym,rxSym)
merdB = 9.8566

MER、最小 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);

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

[MERdB,MinMER,pMER,nSym] = mer(refsym,rxsym)
MERdB = 20.1071
MinMER = 11.4248
pMER = 16.5850
nSym = 1000

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

シミュレーションの変数を定義します。

nframe = 2;              % Number of frames
nsubframe = 5;           % Number of subframes per frame
spsf = 100;              % Number of symbols per subframe
frmLen = nsubframe*spsf; % Frame length

フレーム長と等しいカスタムの測定間隔を使用する MER オブジェクトを構成し、8-PSK 基準コンスタレーションを使用して MER を測定します。

mer1 = comm.MER( ...
    MeasurementIntervalSource="Custom", ...
    MeasurementInterval=frmLen, ...
    ReferenceSignalSource="Estimated from reference constellation", ...
    ReferenceConstellation=pskmod(0:7,8,pi/8));

周期的にリセットを行い、500 シンボルの測定間隔を使用する別の MER オブジェクトを構成し、先ほどと同じ 8-PSK 基準コンスタレーションを使用して MER を測定します。

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

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

merNoReset = zeros(nsubframe,nframe);
merReset = zeros(nsubframe,nframe);
snrdB = zeros(nsubframe,nframe);

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

for m = 1:nframe
    for k = 1:nsubframe
        data = randi([0 7],spsf,1);
        txSig = pskmod(data,8,pi/8);
        snrdB(k,m) = k+(m-1)*nsubframe+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")

Figure contains an axes object. The axes object contains 2 objects of type stair. These objects represent No reset, Periodic reset.

アルゴリズム

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

MER=10×log10(k=1N(Ik2+Qk2)k=1N(ek))dB,

ここで、

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

  • Ik は、バースト内の k 番目のシンボルの同相成分を表します。

  • Qk は、バースト内の k 番目のシンボルの直交位相成分を表します。

  • Ik および Qk は理想的な基準値を表します。

  • I˜k および Q˜k は受信シンボルを表します。

  • N は、バースト内のシンボル数を表します。

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

MERk=10×log10(1Nk=1N(Ik2+Qk2)ek)dB.

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

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

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

参照

[1] ESTI TR 101 290. Digital Video Broadcasting (DVB): Measurement guidelines for DVB systems. June 2020.

拡張機能

バージョン履歴

R2012a で導入

参考

オブジェクト

関数

ブロック