Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

comm.gpu.ConvolutionalInterleaver

GPU によるシフト レジスタを使用した入力シンボルの並べ替え

このオブジェクトを使用するには、Parallel Computing Toolbox™ をインストールして対象 GPU へのアクセス権を入手しなければなりません。GPU の詳細は、GPU 計算 (Parallel Computing Toolbox)を参照してください。

説明

comm.gpu.ConvolutionalInterleaver System object™ は、グラフィックス処理装置 (GPU) を使用して入力シーケンスのシンボルを並べ替えます。

GPU ベースの System object は、gpuArray クラスを使用して作成された一般的な MATLAB® 配列またはオブジェクトを受け入れます。出力信号のデータ型は、入力信号から継承されます。

  • 入力信号が MATLAB 配列の場合、System object は CPU と GPU の間のデータ転送を処理します。出力信号は MATLAB 配列です。

  • 入力信号が gpuArray の場合、データは GPU に残ります。出力信号は gpuArray です。オブジェクトに gpuArray が渡されると、計算がすべて GPU 上で実行され、データ転送は発生しません。gpuArray 引数を渡すことにより、シミュレーション時間が短縮されてパフォーマンスが向上します。詳細については、GPU での配列の確立 (Parallel Computing Toolbox)を参照してください。

GPU を使用して入力シーケンスのシンボルを並べ替えるには、次のようにします。

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

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

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

作成

説明

intrlvr = comm.gpu.ConvolutionalInterleaver は、GPU ベースの畳み込みインターリーバー System object を作成します。

intrlvr = comm.gpu.ConvolutionalInterleaver(Name=Value) は、名前と値の引数を 1 つ以上使用してプロパティを設定します。たとえば、NumRegisters=10 は内部シフト レジスタの数を指定します。

intrlvr = comm.gpu.ConvolutionalInterleaver(m,b,ic) は、NumRegisters プロパティを m に、RegisterLengthStep プロパティを b に、InitialConditions プロパティを ic に設定します。

プロパティ

すべて展開する

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

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

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

内部シフト レジスタの数。正の整数として指定します。

データ型: double

連続する各シフト レジスタに組み込む追加のシンボル数。正の整数として指定します。最初のレジスタはゼロ シンボルを保持します。

データ型: double

シフト レジスタの初期条件。次のいずれかの値として指定します。

  • スカラー — 最初のシフト レジスタを除くすべてのシフト レジスタが同一の指定値を格納します。

  • 列ベクトル — 列ベクトルの長さが NumRegisters プロパティの値と等しい場合、i 番目のシフト レジスタは指定のベクトルの i 番目の要素を格納します。

最初のシフト レジスタはゼロ遅延であるため、値を指定する必要はありません。最初のシフト レジスタの遅れがゼロであるため、オブジェクトはこのプロパティの最初の要素を無視します。

データ型: double

使用法

説明

intrlvseq = intrlvr(inputseq) は、一連のシフト レジスタを使用して、シンボルの入力シーケンス inputseq を並べ替えます。ホスト コンピューターに GPU が構成されている場合、処理には GPU が使用されます。そうでない場合、処理には CPU が使用されます。出力はインターリーブされたシーケンスです。

オブジェクトは、それぞれに遅延を指定した N 個のレジスタで構成されます。N はシフト レジスタの総数です。オブジェクトは、k 番目のシフト レジスタの遅延値を ((k-1) ✕ RegisterLengthStep) に設定します。新しいシンボルが入力されるたびに、System object はコミュテーターを新しいレジスタに切り替え、そのレジスタの最も古いシンボルをシフト アウトして新しいシンボルをシフト インします。コミュテーターが N 番目のレジスタに到達し、次の新しい入力が発生すると、コミュテーターは最初のレジスタに戻ります。

入力引数

すべて展開する

シンボルのシーケンス。列ベクトルとして指定します。

データ型: double | single | uint32 | int32 | logical

出力引数

すべて展開する

シンボルのインターリーブ済みシーケンス。inputseq 入力と同じデータ型とサイズの列ベクトルとして返されます。

データ型: double | single | uint32 | int32 | logical

オブジェクト関数

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

release(obj)

すべて展開する

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

すべて折りたたむ

GPU ベースの畳み込みインターリーバー System object™ を作成します。

intrlvr = comm.gpu.ConvolutionalInterleaver('NumRegisters',2, ...
                                            'RegisterLengthStep',3);

GPU ベースの畳み込みデインターリーバー System object™ を作成します。

deintrlvr = comm.gpu.ConvolutionalDeinterleaver('NumRegisters',2, ...
                                                'RegisterLengthStep',3);

ランダム データ シーケンスを生成します。データ シーケンスをインターリーバーを介して渡してから、デインターリーバーを介して渡します。

data = (0:20)';
intrlvData = intrlvr(data);
deintrlvData = deintrlvr(intrlvData);

元のシーケンス、インターリーブ シーケンス、復元されたシーケンスを表示します。

[data intrlvData deintrlvData]
ans = 21×3

     0     0     0
     1     0     0
     2     2     0
     3     0     0
     4     4     0
     5     0     0
     6     6     0
     7     1     1
     8     8     2
     9     3     3
      ⋮

インターリーバーとデインターリーバーのペアを経由するときの遅延は、NumRegisters プロパティと RegisterLengthStep プロパティの積に等しくなります。

intrlvDelay = intrlvr.NumRegisters * intrlvr.RegisterLengthStep
intrlvDelay = 6

この遅延を考慮して、元のデータとデインターリーブしたデータが同一であることを検証します。

numSymErrors = symerr(data(1:end-intrlvDelay), ...
                      deintrlvData(1+intrlvDelay:end))
numSymErrors = 0

拡張機能

バージョン履歴

R2012a で導入