Main Content

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

commsrc.pn

PN シーケンス発生器オブジェクトの作成

構文

h = commsrc.pn
h = commsrc.pn(property1,value1,...)

説明

h = commsrc.pn は、既定の PN シーケンス発生器オブジェクト h を作成し、以下と等価です。

H = commsrc.pn('GenPoly',       [1 0 0 0 0 1 1], ...
              'InitialStates', [0 0 0 0 0 1],   ...
              'CurrentStates', [0 0 0 0 0 1],   ...
              'Mask',          [0 0 0 0 0 1],   ...
              'NumBitsOut',    1)

または

H = commsrc.pn('GenPoly',       [1 0 0 0 0 1 1], ...
              'InitialStates', [0 0 0 0 0 1],   ...
              'CurrentStates', [0 0 0 0 0 1],   ...
              'Shift',         0,               ...
              'NumBitsOut',    1)

h = commsrc.pn(property1,value1,...) は、プロパティと値の組み合わせとして指定するプロパティを使用して PN シーケンス発生器オブジェクト h を作成します。

プロパティ

PN シーケンス発生器には、次の表に示したプロパティがあります。明示されていない限り、どのプロパティも書き換え可能です。

Property説明
GenPolyビットの生成多項式ベクトル配列。降順でなければなりません。
InitialStates初期のシフト レジスタ値 (ビット単位) のベクトル配列 (生成多項式の次数の長さ)
CurrentStates現在のシフト レジスタ値 (ビット単位) のベクトル配列 (生成多項式の次数の長さ)
NumBitsOutgenerate メソッド呼び出しで出力するビット数
Mask または Shift

バイナリ値 0 と 1 のマスク ベクトルを使用して、XOR 演算により出力ビット値を算出するシフト レジスタ状態ビットを指定します。

また、スカラー シフト値を使用して、出力シーケンスで等価なシフト (遅れまたは進み) を指定することもできます。

'GenPoly' プロパティ値は、シフト レジスタ接続を指定します。これらの値を、バイナリ ベクトルまたは生成多項式の非ゼロ項の指数のベクトルのいずれかとして降べきの順で入力します。バイナリ ベクトルの表現の場合、ベクトルの最初と最後の要素は 1 でなければなりません。降順の多項式の表現の場合、ベクトルの最後の要素は 0 でなければなりません。詳細と例については、このページの「LFSR SSRG の詳細」の節を参照してください。

メソッド

PN シーケンス発生器は次のメソッドを備えています。

generate

[NumBitsOut x 1] PN シーケンス発生器の値を生成します。

reset

CurrentStates 値を InitialStates 値に設定します。

getshift

実際または等価の Shift プロパティ値を取得します。

getmask

実際または等価の Mask プロパティ値を取得します。

copy

commsrc.pn オブジェクトの独立したコピーを作成します。

disp

PN シーケンス発生器オブジェクトのプロパティを表示します。

特定のプロパティの設定の副作用

GenPoly プロパティの設定

このプロパティを設定するたびに、オブジェクト全体がリセットされます。多項式の値が変更されることに加え、'CurrentStates''InitialStates''Mask' が既定値に設定されますが ('NumBitsOut' はそのままです)、警告は表示されません。

InitialStates プロパティの設定

このプロパティを設定するたびに、'CurrentStates' も新しい 'InitialStates' 設定になります。

LFSR SSRG の詳細

generate メソッドは、線形フィードバック シフト レジスタ (LFSR) を使用して疑似ランダム ノイズ (PN) シーケンスを生成します。LFSR は、以下に示すように単純なシフト レジスタ発生器 (SSRG または Fibonacci) 設定を使用して実装されます。

