Main Content

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

comm.PNSequence

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

説明

PNSequence オブジェクトは、線形フィードバック シフト レジスタ (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 つ以上の名前と値のペアを使用してプロパティを設定します。各プロパティ名を引用符で囲みます。

プロパティ

すべて展開する

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

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

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

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

  • 数値 1 を含む多項式文字ベクトル。

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

  • 多項式の非ゼロの項の z の指数を降べきの順に含むベクトル。最後のエントリは 0 でなければなりません。

詳細については、多項式の文字表現を参照してください。

例: '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' — PN シーケンス発生器の初期条件を、InitialConditions プロパティを使用してバイナリ スカラーまたはバイナリ ベクトルとして指定します。

  • 'Input port' – PN シーケンス発生器の初期条件を、オブジェクトの呼び出し時に追加の入力引数を使用して指定します。このオブジェクトはバイナリ スカラーまたはバイナリ ベクトルの入力を受け入れます。入力の長さは、Polynomial プロパティで指定される生成多項式の次数に等しくなければなりません。

データ型: char

シミュレーション開始時のシフト レジスタの初期条件。バイナリ スカラーまたはバイナリ ベクトルとして指定します。

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

非ゼロのシーケンスを生成するためには、スカラーまたは指定されたベクトルの要素の少なくとも 1 つは非ゼロでなければなりません。

依存関係

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

データ型: double

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

  • 'Property'Mask プロパティを使用してマスクを整数スカラーまたはバイナリ ベクトルとして指定します。

  • 'Input port' – 追加の入力引数を使用して、オブジェクトの呼び出し時にマスクを指定します。マスクはバイナリ ベクトルとしてのみ指定できます。このとき、その長さは Polynomial プロパティで指定する生成多項式の次数に等しくなければなりません。

データ型: char

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

このプロパティを整数スカラーに設定すると、値はシフトの長さになります。スカラー シフトは正または負です。PN シーケンスの周期が N = 2n – 1 で、n が Polynomial プロパティで指定する生成多項式の次数である場合、オブジェクトは負または N より大きいシフト値をラップします。

このプロパティをバイナリ ベクトルに設定すると、長さは Polynomial プロパティで指定する生成多項式の次数に等しくなければなりません。詳細については、PN シーケンスの開始点のシフトを参照してください。

マスク ベクトルは関数shift2maskを使用して計算できます。

依存関係

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

このプロパティを true に設定して、オブジェクトの呼び出し時に追加の入力引数を使用して可変サイズの出力を有効にします。有効になった入力により、PN シーケンスの出力サイズが指定されます。入力値は、MaximumOutputSize プロパティの値以下でなければなりません。

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

最大出力サイズ。PN シーケンスの最大出力サイズを示す、正の整数の 2 要素の行ベクトルとして指定します。ベクトルの 2 番目の要素は 1 でなければなりません。

例: [10 1] により 101 列の最大サイズの出力信号が得られます。

依存関係

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

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

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

このプロパティを true に設定して、オブジェクトの呼び出し時に追加の引数を使用して PN シーケンス発生器のリセットを有効にします。この入力は、PN シーケンス発生器の状態を InitialConditions プロパティで指定された初期条件にリセットします。詳細については、信号のリセットを参照してください。

依存関係

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

ビットパックされたワードを出力するためのオプション。false または true で指定します。ビットパックされた出力を有効にするには、このプロパティを true に設定します。ビットパックされたワードの左から 1 番目のビットは最上位ビットと見なされます。

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

各出力データ ワードにパックされたビットの数。[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™ のユーザー ライセンスを所有していなければなりません。

依存関係

OutputDataType の有効な設定は BitPackedOutput の設定によって決まります。

使用法

説明

outSequence = pnSequence() は PN シーケンスのフレームを出力します。SamplesPerFrame プロパティでフレームの長さを指定します。PN シーケンスの周期は N = 2n – 1 で、n は Polynomial プロパティで指定する生成多項式の次数です。

オプションの入力引数は有効化プロパティを設定することにより組み合わせることができます。オプションの入力は、有効化プロパティの順序と同じ順序でリストされなければなりません。

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

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

outSequence = pnSequence(maskVec) は、PN シーケンスを開始点からどれだけシフトするかを決めるマスク ベクトルを指定する追加入力を提供します。

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

outSequence = pnSequence(outputSize) は、PN シーケンスの出力サイズを指定する追加入力を提供します。

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

outSequence = pnSequence(reset) は、PN シーケンス発生器をリセットするかどうかを示す追加入力を提供します。

この構文は、InitialConditionsSource'Property'、および ResetInputPorttrue に設定した場合に適用されます。

入力引数

すべて展開する

シミュレーション開始時のシフト レジスタの初期条件。バイナリ スカラーまたはバイナリ ベクトルとして指定します。initCond をバイナリ ベクトルに設定する場合、ベクトルの長さは Polynomial プロパティの次数に等しくなければなりません。非ゼロのシーケンスを生成するためには、スカラーまたは initCond の少なくとも 1 つの要素が非ゼロでなければなりません。

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

データ型: double

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

PN シーケンスの出力サイズ。スカラーまたは 2 要素の行ベクトルとして指定します。outputSize を 2 要素の行ベクトルに設定する場合、2 番目の要素は 1 に等しくなければなりません。

reset をスカラーとして指定すると、オブジェクトは InitialConditions プロパティで指定される初期条件にリセットされ、新しい出力フレームが生成されます。

reset を列ベクトルとして指定する場合、ベクトルの長さは SamplesPerFrame で指定されるフレームごとのサンプル数に等しくなければなりません。列ベクトルの入力を使用すると、1 つの出力フレーム内で複数のリセットが可能です。ベクトルの i 番目の要素に非ゼロの値があると、生成された PN シーケンスの i 番目の要素でリセットが発生します。

出力引数

すべて展開する

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

オブジェクト関数

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

release(obj)

すべて展開する

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

すべて折りたたむ

与えられた生成多項式 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.

拡張機能

参考

オブジェクト

ブロック

R2012a で導入