Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

comm.Descrambler

入力信号のデスクランブル

説明

comm.Descrambler System object™ は、乗法デスクランブルを入力データに適用します。これは、送信機で使用される comm.Scrambler オブジェクトの逆演算を実行します。

以下の図は、乗法デスクランブラーの演算を示しています。加算器と減算器は剰余 N の演算を行います。ここで N は CalculationBase プロパティです。

タイム ステップごとに、入力により、レジスタの内容が順にシフトします。Polynomial プロパティを使用して、デスクランブラー内の各スイッチのオン/オフ状態を指定します。comm.Descrambler オブジェクトで comm.Scrambler オブジェクトの逆演算を実行するには、両方のオブジェクトで同じプロパティ設定を使用します。スクランブラーとデスクランブラーの間に信号遅延がない場合は、2 つのオブジェクト間の InitialConditions が同じでなければなりません。

メモ

入力データに加法デスクランブルを適用するには、comm.PNSequence System object と関数 xor を使用します。例については、入力データの加法スクランブルを参照してください。

入力信号をデスクランブルするには、以下の手順に従います。

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

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

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

作成

説明

descrambler = comm.Descrambler はデスクランブラー System object を作成します。このオブジェクトは、Polynomial プロパティで指定される線形フィードバック シフト レジスタを使用して入力データをデスクランブルします。

descrambler = comm.Descrambler(base,poly,cond) は、デスクランブラー オブジェクトを作成します。このとき、CalculationBase プロパティは base に、Polynomial プロパティは poly に、InitialConditions プロパティは cond に設定します。

例: comm.Descrambler(8,'1 + x^-2 + x^-3 + x^-5 + x^-7',[0 3 2 2 5 1 7]) は、計算ベースを 8 に設定し、デスクランブラーの多項式および初期状態を指定したとおりに設定します。

descrambler = comm.Descrambler(___,Name,Value) は、1 つ以上の名前と値のペアおよび上記の構文のいずれかを使用してプロパティを設定します。各プロパティ名を一重引用符で囲みます。

例: comm.Descrambler('CalculationBase',2)

プロパティ

すべて展開する

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

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

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

剰余演算のデスクランブラーで使用される入力データの範囲。非負の整数で指定します。このオブジェクトの入力と出力は、0 から CalculationBase1 の整数です。

データ型: double

デスクランブラー内の線形フィードバック シフト レジスタ接続。文字ベクトル、整数ベクトル、またはバイナリ ベクトルとして指定します。Polynomial プロパティは、デスクランブラーの各スイッチがオンまたはオフであるかを定義します。多項式を以下のように指定します。

  • '1 + x^-6 + x^-8' などの文字ベクトル。この方法での多項式指定の詳細については、Communications Toolbox での多項式の表現を参照してください。

  • [0 -6 -8] などの整数ベクトル。x-1 の降べきの順でデスクランブラーの係数をリストします。ここで、p(x-1) = 1 + p1x-1 + p2x-2 + ... のようになります。

  • [1 0 0 0 0 0 1 0 1] などのバイナリ ベクトル。1 の係数で多項式に現れる x のべき乗をリストします。この場合は、デスクランブル多項式の次数は、バイナリ ベクトルの長さよりも 1 つ少なくなります。

例: '1 + x^-6 + x^-8'[0 -6 -8]、および [1 0 0 0 0 0 1 0 1] は、すべて以下の多項式を表します。

p(x-1) = 1 + x-6 + x-8

データ型: double | char

  • 'Property'InitialConditions プロパティを使用してデスクランブラーの初期状態を指定します。

  • 'Input port' – 追加の入力引数 initcond を使用してデスクランブラーの初期状態を、オブジェクトの呼び出し時に指定します。

データ型: char

シミュレーションが開始するときのデスクランブラーのレジスタの初期状態。非負の整数ベクトルで指定します。InitialConditions の長さは、Polynomial プロパティの次数と同じでなければなりません。ベクトル要素の値は、0 から CalculationBase1 の整数でなければなりません。

依存関係

このプロパティは、InitialConditionsSource'Property' に設定されている場合に使用可能です。

デスクランブラーの状態リセット端子。false または true として指定します。ResetInputPorttrue の場合、追加の入力引数 reset を使用して、デスクランブラー オブジェクトを、オブジェクトの呼び出し時にリセットできます。

依存関係