発生器内のすべての r レジスタは、シフト レジスタに入ってくる矢印の値に従い、各タイム ステップでそれぞれの値を更新します。加算器は 2 を法とする加算を実行します。シフト レジスタは、z、grzr+gr-1zr-1+gr-2zr-2+...+g0 の原始バイナリ多項式である 'GenPoly' プロパティ (生成多項式) で表します。前の図のラベルの k 番目のレジスタから加算器への接続がある場合、係数 gk は 1 です。多項式は原始でなければならないため、'GenPoly' プロパティと最初の項 gr と定数項 g0 は 1 でなければなりません。

[生成多項式] パラメーターは、次のいずれかの形式で指定できます。

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

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

たとえば、[1 0 0 0 0 0 1 0 1][82 0] は同じ多項式 p(z) = z8 + z2 + 1 を表します。

[初期状態] パラメーターは、レジスタの初期値を指定するベクトルです。[初期状態] パラメーターは次の基準を満たさなければなりません。

  • [初期状態] ベクトルのすべての要素は 2 進数でなければなりません。

  • [初期状態] ベクトルの長さは、生成多項式の次数と等しくなければなりません。

    メモ:

    ブロックで非ゼロのシーケンスを生成するためには、[初期状態] ベクトルの要素の少なくとも 1 つは非ゼロでなければなりません。つまり、レジスタの少なくとも 1 つの初期状態が非ゼロでなければなりません。

たとえば、次の表は生成多項式 p(z) = z8 + z2 + 1 に対応するパラメーター値の 2 つのセットを示しています。

例 1例 2
生成多項式 g1 = [1 0 0 0 00 1 0 1] g2 = [8 2 0]
生成多項式の次数 8、つまり length(g1)-1 です。 8
初期状態 [1 0 0 0 0 0 1 0] [1 0 0 0 0 0 1 0]

[Output mask vector (or scalar shift value)] は、出力シーケンスの開始点をシフトします。このパラメーターの既定の設定では、唯一の接続は、0 のシフトに対応する m0 というラベルの付いた矢印に沿っています。このパラメーターは、以下でさらに詳しく説明します。

[Output mask vector (or scalar shift value)] を使用すると、PN シーケンスの開始点をシフトできます。このパラメーターは次の 2 つの方法のいずれかで指定できます。

  • シフトの長さを表す整数

  • 生成多項式の次数と同じ長さの "マスク ベクトル" というバイナリ ベクトル

[Output mask vector (or scalar shift value)] を 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

または、[Output mask vector (or scalar shift value)] を、最大次数を r-1 とする z、mr-1zr-1 + mr-2zr-2 + ... + m1z + m0 の多項式に対応するバイナリ ベクトルに設定することもできます。シフト d に対応するマスク ベクトルは、g(z) を法とする m(z) = zd を表します。ここで、g(z) は生成多項式です。たとえば、生成多項式の次数が 4 である場合、d = 2 に対応するマスク ベクトルは多項式 m(z) = z2 を表す [01 0 0] です。前の回路図は、[Output mask vector (or scalar shift value)] をマスク ベクトルとして指定した場合にそれがどのように実装されるかを示しています。[Output mask vector (or scalar shift value)] の既定の設定は 0 です。Communications Toolbox™ の関数 shift2mask を使用すると、マスク ベクトルを計算できます。

最大長のシーケンス

生成多項式の固定次数 r に対して最大長のシーケンスを生成する場合、[Generator polynomial] を次の表の値に設定できます。これらの多項式が表すシフト レジスタ構成の詳細は、Proakis, John G.『Digital Communications』(Third edition, New York, McGraw Hill, 1995) を参照してください。

