Main Content

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

comm.PNSequence

疑似ノイズ (PN) シーケンスの生成

説明

comm.PNSequenceSystem object™ は、線形フィードバック シフト レジスタ (LFSR) を使って一連の 2 値疑似乱数を生成します。このオブジェクトは、単純なシフト レジスタ発生器 (SSRG または Fibonacci) 設定を使用して LFSR を実装します。疑似ノイズ シーケンスは、通常、疑似乱数スクランブルや直接シーケンス スペクトル拡散システムで使用されます。

PN シーケンスは次により生成します。

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

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

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

作成

説明

pnSequence = comm.PNSequence は、疑似ノイズ (PN) シーケンス発生器 System object を作成します。このオブジェクトは、線形フィードバック シフト レジスタ (LFSR) を使って一連の 2 値疑似乱数を生成します。

pnSequence = comm.PNSequence(Name,Value) は、1 つ以上の名前と値のペアを使用してプロパティを設定します。各プロパティ名を引用符で囲みます。たとえば 'Mask',1 は、開始点からの出力シーケンスの 1 サンプル オフセットを指定します。

プロパティ

すべて展開する

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

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

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

シフト レジスタのフィードバック接続を決定する生成多項式。次のいずれかのオプションとして指定します。

  • 定数項が 1 の多項式の文字ベクトルまたは string スカラー。詳細については、Communications Toolbox での多項式の表現を参照してください。

  • バイナリ値行ベクトル。降べきの順に並べた多項式の係数を表します。このベクトルの長さは N+1 でなければなりません。ここで N は多項式の次数です。最初と最後のエントリは 1 でなければなりません。これは、次数 N の最初の項と、定数項 1 を示します。

  • 整数値の行ベクトル。降べきの順に並べた多項式の非ゼロの項の指数を表す要素からなります。最後のエントリは 0 でなければなりません。これは定数項 1 を示します。

詳細については、単純なシフト レジスタ発生器を参照してください。

例: 'z^8 + z^2 + 1'[1 0 0 0 0 0 1 0 1]、および [8 2 0] は同一の多項式 p(z) = z8 + z2 + 1 を表します。

データ型: double | char

PN シーケンスのシフト レジスタに使用する初期条件のソース。次のいずれかの値として指定します。

  • 'Property'InitialConditions プロパティを使用して PN シーケンス発生器の初期条件を指定します。

  • 'Input port'initcond 入力引数使用して PN シーケンス発生器の初期条件を指定します。

データ型: char

シミュレーションが開始するときに PN シーケンス発生器のシフト レジスタに使用する初期条件。バイナリ値スカラーまたはバイナリ値行ベクトルとして指定します。

  • このプロパティをスカラーに設定した場合、シフト レジスタのすべてのセルの初期値は、指定されたスカラー値です。

  • このプロパティをベクトルに設定した場合、ベクトルの各要素がシフト レジスタで対応するセルの初期値に対応します。ベクトルの長さは、Polynomial プロパティで指定される生成多項式の次数と等しくなければなりません。

詳細については、単純なシフト レジスタ発生器を参照してください。

メモ

オブジェクトが非ゼロのシーケンスを生成するためには、最初または 2 番目に優先される PN シーケンス発生器の初期条件の要素の少なくとも 1 つは非ゼロでなければなりません。具体的には、シフト レジスタの少なくとも 1 つの初期状態が非ゼロでなければなりません。

依存関係

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

データ型: double

PN シーケンスのシフトを決めるマスクのソース。次のいずれかとして指定します。

  • 'Property'Mask プロパティを使用してマスクを指定します。

  • 'Input port'maskvec 入力引数を使用してマスクを指定します。

データ型: char

PN シーケンスを開始点からどれだけシフトするかを決めるマスク。整数スカラーまたはバイナリ ベクトルとして指定します。

  • このプロパティを整数スカラーに設定すると、値はシフトの長さになります。オブジェクトは、負または PN シーケンスの長さより大きいシフト値をラップします。

  • このプロパティをバイナリ ベクトルに設定する場合、長さは Polynomial プロパティで指定する生成多項式の次数に等しくなければなりません。

詳細については、PN シーケンスの開始点のシフトを参照してください。マスク ベクトルは関数shift2maskを使用して計算できます。

依存関係

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

可変サイズの出力を有効にする。数値または logical 0 (false) または 1 (true) として指定します。outputsize 入力引数を使用して可変サイズの出力を有効にするには、このプロパティを true に設定します。有効になった入力により、PN シーケンスの出力サイズが指定されます。入力値は、MaximumOutputSize プロパティの値以下でなければなりません。

このプロパティを false に設定すると、SamplesPerFrame プロパティで出力サンプルの数が指定されます。

