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 スカラー。詳細については、Representation of Polynomials in 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 Sequence Generator 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

詳細

すべて展開する

参照

[1] Proakis, John G. Digital Communications. 3rd ed. New York: McGraw Hill, 1995.

[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 で導入

参考

オブジェクト

ブロック