Real Partial-Systolic QR Decomposition
実数値の行列の QR 分解

ライブラリ:
Fixed-Point Designer HDL Support /
Matrices and Linear Algebra /
Matrix Factorizations
説明
Real Partial-Systolic QR Decomposition ブロックは QR 分解を使用して R と C = Q'B を計算します。ここで QR = A、A および B は実数値の行列です。Ax = B の最小二乗解は、x = R\C です。R は上三角行列、Q は直交行列です。C = Q' を計算するには、B を単位行列に設定します。
正則化パラメーターが非ゼロの場合、Real Partial-Systolic QR Decomposition ブロックは をインプレースで に変換し、 をインプレースで に変換します。ここで、λ は正則化パラメーター、QR は のサイズを抑えた QR 分解、A は m 行 n 列の行列、p は B の列数、In = eye(n)、0n,p = zeros(n,p) です。
例
ハードウェア効率に優れた Real Partial-Systolic QR Decomposition の実装
Real Partial-Systolic QR Decomposition ブロックの使用方法。
Determine Fixed-Point Types for QR Decomposition
Use fixed.qrFixedpointTypes to determine fixed-point types for
computation of QR decomposition.
端子
入力
実数行列 A の行。ベクトルとして指定します。A は m 行 n 列の行列で、m ≥ 2 および n ≥ 2 です。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
出力
サイズを抑えた QR 分解行列 R。スカラーまたはベクトルとして返されます。R は上三角行列です。行列 R のサイズは n 行 n 列です。R のデータ型は A と同じです。
データ型: single | double | fixed point
サイズを抑えた QR 分解行列 C=Q'B。スカラーまたはベクトルとして返されます。C の行数は R と同じです。C のデータ型は B と同じです。
データ型: single | double | fixed point
出力データが有効であるかどうか。boolean スカラーとして返されます。この制御信号は出力端子 R および C のデータが有効であるかどうかを示します。この値が 1 (true) の場合、ブロックは R 行列と C 行列を正常に計算しています。この値が 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 |
アルゴリズム
シストリック実装はスペースの制約よりも計算速度を優先します。一方、バーストによる実装は演算速度を犠牲にしてスペースの制約を優先します。次の表は、行列の分解と連立線形方程式の求解に使用できる実装間のトレードオフを示しています。
| 実装 | スループット | レイテンシ | 領域 |
|---|---|---|---|
| シストリック | 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 QR Decomposition" のブロックは、行列 A と B を行単位で受け入れて処理します。m 個の行を受け入れた後、ブロックは行列 R と C をベクトルとして出力します。部分的なシストリック実装ではパイプライン化された構造を使用するため、ブロックは現在の行列の結果を出力する前に新しい行列入力を受け入れることができます。
たとえば、入力行列 A と B が 3 行 3 列であるとします。また、validIn のアサートが ready よりも前、つまり上流のデータ ソースが QR 分解よりも速いと仮定します。

この図で次のとおりです。
A1r1は 1 つ目の行列 A の 1 行目、R1は 1 つ目の行列 R などのようになります。validInからreadyまで — 行が正常に入力されてから、ブロックで次の行の受け入れ準備ができるまで。最後の行の
validInからvalidOutまで — 最後の行が入力されてから、ブロックで解の出力が開始されるまで。
次の表に、"Partial-Systolic QR Decomposition" のブロックのタイミングの詳細を示します。
| ブロック | validIn から ready まで (サイクル) | 最後の行の validIn から validOut まで (サイクル) |
|---|---|---|
| Real Partial-Systolic QR Decomposition | wl + 7 | (wl + 6)*n + 6 |
| Complex Partial-Systolic QR Decomposition | wl + 9 | (wl + 7.5)*2*n + 6 |
この表で、m は行列 A の行数を表しており、n は行列 A の列数です。wl は入力データの語長を表しています。
A のデータ型が double の場合、wl は 53 です。
A のデータ型が single の場合、wl は 24 です。
A と B のデータ型が固定小数点の場合、wl は以下で与えられます。
max(A.WordLength + ~issigned(A), B.WordLength + ~issigned(B))
このブロックは、Simulink® HDL ワークフロー アドバイザーを使用した HDL コード生成をサポートしています。例については、Simulink モデルからの HDL コード生成と FPGA 合成 (HDL Coder)およびImplement Digital Downconverter for FPGA (DSP HDL Toolbox)を参照してください。
R2023a において: 次の表は、リソース使用状況の結果の概要を示したものです。
この例のデータは、Xilinx® Zynq®-7 ZC706 評価ボード (スピード グレード -2) でブロックを合成して生成したものです。
合成に使用したパラメーターは次のとおりです。
ブロック パラメーター:
m = 10n = 10p = 1行列 A の次元: 10 行 10 列
行列 B の次元: 10 行 1 列
入力データ型:
sfix18_En12
| リソース | 使用 |
|---|---|
| LUT | 35455 |
| LUTRAM | 1126 |
| フリップ フロップ | 22334 |
R2022b において: 次の各表に、配置配線後のリソース使用状況の結果とタイミングの概要をそれぞれ示します。
この例のデータは、Xilinx Zynq UltraScale™ + RFSoC ZCU111 評価ボードでブロックを合成して生成したものです。合成ツールは Vivado® v.2020.2 (win64) です。
合成に使用したパラメーターは次のとおりです。
ブロック パラメーター:
m = 16n = 16p = 1行列 A の次元: 16 行 16 列
行列 B の次元: 16 行 1 列
入力データ型:
sfix16_En14ターゲット周波数: 300 MHz
| リソース | 使用 | 使用可能 | 使用率 (%) |
|---|---|---|---|
| CLB LUT | 105922 | 425280 | 24.91 |
| CLB レジスタ | 82211 | 850560 | 9.67 |
| DSP | 0 | 4272 | 0.00 |
| ブロック RAM タイル | 0 | 1080 | 0.00 |
| URAM | 0 | 80 | 0.00 |
| 値 | |
|---|---|
| 要件 | 3.3333 ns |
| データ パス遅延 | 3.276 ns |
| スラック | 0.038 ns |
| クロック周波数 | 303.46 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 で導入ブロック線図の更新時に、部分的なシストリック パイプラインを構成するループが展開されます。この更新された内部アーキテクチャにより、シミュレーションおよびコード生成のデッド演算が削除されるため、必要なハードウェア リソースの数が大幅に少なくなります。このブロックは、以前のリリースのライブラリ バージョンのこれらのブロックに対して、クロックおよびビットトゥルーの忠実度でシミュレーションを行います。
| リソース | R2022b | R2023a |
|---|---|---|
| LUT | 58179 | 35455 |
| LUTRAM | 1330 | 1126 |
| フリップ フロップ | 37355 | 22334 |
この例のデータは、Xilinx Zynq-7 ZC706 評価ボード (スピード グレード -2) でブロックを合成して生成したものです。
合成に使用したパラメーターは次のとおりです。
ブロック パラメーター:
m = 10n = 10p = 1行列 A の次元: 10 行 10 列
行列 B の次元: 10 行 1 列
入力データ型:
sfix18_En12
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)