このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
comm.PNSequence
疑似ノイズ (PN) シーケンスの生成
説明
comm.PNSequence
System object™ は、線形フィードバック シフト レジスタ (LFSR) を使って一連の 2 値疑似乱数を生成します。このオブジェクトは、単純なシフト レジスタ発生器 (SSRG または Fibonacci) 設定を使用して LFSR を実装します。疑似ノイズ シーケンスは、通常、疑似乱数スクランブルや直接シーケンス スペクトル拡散システムで使用されます。
PN シーケンスは次により生成します。
comm.PNSequence
オブジェクトを作成し、そのプロパティを設定します。関数と同様に、引数を指定してオブジェクトを呼び出します。
System object の機能の詳細については、System object とはを参照してください。
作成
説明
は、疑似ノイズ (PN) シーケンス発生器 System object を作成します。このオブジェクトは、線形フィードバック シフト レジスタ (LFSR) を使って一連の 2 値疑似乱数を生成します。pnSequence
= comm.PNSequence
は、1 つ以上の名前と値のペアを使用してプロパティを設定します。各プロパティ名を引用符で囲みます。たとえば pnSequence
= comm.PNSequence(Name,Value)'Mask'
,1
は、開始点からの出力シーケンスの 1 サンプル オフセットを指定します。
プロパティ
特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトの呼び出し後に値を変更することはできません。オブジェクトは呼び出すとロックされ、ロックを解除するには関数 release
を使用します。
プロパティが "調整可能" の場合、その値をいつでも変更できます。
プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計を参照してください。
Polynomial
— 生成多項式
'z^6 + z + 1'
(既定値) | 文字ベクトル | string スカラー | バイナリ行ベクトル | 整数ベクトル
シフト レジスタのフィードバック接続を決定する生成多項式。次のいずれかのオプションとして指定します。
定数項が
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
InitialConditionsSource
— 初期条件のソース
'Property'
(既定値) | 'Input port'
PN シーケンスのシフト レジスタに使用する初期条件のソース。次のいずれかの値として指定します。
'Property'
—InitialConditions
プロパティを使用して PN シーケンス発生器の初期条件を指定します。'Input port'
—initcond
入力引数使用して PN シーケンス発生器の初期条件を指定します。
データ型: char
InitialConditions
— シフト レジスタの初期条件
[0 0 0 0 0 1]
(既定値) | バイナリ スカラー | バイナリ ベクトル
シミュレーションが開始するときに PN シーケンス発生器のシフト レジスタに使用する初期条件。バイナリ値スカラーまたはバイナリ値行ベクトルとして指定します。
このプロパティをスカラーに設定した場合、シフト レジスタのすべてのセルの初期値は、指定されたスカラー値です。
このプロパティをベクトルに設定した場合、ベクトルの各要素がシフト レジスタで対応するセルの初期値に対応します。ベクトルの長さは、
Polynomial
プロパティで指定される生成多項式の次数と等しくなければなりません。
詳細については、単純なシフト レジスタ発生器を参照してください。
メモ
オブジェクトが非ゼロのシーケンスを生成するためには、最初または 2 番目に優先される PN シーケンス発生器の初期条件の要素の少なくとも 1 つは非ゼロでなければなりません。具体的には、シフト レジスタの少なくとも 1 つの初期状態が非ゼロでなければなりません。
依存関係
このプロパティを有効にするには、InitialConditionsSource
を 'Property'
に設定します。
データ型: double
MaskSource
— PN シーケンスをシフトするマスクのソース
'Property'
(既定値) | 'Input port'
PN シーケンスのシフトを決めるマスクのソース。次のいずれかとして指定します。
'Property'
—Mask
プロパティを使用してマスクを指定します。'Input port'
—maskvec
入力引数を使用してマスクを指定します。
データ型: char
Mask
— PN シーケンスをシフトするマスク
0
(既定値) | 整数スカラー | バイナリ ベクトル
PN シーケンスを開始点からどれだけシフトするかを決めるマスク。整数スカラーまたはバイナリ ベクトルとして指定します。
このプロパティを整数スカラーに設定すると、値はシフトの長さになります。オブジェクトは、負または PN シーケンスの長さより大きいシフト値をラップします。
このプロパティをバイナリ ベクトルに設定する場合、長さは
Polynomial
プロパティで指定する生成多項式の次数に等しくなければなりません。
詳細については、PN シーケンスの開始点のシフトを参照してください。マスク ベクトルは関数shift2mask
を使用して計算できます。
依存関係
このプロパティを有効にするには、MaskSource
を 'Property'
に設定します。
VariableSizeOutput
— 可変サイズの出力を有効にする
false
(既定値) | true
可変サイズの出力を有効にする。数値または logical 0
(false
) または 1
(true
) として指定します。outputsize
入力引数を使用して可変サイズの出力を有効にするには、このプロパティを true
に設定します。有効になった入力により、PN シーケンスの出力サイズが指定されます。入力値は、MaximumOutputSize
プロパティの値以下でなければなりません。
このプロパティを false
に設定すると、SamplesPerFrame
プロパティで出力サンプルの数が指定されます。
MaximumOutputSize
— Maximum output size
[10 1]
(既定値) | [m 1] 形式のベクトル
最大出力フレーム サイズ。[m 1] 形式のベクトルとして指定します。ここで、m は正の整数です。ベクトルの最初の要素は出力フレームの最大長を示し、ベクトルの 2 番目の要素は 1
でなければなりません。
例: [20 1]
は、最大フレーム出力サイズを 20
行 1
列として指定します。
依存関係
このプロパティを有効にするには、VariableSizeOutput
を true
に設定します。
SamplesPerFrame
— フレームごとのサンプル出力数
1
(既定値) | 正の整数
フレームごとのサンプル出力数。正の整数で指定します。このプロパティを M の値に設定した場合、オブジェクトは周期が N = 2n – 1 の PN シーケンスの M サンプルを出力します。n は、Polynomial
で指定する生成多項式の次数を表します。
BitPackedOutput
プロパティを false
に設定した場合、サンプルは PN シーケンスからのビットになります。BitPackedOutput
プロパティを true
に設定した場合、出力はビットパックされたサンプルの SamplesPerFrame
グループに対応します。
ResetInputPort
— 発生器リセット入力を有効にする
false
(既定値) | true
発生器リセット入力を有効にする。数値または logical 0
(false
) または 1
(true
) として指定します。resetseq
入力引数を使用してシーケンス発生器をリセットできるようにするには、このプロパティを true
に設定します。この入力は、PN シーケンス発生器の状態を InitialConditions
プロパティで指定された初期条件にリセットします。詳細については、信号のリセットを参照してください。
依存関係
このプロパティを有効にするには、InitialConditionsSource
を 'Property'
に設定します。
BitPackedOutput
— ビットパックされたワードを出力する
false
(既定値) | true
ビットパックされたワードを出力するためのオプション。false
または true
で指定します。ビットパックされた出力を有効にするには、このプロパティを true
に設定します。
BitPackedOutput
が true
の場合、オブジェクトは長さ M の列ベクトルを出力します。これには、長さ P のビット ワードの最上位ビット (MSB) の 1 番目の整数表現が含まれます。M は SamplesPerFrame
プロパティで指定されたフレームあたりのサンプル数です。P は NumPackedBits
プロパティで指定されたビットパックされたワードのサイズです。
メモ
ビットパックされたワードの左から 1 番目のビットには、整数表現の最上位ビットが含まれます。
NumPackedBits
— ビットパックされたワードあたりのビットの数
8
(既定値) | 範囲 [1, 32] の整数
SignedOutput
— 符号付きのビットパックされたワードを出力する
false
(既定値) | true
符号付きのビットパックされた出力ワードを取得するには、このプロパティを true
に設定します。この場合、最上位ビット (符号ビット) の 1
は負の値を示します。このプロパティは 2 の補数形式の負の数を示します。
依存関係
このプロパティを有効にするには、BitPackedOutput
を true
に設定します。
OutputDataType
— 出力のデータ型
'double'
(既定値) | 'logical'
| 'Smallest unsigned integer'
| 'Smallest integer'
出力データ型。次のいずれかの値として指定します。
BitPackedOutput
がfalse
に設定されている場合、OutputDataType
は'double'
、'logical'
、または'Smallest unsigned integer'
にすることができます。BitPackedOutput
がtrue
に設定されている場合、OutputDataType
は'double'
または'Smallest integer'
にすることができます。
メモ
'Smallest unsigned integer'
または 'Smallest integer'
モードでこのプロパティを使用するには、Fixed-Point Designer™ のユーザー ライセンスを所有していなければなりません。
依存関係
このプロパティの有効な設定は BitPackedOutput
プロパティの設定によって決まります。
使用法
構文
説明
は、構成されているオブジェクトに基づいて列ベクトルに PN シーケンスのフレームを出力します。outSequence
= pnSequence()
は、線形フィードバック シフト レジスタの PN シーケンスの初期条件として outSequence
= pnSequence(initcond
)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
に設定します。
入力引数
initcond
— シフト レジスタに使用される初期のレジスタ条件
バイナリ値スカラー | バイナリ値ベクトル
シミュレーションが開始するときにシフト レジスタに使用する初期条件。バイナリ値スカラーまたはバイナリ値行ベクトルとして指定します。
このプロパティをスカラーに設定した場合、シフト レジスタのすべてのセルの初期値は、指定されたスカラー値です。
この入力をベクトルに設定した場合、ベクトルの各要素がシフト レジスタで対応するセルの初期値に対応します。ベクトルの長さは、
Polynomial
プロパティで指定される生成多項式の次数と等しくなければなりません。
メモ
オブジェクトが非ゼロのシーケンスを生成するためには、PN シーケンス発生器の初期条件の要素の少なくとも 1 つは非ゼロでなければなりません。具体的には、シフト レジスタの少なくとも 1 つの初期状態が非ゼロでなければなりません。
例: outSequence = pnSequence([1 1 0])
は、次数 3 の生成多項式によって指定される PN シーケンス発生器の潜在的な初期レジスタ状態に対応します。
このオブジェクトは可変サイズの入力を受け入れます。オブジェクトがロックされると、各入力チャネルのサイズは変更できますが、チャネルの数は変更できません。詳細については、Variable-Size Signal Support with System Objectsを参照してください。
データ型: double
maskvec
— マスク ベクトル
バイナリ ベクトル
PN シーケンスを開始点からどれだけシフトするかを決めるマスク。バイナリ ベクトルとして指定します。ベクトルの長さは、Polynomial
プロパティの次数と等しくなければなりません。
outputsize
— 出力シーケンスの長さ
非負の整数 | [n 1] 形式のベクトル
出力シーケンスの長さ。非負の整数、n、または [n 1] 形式のベクトルとして指定します。ここで、n は正の整数です。ベクトルの最初の要素は出力フレームの長さを示し、ベクトルの 2 番目の要素は 1
でなければなりません。
スカラーまたは行ベクトルの最初の要素は、MaximumOutputSize
プロパティ値の最初の要素以下でなければなりません。
resetseq
— PN シーケンス発生器のリセット
スカラー | 列ベクトル
シーケンス発生器のリセット。スカラーまたは、SamplesPerFrame
プロパティに指定されたフレームあたりのサンプル数に等しい長さの列ベクトルとして指定します。
この入力を非ゼロのスカラーとして指定すると、オブジェクトは、指定される初期条件にリセットされ、その後新しい出力フレームを生成します。
この入力を列ベクトルとして指定すると、リセット ベクトルの非ゼロの値と一致する出力フレームのサンプルごとに、オブジェクトは指定される初期条件にリセットされます。
詳細については、信号のリセットを参照してください。
出力引数
outSequence
— PN シーケンス
列ベクトル
オブジェクトによって生成される PN シーケンス。列ベクトルとして返されます。
オブジェクト関数
オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj
という名前の System object のシステム リソースを解放するには、次の構文を使用します。
release(obj)
例
PN シーケンス発生器の構成
PN シーケンス発生器 System object™ を構成するときには、多項式とマスクの表す方法に関するオプションがあります。この図は、生成多項式 およびマスク で 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
最大長 PN シーケンスの生成
与えられた生成多項式 に応じて、最大長 PN シーケンスの 14 サンプルのフレームを生成します。
comm.PNSequence
オブジェクトを使用して、PN シーケンス データを生成します。最大シーケンス長が 7 サンプル () のみであるにもかかわらず 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
生成多項式 に基づき、別の最大長シーケンスを作成します。これは 4 次の多項式であるため、15 サンプル () 後にシーケンスが繰り返されます。
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.Scrambler
System object™ は乗法スクランブルを実装しますが、加法スクランブルはサポートしません。加法スクランブルを実行するには、comm.PNSequence
System 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 で規定されている、生成多項式 を使用する加法スクランブラを示しています。
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.
詳細
単純なシフト レジスタ発生器
単純なシフト レジスタ発生器 (SSRG) として実装された線形フィードバック シフト レジスタ (LFSR) は、PN シーケンスの生成に使用されます。このタイプのシフト レジスタは、フィボナッチ実装とも呼ばれます。
Polynomial
プロパティは、シフト レジスタのフィードバック接続を決定します。これは z、grzr+gr–1zr–1+gr–2zr–2+...+g0 の原始バイナリ多項式です。係数 gk=0 から r までについては、係数 gk は、k 番目のレジスタから加算器への接続がある場合には 1 です。多項式は原始でなければならないため、Polynomial
プロパティの最初の項 gr と定数項 g0 は 1
でなければなりません。InitialConditions
プロパティはレジスタの初期値を指定します。たとえば、次の表は生成多項式 p(z) = z8 + z2 + 1 に対応するパラメーター値の 2 つのセットを示しています。
量 | 例 1 | 例 2 |
---|---|---|
Polynomial | g1 = [1 0 0 0 0 0 1 0 1] | g2 = [8 2 0] |
生成多項式の次数 | 8、つまり length(g1)-1 です。 | 8 |
InitialConditions | [1 0 0 0 0 0 1 0] | [1 0 0 0 0 0 1 0] |
オブジェクトを呼び出すたびに、発生器内のすべての r レジスタは、シフト レジスタに入ってくる矢印の値に従い、それぞれの値を更新します。加算器は 2 を法とする加算を実行します。LFSR の出力には、m マスク ベクトルにあるすべての接続の合計が反映されます。
Mask
プロパティ m により、PN シーケンスの開始点のシフトが決定されます。詳細については、PN シーケンスの開始点のシフトを参照してください。
PN シーケンスの開始点のシフト
PN シーケンスの開始点をシフトするには、Mask
プロパティを次のように指定します。
シフトの長さを表す整数。
Mask
の既定の設定0
はシフトなしに対応します。単純なシフト レジスタ発生器 の LFSR シフト レジスタの図に示したように、唯一の接続が m0 というラベルの付いた矢印に沿っている場合、シフトはありません。次の表は、
Mask
を0
に設定した場合に発生するシフトと正の整数 d に設定した場合に発生するシフトを示しています。T = 0 T = 1 T = 2 ... T = d T = d+1 Shift = 0 x0 x1 x2 ... xd xd+1 Shift = d xd xd+1 xd+2 ... x2d x2d+1 生成多項式の次数と同じ長さのバイナリ ベクトル。単純なシフト レジスタ発生器の LFSR シフト レジスタの図は、マスク ベクトル m として指定された
Mask
を示しています。このバイナリ ベクトルは N 個の要素をもっていなければなりません。ここで N は生成多項式の次数です。マスク ベクトルを計算するには、関数shift2mask
を使用します。このバイナリ ベクトルは、最大次数 r – 1 の z の多項式 mr–1zr–1 + mr–2zr–2 + ... + m1z + m0 に対応します。シフト d に対応するマスク ベクトルは、m(z) = zd modulo g(z) を表すベクトルです。ここで、g(z) は生成多項式です。
たとえば、生成多項式の次数が 4 である場合、d= 2 に対応するマスク ベクトルは多項式 m(z) = z2 を表す
[0 1 0 0]
です。
信号のリセット
PN 発生器シーケンスをリセットするには、まず、ResetInputPort
プロパティを true
に設定しなければなりません。リセットがない場合に System object が [1 0 0 1 1 0 1 1]
の PN シーケンスを生成するとします。リセット信号 [0 0 0 1]
がオブジェクトに入力引数として渡される場合、リセット信号の 4 ビット目が 1
であるため、PN シーケンスは 4 ビット目でリセットされます。
最大長のシーケンス
次数 r を持つ生成多項式の最大長のシーケンスを生成するには、Polynomial
を次の表の値に設定します。最大のシーケンス長は 2r – 1 です。
r | 生成多項式 | r | 生成多項式 | r | 生成多項式 | r | 生成多項式 |
---|---|---|---|---|---|---|---|
2 | [2 1 0] | 15 | [15 14 0] | 28 | [28 25 0] | 41 | [41 3 0] |
3 | [3 2 0] | 16 | [16 15 13 4 0] | 29 | [29 27 0] | 42 | [42 23 22 1 0] |
4 | [4 3 0] | 17 | [17 14 0] | 30 | [30 29 28 7 0] | 43 | [43 6 4 3 0] |
5 | [5 3 0] | 18 | [18 11 0] | 31 | [31 28 0] | 44 | [44 6 5 2 0] |
6 | [6 5 0] | 19 | [19 18 17 14 0] | 32 | [32 31 30 10 0] | 45 | [45 4 3 1 0] |
7 | [7 6 0] | 20 | [20 17 0] | 33 | [33 20 0] | 46 | [46 21 10 1 0] |
8 | [8 6 5 4 0] | 21 | [21 19 0] | 34 | [34 15 14 1 0] | 47 | [47 14 0] |
9 | [9 5 0] | 22 | [22 21 0] | 35 | [35 2 0] | 48 | [48 28 27 1 0] |
10 | [10 7 0] | 23 | [23 18 0] | 36 | [36 11 0] | 49 | [49 9 0] |
11 | [11 9 0] | 24 | [24 23 22 17 0] | 37 | [37 12 10 2 0] | 50 | [50 4 3 2 0] |
12 | [12 11 8 6 0] | 25 | [25 22 0] | 38 | [38 6 5 1 0] | 51 | [51 6 3 1 0] |
13 | [13 12 10 9 0] | 26 | [26 25 24 20 0] | 39 | [39 8 0] | 52 | [52 3 0] |
14 | [14 13 8 4 0] | 27 | [27 26 25 22 0] | 40 | [40 5 4 3 0] | 53 | [53 6 2 1 0] |
これらの多項式が表すシフト レジスタ構成の詳細については、Digital Communications by John Proakis[1]を参照してください。
参照
[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.
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意および制限:
MATLAB コード生成における System object (MATLAB Coder)を参照してください。
バージョン履歴
R2008a で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)