最大出力フレーム サイズ。[m 1] 形式のベクトルとして指定します。ここで、m は正の整数です。ベクトルの最初の要素は出力フレームの最大長を示し、ベクトルの 2 番目の要素は 1 でなければなりません。

例: [20 1] は、最大フレーム出力サイズを 201 列として指定します。

依存関係

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

フレームごとのサンプル出力数。正の整数で指定します。このプロパティを M の値に設定した場合、オブジェクトは周期が N = 2n – 1 の PN シーケンスの M サンプルを出力します。n は、Polynomial で指定する生成多項式の次数を表します。

BitPackedOutput プロパティを false に設定した場合、サンプルは PN シーケンスからのビットになります。BitPackedOutput プロパティを true に設定した場合、出力はビットパックされたサンプルの SamplesPerFrame グループに対応します。

発生器リセット入力を有効にする。数値または logical 0 (false) または 1 (true) として指定します。resetseq 入力引数を使用してシーケンス発生器をリセットできるようにするには、このプロパティを true に設定します。この入力は、PN シーケンス発生器の状態を InitialConditions プロパティで指定された初期条件にリセットします。詳細については、信号のリセットを参照してください。

依存関係

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

ビットパックされたワードを出力するためのオプション。false または true で指定します。ビットパックされた出力を有効にするには、このプロパティを true に設定します。

BitPackedOutputtrue の場合、オブジェクトは長さ M の列ベクトルを出力します。これには、長さ P のビット ワードの最上位ビット (MSB) の 1 番目の整数表現が含まれます。M は SamplesPerFrame プロパティで指定されたフレームあたりのサンプル数です。P は NumPackedBits プロパティで指定されたビットパックされたワードのサイズです。

メモ

ビットパックされたワードの左から 1 番目のビットには、整数表現の最上位ビットが含まれます。

各出力データ ワードにパックされたビットの数。[1, 32] の範囲の整数として指定します。

依存関係

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

符号付きのビットパックされた出力ワードを取得するには、このプロパティを true に設定します。この場合、最上位ビット (符号ビット) の 1 は負の値を示します。このプロパティは 2 の補数形式の負の数を示します。

依存関係

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

出力データ型。次のいずれかの値として指定します。

  • BitPackedOutputfalse に設定されている場合、OutputDataType'double''logical'、または 'Smallest unsigned integer' にすることができます。

  • BitPackedOutputtrue に設定されている場合、OutputDataType'double' または 'Smallest integer' にすることができます。

メモ

'Smallest unsigned integer' または 'Smallest integer' モードでこのプロパティを使用するには、Fixed-Point Designer™ のユーザー ライセンスを所有していなければなりません。

依存関係

このプロパティの有効な設定は BitPackedOutput プロパティの設定によって決まります。

使用法

説明

outSequence = pnSequence() は、構成されているオブジェクトに基づいて列ベクトルに PN シーケンスのフレームを出力します。

outSequence = pnSequence(initcond) は、線形フィードバック シフト レジスタの PN シーケンスの初期条件として initcond を使用します。

この構文を有効にするには、InitialConditionsSource プロパティを 'Input port' に設定します。

outSequence = pnSequence(maskvec)maskvec 入力を使用して、PN シーケンスをその開始点からどれだけシフトするかを決めるマスク ベクトルを指定します。

この構文を有効にするには、MaskSource プロパティを 'Input port' に設定します。

outSequence = pnSequence(outputsize) ではoutputsize が出力サイズとして使用されます。

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

outSequence = pnSequence(resetseq) では resetseq がリセット信号として使用されます。

この構文を有効にするには、InitialConditionsSource プロパティを 'Property' に設定し、ResetInputPort プロパティを true に設定します。

outSequence = pnSequence(initcond,maskvec,outputsize)

この構文を有効にするには、InitialConditionsSource プロパティを 'Input port' に、ResetInputPort プロパティを false に、MaskSource プロパティを 'Input port' に、VariableSizeOutput プロパティを true に設定します。

outSequence = pnSequence(maskvec,outputsize,resetseq)

この構文を有効にするには、InitialConditionsSource プロパティを 'Property' に、MaskSource プロパティを 'Input port' に、VariableSizeOutput プロパティを true に、ResetInputPort プロパティを true に設定します。

入力引数

すべて展開する

シミュレーションが開始するときにシフト レジスタに使用する初期条件。バイナリ値スカラーまたはバイナリ値行ベクトルとして指定します。

  • このプロパティをスカラーに設定した場合、シフト レジスタのすべてのセルの初期値は、指定されたスカラー値です。

  • この入力をベクトルに設定した場合、ベクトルの各要素がシフト レジスタで対応するセルの初期値に対応します。ベクトルの長さは、Polynomial プロパティで指定される生成多項式の次数と等しくなければなりません。