r生成多項式r生成多項式
2 [2 1 0] 21 [21 19 0]
3 [3 2 0] 22 [22 21 0]
4 [4 3 0] 23 [23 18 0]
5 [5 3 0] 24 [24 23 22 17 0]
6 [6 5 0] 25 [25 22 0]
7 [7 6 0] 26 [26 25 24 20 0]
8 [8 6 5 4 0] 27 [27 26 25 22 0]
9 [9 5 0] 28 [28 25 0]
10 [10 7 0] 29 [29 27 0]
11 [11 9 0] 30 [30 29 28 7 0]
12 [12 11 8 6 0] 31 [31 28 0]
13 [13 12 10 9 0] 32 [32 31 30 10 0]
14 [14 13 8 4 0] 33 [33 20 0]
15 [15 14 0] 34 [34 15 14 1 0]
16 [16 15 13 4 0] 35 [35 2 0]
17 [17 14 0] 36 [36 11 0]
18 [18 11 0] 37 [37 12 10 2 0]
19 [19 18 17 14 0] 38 [38 6 5 1 0]
20 [20 17 0] 39 [39 8 0]
40 [40 5 4 3 0] 47 [47 14 0]
41 [41 3 0] 48 [48 28 27 1 0]
42 [42 23 22 1 0] 49 [49 9 0]
43 [43 6 4 3 0] 50 [50 4 3 2 0]
44 [44 6 5 2 0] 51 [51 6 3 1 0]
45 [45 4 3 1 0] 52 [52 3 0]
46 [46 21 10 1 0] 53 [53 6 2 1 0]

すべて折りたたむ

PN シーケンス発生器を設定します。バイナリ ベクトル形式または指数ベクトル形式で多項式を定義します。

この図は、生成多項式 p(z)=z6+z+1 で PN シーケンス発生器を定義します。

この PN シーケンス発生器を以下のように定義します。

h1 = commsrc.pn('GenPoly', [1 0 0 0 0 1 1], 'Mask', [1 1 0 1 0 1]);
h2 = commsrc.pn('GenPoly', [1 0 0 0 0 1 1], 'Shift', 22);
mask2shift ([1 0 0 0 0 1 1],[1 1 0 1 0 1])
ans = 22

または、多項式の降べきの順の非ゼロの項の z の指数として GenPoly を入力できます。

h = commsrc.pn('GenPoly', [6 1 0], 'Mask', [1 1 0 1 0 1])
h = 
          GenPoly: [1 0 0 0 0 1 1]
    InitialStates: [0 0 0 0 0 1]
    CurrentStates: [0 0 0 0 0 1]
             Mask: [1 1 0 1 0 1]
       NumBitsOut: 1

通常、commsrc.pn は、疑似乱数データ ストリームを出力するために使用されます。

PN オブジェクトを構築します。

h = commsrc.pn('Shift',0);

10 PN ビットを出力します。

set(h,'NumBitsOut',10);
generate(h)
ans = 10×1

     1
     0
     0
     0
     0
     0
     1
     0
     0
     0

さらに 10 PN ビットを出力します。

generate(h)
ans = 10×1

     0
     1
     1
     0
     0
     0
     1
     0
     1
     0

オブジェクトを初期のシフト レジスタ状態値にリセットします。

reset(h);

4 PN ビットを出力します。

set(h,'NumBitsOut',4);
generate(h)
ans = 4×1

     1
     0
     0
     0

commsrc.pn オブジェクトをコピーすると、その状態もコピーされます。コピーされたオブジェクトからの以降の出力は、オリジナルのオブジェクトからの初期出力とは異なる可能性があります。

PN オブジェクトを構築し、そこからシーケンスを出力します。

h = commsrc.pn('Shift', 0);
set(h, 'NumBitsOut', 5);
generate(h)
ans = 5×1

     1
     0
     0
     0
     0

h のコピーを作成します。コピーしたオブジェクトからシーケンスを生成します。コピーは h の状態が変化した後で作成されたため、g によって生成された初期シーケンスは、h から生成された初期シーケンスとは異なります。

g=copy(h);
generate(g)
ans = 5×1

     0
     1
     0
     0
     0

ただし、g がリセットされた場合は、h が生成するのと同じシーケンスが生成されます。

reset(g);
generate(g)
ans = 5×1

     1
     0
     0
     0
     0

R2009a で導入