このプロパティは、InitialConditionsSource'Property' に設定されている場合に使用可能です。

使用法

説明

descrambledOut = descrambler(signal) は、入力信号をデスクランブルします。出力のデータ型と長さは入力ベクトルと同じです。

descrambledOut = descrambler(signal,initcond) は、線形フィードバック シフト レジスタの初期条件を指定する値による、追加の入力を提供します。

この構文は、オブジェクトの InitialConditionsSource プロパティを 'Input port' に設定した場合に適用されます。

descrambledOut = descrambler(signal,reset) は、デスクランブラーの状態をリセットするかどうかを示す追加の入力を提供します。

この構文は、オブジェクトの InitialConditionsSource プロパティを 'Property' に設定し、ResetInputPorttrue に設定した場合に適用されます。

入力引数

すべて展開する

入力信号。列ベクトルで指定します。

例: descrambledOut = descrambler([0 1 1 0 1 0])

データ型: double | logical | int8 | int16 | int32 | uint8 | uint16 | uint32

シミュレーションが開始するときの初期のデスクランブラー レジスタの条件。非負の整数列ベクトルで指定します。initcond の長さは、Polynomial プロパティの次数と同じでなければなりません。ベクトル要素の値は、0 から CalculationBase1 の整数でなければなりません。

例: descrambledOut = descrambler(signal,[0 1 1 0]) は、多項式の次数 4 および計算ベース 2 以上のデスクランブラーの潜在的な初期レジスタ状態に対応します。

データ型: double

シミュレーションが開始するときにデスクランブラーの初期状態をリセットします。スカラーとして指定します。reset の値が非ゼロの場合、オブジェクトは呼び出される前にリセットされます。

例: descrambledOut = descrambler(signal,0) は、デスクランブラーの状態をリセットすることなく、入力信号をデスクランブルします。

データ型: double

出力引数

すべて展開する

デスクランブルした出力。signal と同じデータ型と長さの列ベクトルとして返されます。

オブジェクト関数

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

release(obj)

すべて展開する

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

すべて折りたたむ

計算ベースが 8 の comm.Scrambler System object™ と comm.Descrambler System object™ を使用して、8 値データのスクランブルおよびデスクランブルを行います。

入力引数を使用して計算ベース、多項式、および初期条件を指定し、スクランブラーおよびデスクランブラー オブジェクトを作成します。スクランブラーとデスクランブラーの多項式は異なるデータ形式で指定されますが、これらのデータ形式は等価です。

N = 8;
scrambler = comm.Scrambler(N,'1 + x^-2 + x^-3 + x^-5 + x^-7', ...
    [0 3 2 2 5 1 7]);
descrambler = comm.Descrambler(N,[1 0 1 1 0 1 0 1], ...
    [0 3 2 2 5 1 7]);

ランダムな整数のスクランブルとデスクランブルを行います。元のデータ、スクランブルしたデータおよびデスクランブルしたデータのシーケンスを表示します。

data = randi([0 N-1],5,1);
scrData = scrambler(data);
deScrData = descrambler(scrData);
[data scrData deScrData]
ans = 5×3

     6     7     6
     7     5     7
     1     7     1
     7     0     7
     5     3     5

デスクランブルしたデータが元のデータと一致することを確認します。

isequal(data,deScrData)
ans = logical
   1

関数呼び出し間で初期条件を変更しながら、四相データのスクランブルおよびデスクランブルを行います。

計算ベース 4 をもつスクランブラー System object およびデスクランブラー System object を作成します。オブジェクトに対する引数として初期条件を設定できるように、InitialConditionsSource プロパティを 'Input port' に設定します。

N = 4;
scrambler = comm.Scrambler( ...
    N,'1 + z^-3', ...
    'InitialConditionsSource','Input port');
descrambler = comm.Descrambler( ...
    N,'1 + z^-3', ...
    'InitialConditionsSource','Input port');

関数 symerr によって出力される誤りを格納するために使用する、エラー ベクトルのメモリを事前に割り当てます。

errVec = zeros(10,1);

ループ実行のたびに初期条件 initCond を変更しながら、乱数の整数のスクランブルおよびデスクランブルを行います。関数 symerr を使用して、スクランブルおよびデスクランブル操作によってシンボル誤りが生じたかどうかを判断します。

for k = 1:10
    initCond = randperm(3)';
    data = randi([0 N-1],5,1);
    scrData = scrambler(data,initCond);
    deScrData = descrambler(scrData,initCond);
    errVec(k) = symerr(data,deScrData);