メモ

オブジェクトが非ゼロのシーケンスを生成するためには、PN シーケンス発生器の初期条件の要素の少なくとも 1 つは非ゼロでなければなりません。具体的には、シフト レジスタの少なくとも 1 つの初期状態が非ゼロでなければなりません。

例: outSequence = pnSequence([1 1 0]) は、次数 3 の生成多項式によって指定される PN シーケンス発生器の潜在的な初期レジスタ状態に対応します。

データ型: double

PN シーケンスを開始点からどれだけシフトするかを決めるマスク。バイナリ ベクトルとして指定します。ベクトルの長さは、Polynomial プロパティの次数と等しくなければなりません。

出力シーケンスの長さ。非負の整数、n、または [n 1] 形式のベクトルとして指定します。ここで、n は正の整数です。ベクトルの最初の要素は出力フレームの長さを示し、ベクトルの 2 番目の要素は 1 でなければなりません。

スカラーまたは行ベクトルの最初の要素は、MaximumOutputSize プロパティ値の最初の要素以下でなければなりません。

シーケンス発生器のリセット。スカラーまたは、SamplesPerFrame プロパティに指定されたフレームあたりのサンプル数に等しい長さの列ベクトルとして指定します。

  • この入力を非ゼロのスカラーとして指定すると、オブジェクトは、指定される初期条件にリセットされ、その後新しい出力フレームを生成します。

  • この入力を列ベクトルとして指定すると、リセット ベクトルの非ゼロの値と一致する出力フレームのサンプルごとに、オブジェクトは指定される初期条件にリセットされます。

詳細については、信号のリセットを参照してください。

出力引数

すべて展開する

オブジェクトによって生成される PN シーケンス。列ベクトルとして返されます。

オブジェクト関数

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

release(obj)

すべて展開する

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

すべて折りたたむ

PN シーケンス発生器 System object™ を構成するときには、多項式とマスクの表す方法に関するオプションがあります。この図は、生成多項式 p(z)=z6+z+1 およびマスク m(z)=z5+z4+z2+1 で PN シーケンス発生器を定義します。この例は、この図の PN シーケンス発生器を構成するときに生成多項式とマスクを定義するために使用できるいくつかの形式オプションを示します。

多項式の降べきの順の非ゼロの項の "z" の多項式指数を入力し、マスクをバイナリ ベクトルとして入力できます。

pnseq1 = comm.PNSequence('Polynomial',[6 1 0], ...
    'Mask',[1 1 0 1 0 1],'SamplesPerFrame',20)
pnseq1 = 
  comm.PNSequence with properties:

                 Polynomial: [6 1 0]
    InitialConditionsSource: 'Property'
          InitialConditions: [0 0 0 0 0 1]
                 MaskSource: 'Property'
                       Mask: [1 1 0 1 0 1]
         VariableSizeOutput: false
            SamplesPerFrame: 20
             ResetInputPort: false
            BitPackedOutput: false
             OutputDataType: 'double'

多項式指数をバイナリ値行ベクトルとして入力できます。このベクトルは、降べきの順に並べた多項式の係数を表します。

pnseq2 = comm.PNSequence('Polynomial',[1 0 0 0 0 1 1], ...
    'Mask',[1 1 0 1 0 1],'SamplesPerFrame',20)
pnseq2 = 
  comm.PNSequence with properties:

                 Polynomial: [1 0 0 0 0 1 1]
    InitialConditionsSource: 'Property'
          InitialConditions: [0 0 0 0 0 1]
                 MaskSource: 'Property'
                       Mask: [1 1 0 1 0 1]
         VariableSizeOutput: false
            SamplesPerFrame: 20
             ResetInputPort: false
            BitPackedOutput: false
             OutputDataType: 'double'

関数mask2shiftを使用して、マスクをスカラー値として定義することもできます。

mask2shift ([1 0 0 0 0 1 1],[1 1 0 1 0 1])
ans = 22
pnseq3 = comm.PNSequence('Polynomial',[1 0 0 0 0 1 1], ...
    'Mask',22,'SamplesPerFrame',20)
pnseq3 = 
  comm.PNSequence with properties:

                 Polynomial: [1 0 0 0 0 1 1]
    InitialConditionsSource: 'Property'
          InitialConditions: [0 0 0 0 0 1]
                 MaskSource: 'Property'
                       Mask: 22
         VariableSizeOutput: false
            SamplesPerFrame: 20
             ResetInputPort: false
            BitPackedOutput: false
             OutputDataType: 'double'

各 PN シーケンス オブジェクトを使用して 20 サンプルのフレームを生成し、生成されたシーケンスを比較します。

