Real Partial-Systolic Matrix Solve Using QR Decomposition
QR 分解を使用した実数値の行列のために、方程式 Ax = B で x の値を計算する

ライブラリ:
Fixed-Point Designer HDL Support /
Matrices and Linear Algebra /
Linear System Solvers
説明
Real Partial-Systolic Matrix Solve Using QR Decomposition ブロックは QR 分解を使用して連立線形方程式 Ax = B を解きます。ここで A と B は実数値の行列です。x = A-1 を計算するには、B を単位行列に設定します。
正則化パラメーターが非ゼロの場合、Real Partial-Systolic Matrix Solve Using QR Decomposition ブロックは実数値 の行列解を計算します。ここで、λ は正則化パラメーター、A は m 行 n 列の行列、p は B の列数、In = eye(n)
、0n,p = zeros(n,p)
です。
例
ハードウェア効率に優れた Real Partial-Systolic Matrix Solve Using QR Decomposition の実装
Real Partial-Systolic Matrix Solve Using QR Decomposition ブロックの使用方法。
ハードウェア効率に優れた Real Partial-Systolic Matrix Solve Using QR Decomposition の対角ローディングによる実装
Real Partial-Systolic Matrix Solve Using QR Decomposition ブロックの対角ローディングによる使用方法。
ハードウェア効率に優れた、Tikhonov 正則化を使用した Real Partial-Systolic Matrix Solve Using QR Decomposition の実装
この例では、Real Partial-Systolic Matrix Solve Using QR Decomposition ブロックを使用して、次に示す正則化された最小二乗行列方程式を解く方法を説明します。
Algorithms to Determine Fixed-Point Types for Real Least-Squares Matrix Solve AX=B
Derivation of algorithms for determining fixed-point types for real least-squares matrix solve.
Determine Fixed-Point Types for Real Least-Squares Matrix Solve AX=B
Use fixed.realQRMatrixSolveFixedpointTypes
to determine fixed-point
types for computation of the real least-squares matrix equation.
Tikhonov 正則化を使用した実数最小二乗行列解の固定小数点型の判別
この例では、関数fixed.realQRMatrixSolveFixedpointTypes
を使用して、次に示す実数最小二乗行列方程式の解の固定小数点型を解析的に判別する方法を説明します。
端子
入力
実数行列 A の行。ベクトルとして指定します。A は m 行 n 列の行列で、m ≥ 2 および m ≥ n です。B が single または double の場合、A は B と同じデータ型でなければなりません。A が固定小数点データ型の場合、A は符号付きで、2 進小数点スケーリングを使用し、B と同じ語長をもたなければなりません。傾きとバイアス表現は固定小数点データ型ではサポートされていません。
データ型: single
| double
| fixed point
実数行列 B の行。ベクトルとして指定します。B は m 行 p 列の行列で、m ≥ 2 です。A が single または double の場合、B は A と同じデータ型でなければなりません。B が固定小数点データ型の場合、B は符号付きで、2 進小数点スケーリングを使用し、A と同じ語長をもたなければなりません。傾きとバイアス表現は固定小数点データ型ではサポートされていません。
データ型: single
| double
| fixed point
入力が有効であるかどうか。boolean スカラーとして指定します。この制御信号は A(i,:)
入力端子と B(i,:)
入力端子からのデータが有効であるかどうかを示します。この値が 1 (true
) で ready
の値が 1 (true
) の場合、ブロックは A(i,:)
入力端子と B(i,:)
入力端子の値を取得します。この値が 0 (false
) の場合、ブロックは入力サンプルを無視します。
true
の validIn
信号を送信してから、ready
が false
に設定されるまでに、多少の遅延が生じることがあります。すべてのデータが確実に処理されるように、別の true
の validIn
信号を送信するときは、ready
が false
に設定されるまで待たなければなりません。
データ型: Boolean
内部状態をクリアするかどうか。boolean スカラーとして指定します。この値が 1 (true
) の場合、ブロックは現在の計算を停止し、すべての内部状態をオフにします。この値が 0 (false
) で validIn
の値が 1 (true
) の場合、ブロックは新しいサブフレームを開始します。
データ型: Boolean
出力
行列 X の行。スカラーまたはベクトルとして返されます。
データ型: single
| double
| fixed point
出力データが有効であるかどうか。boolean スカラーとして返されます。この制御信号は出力端子 X(i,:)
のデータが有効であるかどうかを示します。この値が 1 (true
) の場合、ブロックは行列 X の行を正常に計算しています。この値が 0 (false
) の場合、出力データは有効ではありません。
データ型: Boolean
ブロックの準備が整っているかどうか。boolean スカラーとして返されます。この制御信号は新しい入力データに対するブロックの準備が整っているかどうかを示します。この値が 1 (true
) で validIn
の値が 1 (true
) の場合、ブロックは入力データを次のタイム ステップで受け入れます。この値が 0 (false
) の場合、ブロックは入力データを次のタイム ステップで無視します。
true
の validIn
信号を送信してから、ready
が false
に設定されるまでに、多少の遅延が生じることがあります。すべてのデータが確実に処理されるように、別の true
の validIn
信号を送信するときは、ready
が false
に設定されるまで待たなければなりません。
データ型: Boolean
パラメーター
入力行列 A および B の行数。正の整数値スカラーとして指定します。
プログラムでの使用
ブロック パラメーター: m |
型: 文字ベクトル |
値: 正の整数値のスカラー |
既定の設定: 4 |
入力行列 A の列数。正の整数値スカラーとして指定します。
プログラムでの使用
ブロック パラメーター: n |
型: 文字ベクトル |
値: 正の整数値のスカラー |
既定の設定: 4 |
入力行列 B の列数。正の整数値スカラーとして指定します。
プログラムでの使用
ブロック パラメーター: p |
型: 文字ベクトル |
値: 正の整数値のスカラー |
既定の設定: 1 |
正則化パラメーター。非負のスカラーとして指定します。正則化パラメーターを小さい正の値にすると、問題の調整を向上させ、推定値の分散を小さくすることができます。バイアスがありますが、推定値の分散が小さいと、多くの場合、最小二乗推定値と比べて平均二乗誤差が小さくなります。
プログラムでの使用
ブロック パラメーター: regularizationParameter |
型: 文字ベクトル |
値: 非負の実数スカラー |
既定の設定: 0 |
出力行列 X のデータ型。fixdt(1,18,14)
、double
、single
、fixdt(1,16,0)
、またはユーザー指定のデータ型式として指定します。型は直接指定されるか、Simulink.NumericType
などのデータ型オブジェクトとして表現されます。
プログラムでの使用
ブロック パラメーター: OutputType |
型: 文字ベクトル |
値: 'fixdt(1,18,14)' | 'double' | 'single' | 'fixdt(1,16,0)' | '<data type expression>' |
既定の設定: 'fixdt(1,18,14)' |
アルゴリズム
シストリック実装はスペースの制約よりも計算速度を優先します。一方、バーストによる実装は演算速度を犠牲にしてスペースの制約を優先します。次の表は、行列の分解と連立線形方程式の求解に使用できる実装間のトレードオフを示しています。
実装 | スループット | レイテンシ | 領域 |
---|---|---|---|
シストリック | C | O(n) | O(mn2) |
部分的なシストリック | C | O(m) | O(n2) |
忘却係数を使用する部分的なシストリック | C | O(n) | O(n2) |
バースト | O(n) | O(mn) | O(n) |
ここで、C はデータの語長に比例する定数、m は行列 A の行数、n は行列 A の列数です。
用途に適したブロックの選択に関する追加の考慮事項については、Choose a Block for HDL-Optimized Fixed-Point Matrix Operationsを参照してください。
このブロックでは AMBA AXI ハンドシェイク プロトコル [1] を使用しています。データと制御情報の転送に valid/ready
ハンドシェイク プロセスが使用されます。この双方向の制御メカニズムにより、マネージャーと配下の間で情報をやり取りするレートをマネージャーと配下の双方で制御できます。valid
信号はデータが使用可能であることを示します。ready
信号はブロックでデータを受け入れ可能であることを示します。valid
信号と ready
信号の両方が High の場合にのみデータの転送が行われます。
"Partial-Systolic Matrix Solve Using QR Decomposition" のブロックは、行列 A と B を行単位で受け入れて処理します。m 個の行を受け入れた後、ブロックは行列 X を単一のベクトルとして出力します。部分的なシストリック実装ではパイプライン化された構造を使用するため、ブロックは現在の行列の結果を出力する前に新しい行列入力を受け入れることができます。
たとえば、入力行列 A と B が 3 行 3 列であるとします。また、validIn
のアサートが ready
よりも前、つまり上流のデータ ソースが QR 分解よりも速いと仮定します。
この図で次のとおりです。
A1r1
は 1 つ目の行列 A の 1 行目、X1
はベクトルとして出力される行列 X です。validIn
からready
まで — 行が正常に入力されてから、ブロックで次の行の受け入れ準備ができるまで。最後の行の
validIn
からvalidOut
まで — 最後の行が入力されてから、ブロックで解の出力が開始されるまで。
次の表に、Real Partial-Systolic Matrix Solve Using QR Decomposition ブロックのタイミングの詳細を示します。レイテンシは、行列 A のサイズと、行列 A および B のデータ型によって異なります。表内では以下のようになっています。
m は行列 A の行数を表しており、n は行列 A の列数です。
wl は入力データの語長を表します。A と B のデータ型が固定小数点またはスケーリングされた double
fi
の場合、wl はmax(A.WordLength + ~issigned(A), B.WordLength + ~issigned(B))
で与えられます。
入力データ型 | validIn から ready まで (サイクル) | 最後の行の validIn から validOut まで (サイクル) |
---|---|---|
固定小数点 fi | max(wl + 7, ceil((3.5*n2 + n*(nextpow2(wl) + wl + 8.5) + 6)/m)) | (wl + 6)*n + 3.5*n2 + n*(nextpow2(wl) + wl + 9.5) + 9 - n |
スケーリングされた double の fi | max(wl + 7, ceil((3.5*n2 + n*(wl + 7.5) + 6)/m)) | (wl + 6)*n + 3.5*n2 + n*(wl + 7.5) + 9 |
double | max(60, ceil((3.5*n2 + 6.5*n + 6)/m)) | 3.5*n2 + 65.5*n + 9 |
single | max(31, ceil((3.5*n2 + 6.5*n + 6)/m)) | 3.5*n2 + 36.5*n + 9 |
このブロックは、Simulink® HDL ワークフロー アドバイザーを使用した HDL コード生成をサポートしています。例については、Simulink モデルからの HDL コード生成と FPGA 合成 (HDL Coder)およびImplement Digital Downconverter for FPGA (DSP HDL Toolbox)を参照してください。
R2022b において: 次の各表に、配置配線後のリソース使用状況の結果とタイミングの概要をそれぞれ示します。
この例のデータは、Xilinx® Zynq® UltraScale™ + RFSoC ZCU111 評価ボードでブロックを合成して生成したものです。合成ツールは Vivado® v.2020.2 (win64) です。
合成に使用したパラメーターは次のとおりです。
ブロック パラメーター:
m = 16
n = 16
p = 1
行列 A の次元: 16 行 16 列
行列 B の次元: 16 行 1 列
入力データ型:
sfix16_En14
ターゲット周波数: 300 MHz
リソース | 使用 | 使用可能 | 使用率 (%) |
---|---|---|---|
CLB LUT | 110589 | 425280 | 26.00 |
CLB レジスタ | 87850 | 850560 | 10.33 |
DSP | 2 | 4272 | 0.05 |
ブロック RAM タイル | 0 | 1080 | 0.00 |
URAM | 0 | 80 | 0.00 |
値 | |
---|---|
要件 | 3.3333 ns |
データ パス遅延 | 3.163 ns |
スラック | 0.151 ns |
クロック周波数 | 314.23 MHz |
参照
[1] "AMBA AXI and ACE Protocol Specification Version E." https://developer.arm.com/documentation/ihi0022/e/AMBA-AXI3-and-AXI4-Protocol-Specification/Single-Interface-Requirements/Basic-read-and-write-transactions/Handshake-process
拡張機能
傾きとバイアス表現は固定小数点データ型ではサポートされていません。
HDL Coder™ には、HDL の実装および合成されたロジックに影響する追加のコンフィギュレーション オプションがあります。
このブロックには 1 つの既定の HDL アーキテクチャがあります。
一般 | |
---|---|
ConstrainedOutputPipeline | 既存の遅延を設計内で移動することによって出力に配置するレジスタの数。分散型パイプラインではこれらのレジスタは再分散されません。既定の設定は |
InputPipeline | 生成されたコードに挿入する入力パイプライン ステージ数。分散型パイプラインと制約付き出力パイプラインでは、これらのレジスタを移動できます。既定の設定は |
OutputPipeline | 生成されたコードに挿入する出力パイプライン ステージ数。分散型パイプラインと制約付き出力パイプラインでは、これらのレジスタを移動できます。既定の設定は |
固定小数点データ型のみをサポートします。
バージョン履歴
R2020b で導入このブロックは Partial-Systolic QR Decomposition ブロックに依存します。23a 以降では、ブロック線図の更新時に、QR Decomposition ブロック内の部分的なシストリック パイプラインを構成するループが展開されます。この更新された内部アーキテクチャにより、シミュレーションおよびコード生成のデッド演算が削除されるため、必要なハードウェア リソースが少なくなります。このブロックは、以前のリリースのライブラリ バージョンのこれらのブロックに対して、クロックおよびビットトゥルーの忠実度でシミュレーションを行います。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)