end

errVec を調べて、デスクランブラーからの出力が元のデータに一致することを確認します。

errVec
errVec = 10×1

     0
     0
     0
     0
     0
     0
     0
     0
     0
     0

デジタル通信システムでは、タイミング同期とパワー スペクトルの要件を満たすために、一般に加法スクランブルを使用して入力データをランダム化します。comm.ScramblerSystem object™ は乗法スクランブルを実装しますが、加法スクランブルはサポートしません。加法スクランブルを実行するには、comm.PNSequenceSystem object を使用できます。この例では、comm.PNSequence System object によって生成された出力シーケンスで入力データをスクランブルすることにより、IEEE 802.11™ で規定されている加法スクランブルを実装します。同様のワークフローを実装する Simulink® モデルについては、Additive Scrambling of Input Data in Simulinkの例を参照してください。

次の図は、IEEE 802.11 の Section 17.3.5.5 [1] の図 17-7 で規定されている、生成多項式 x7+x4+1 を使用する加法スクランブラを示しています。

802.11 で規定されているシフト レジスタと、comm.PNSequence System object を使用して実装されたシフト レジスタを比較します。この 2 つのシフト レジスタの図は互いに鏡像になることに注意してください。したがって、comm.PNSequence System object を構成して加法スクランブラを実装する場合、生成多項式、初期状態、およびマスク出力の値を逆にしなければなりません。レジスタの出力を先頭から取り出すには、シフト値に 7 を指定します。

802.11 スクランブラの詳細については、[1] およびwlanScramble (WLAN Toolbox)リファレンス ページを参照してください。

生成多項式、出力のシフト値、シフト レジスタの初期状態、入力データのフレームの変数、および IEEE 802.11 規格の Section 17.3.5.5 で規定されている 127 ビットのスクランブラ シーケンスを格納する変数を定義します。入力引数を使用してレジスタを初期化する PN シーケンス オブジェクトを作成します。

genPoly = 'x^7 + x^3 + 1';   % Generator polynomial
shift = 7;                   % Shift value for output
spf = 127;                   % Samples per frame
initState = [1 1 1 1 1 1 1]; % Initial shift register state
dataIn = randi([0 1],spf,1);
ieee802_11_scram_seq = logical([ ...
    0 0 0 0 1 1 1 0 1 1 1 1 0 0 1 0 1 1 0 0 1 ...
    0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 1 1 0 0 0 ...
    1 0 1 1 1 0 1 0 1 1 0 1 1 0 0 0 0 0 1 1 0 ...
    0 1 1 0 1 0 1 0 0 1 1 1 0 0 1 1 1 1 0 1 1 ...
    0 1 0 0 0 0 1 0 1 0 1 0 1 1 1 1 1 0 1 0 0 ...
    1 0 1 0 0 0 1 1 0 1 1 1 0 0 0 1 1 1 1 1 1 1])';

pnSeq = comm.PNSequence( ...
    Polynomial=genPoly, ...
    InitialConditionsSource="Input Port", ...
    Mask=shift, ...
    SamplesPerFrame=spf, ...
    OutputDataType="logical");
pnsequence = pnSeq(initState);

PN シーケンス オブジェクトの出力と IEEE 802.11 の 127 ビット スクランブラのシーケンスを比較して、生成された PN シーケンスが 802.11 で規定されているシーケンスと一致することを確認します。

isequal(ieee802_11_scram_seq,pnsequence)
ans = logical
   1

入力データと PN シーケンス出力をモジュロ加算し、802.11 で指定された加法的スクランブラに従って入力データをスクランブルします。

scrambledOut = xor(dataIn,pnSeq(initState));

同じスクランブラと初期条件をスクランブル データに適用して、スクランブル データをデスクランブルします。

descrambledData = xor(scrambledOut,pnSeq(initState));

デスクランブルされたデータが入力データと一致することを確認します。

isequal(dataIn,descrambledData)
ans = logical
   1

参照

[1] IEEE Std 802.11™-2020 (Revision of IEEE Std 802.11™-2016). "Part 11: Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications." IEEE Standard for Information technology — Telecommunications and information exchange between systems. Local and metropolitan area networks — Specific requirements.

拡張機能

バージョン履歴

R2012a で導入

参考

オブジェクト

ブロック