out_1 = pnseq1();
out_2 = pnseq2();
out_3 = pnseq3();
isequal(out_1,out_2)
ans = logical
   1

isequal(out_1,out_3)
ans = logical
   1

与えられた生成多項式 x3+x2+1 に応じて、最大長 PN シーケンスの 14 サンプルのフレームを生成します。

comm.PNSequence オブジェクトを使用して、PN シーケンス データを生成します。最大シーケンス長が 7 サンプル (23-1) のみであるにもかかわらず 14 サンプルが含まれているため、シーケンスは、それ自体によって繰り返されます。

pnSequence = comm.PNSequence('Polynomial',[3 2 0], ...
    'SamplesPerFrame',14,'InitialConditions',[0 0 1]);
x1 = pnSequence();
[x1(1:7) x1(8:14)]
ans = 7×2

     1     1
     0     0
     0     0
     1     1
     1     1
     1     1
     0     0

生成多項式 x4+x+1 に基づき、別の最大長シーケンスを作成します。これは 4 次の多項式であるため、15 サンプル (24-1) 後にシーケンスが繰り返されます。

pnSequence2 = comm.PNSequence('Polynomial','x^4+x+1', ...
    'InitialConditions',[0 0 0 1],'SamplesPerFrame',30);
x2 = pnSequence2();
[x2(1:15) x2(16:30)]
ans = 15×2

     1     1
     0     0
     0     0
     0     0
     1     1
     0     0
     0     0
     1     1
     1     1
     0     0
      ⋮

comm.PNSequence System object は、単純なシフト レジスタ発生器 (SSRG、またはフィボナッチ構成) を使用して線形フィードバック シフト レジスタ (LFSR) を実装します。この構成は、System object から経験的に決定される位相差の分だけモジュラー シフト レジスタ発生器 (MSRG、またはガロア構成) と異なります。

位相差を、comm.PNSequence System object に対する Mask パラメーターとして指定して、等価の MSRG 構成出力を生成できます。ブロック線図はガロア (MSRG) 構成の 5 ビット LFSR の実装を表します。

GaloisLFSR ファイルを読み込みます。ファイルには、プロパティおよび 5 ビットのガロア LFSR の出力 PN シーケンスを定義する次の変数が含まれます。

  • polyVec:生成多項式

  • polySize:生成多項式の次数

  • initStates:シフト レジスタの初期条件

  • maskVar:PN シーケンスをシフトするマスク

  • pn_msrg:5 ビットのガロア LFSR からの最大長の出力 PN シーケンス

load GaloisLFSR

5 ビットのガロア LFSR を実装するのに使用されるものと同じプロパティのセットをもつ comm.PNSequence オブジェクトを使用して、PN シーケンス データを生成します。この PN シーケンスを 5 ビットのガロア LFSR の出力と比較します。2 つのシーケンスは位相シフトの分だけ異なっています。

pnSequence = comm.PNSequence( ...
    'Polynomial',polyVec, ...
    'InitialConditions',initStates,...
    'Mask',maskVar, ...
    'SamplesPerFrame',2^polySize-1);
pn = pnSequence();
isequal(pn,pn_msrg)
ans = logical
   0

2 つの構成の間の位相シフトを計算します。この位相シフトに基づいて Mask プロパティの値を設定します。

for i = 1:length(pn)
    exp_pn = [pn(i:end);pn(1:(i-1))];
    if isequal(exp_pn,pn_msrg)
        break
    end
end
maskVar = i-1;

変更された Mask プロパティの値をもつ comm.PNSequence System object を使用して、PN シーケンス データを生成します。このシーケンスを 5 ビットのガロア LFSR の出力と比較します。2 つのシーケンスは等しくなりました。

pnSequence_mod = comm.PNSequence( ...
    'Polynomial',polyVec, ...
    'InitialConditions',initStates,...
    'Mask',maskVar, ...
    'SamplesPerFrame',2^polySize-1);
pn_mod = pnSequence_mod();
isequal(pn_mod,pn_msrg)
ans = logical
   1

デジタル通信システムでは、タイミング同期とパワー スペクトルの要件を満たすために、一般に加法スクランブルを使用して入力データをランダム化します。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.

詳細

すべて展開する

参照

[1] Proakis, John G. Digital Communications. 5th ed. New York: McGraw Hill, 2007.

[2] Lee, J. S., and L. E. Miller. CDMA Systems Engineering Handbook. Boston and London. Artech House, 1998.

[3] Golomb, S.W. Shift Register Sequences. Laguna Hills. Aegean Park Press, 1967.

拡張機能

バージョン履歴

R2008a で導入

参考

オブジェクト

ブロック