Real Burst Matrix Solve Using Q-less QR Decomposition
Q-less QR 分解を使用した実数値の行列のために、方程式 A'AX = B で X の値を計算する

ライブラリ:
Fixed-Point Designer HDL Support /
Matrices and Linear Algebra /
Linear System Solvers
説明
Real Burst Matrix Solve Using Q-less QR Decomposition ブロックは Q-less QR 分解を使用して連立線形方程式 A'AX = B を解きます。ここで A と B は実数値の行列です。
正則化パラメーターが非ゼロの場合、Real Burst Matrix Solve Using Q-less QR Decomposition ブロックは次の行列方程式を解きます。
ここで、λ は正則化パラメーター、A は m 行 n 列の行列、In = eye(n) です。
例
ハードウェア効率に優れた Real Burst Matrix Solve Using Q-less QR Decomposition の実装
Real Burst Matrix Solve Using Q-less QR Decomposition ブロックの使用方法。
ハードウェア効率に優れた、Tikhonov 正則化を使用した Real Burst Matrix Solve Using Q-less QR Decomposition の実装
この例では、Real Burst Matrix Solve Using QR Decomposition ブロックを使用して、次に示す正則化された最小二乗行列方程式を解く方法を説明します。
Algorithms to Determine Fixed-Point Types for Real Q-less QR Matrix Solve A'AX=B
Derivation of algorithms for determining fixed-point types for real Q-less QR matrix solve.
Determine Fixed-Point Types for Real Q-less QR Matrix Solve A'AX=B
Use fixed.realQlessQRFixedpointTypes to determine fixed-point types
for computation of the real least-squares matrix equation.
Tikhonov 正則化を使用した実数 Q-less QR 行列解の固定小数点型の判別
この例では、関数fixed.realQlessQRMatrixSolveFixedpointTypesを使用して、次に示す実数最小二乗行列方程式の解の固定小数点型を解析的に判別する方法を説明します。
端子
入力
実数行列 A の行。ベクトルとして指定します。A は m 行 n 列の行列で、m ≥ 2 および m ≥ n です。B が single または double の場合、A は B と同じデータ型でなければなりません。A が固定小数点データ型の場合、A は符号付きで、2 進小数点スケーリングを使用し、B と同じ語長をもたなければなりません。傾きとバイアス表現は固定小数点データ型ではサポートされていません。
データ型: single | double | fixed point
実数行列 B の行。ベクトルとして指定します。B は n 行 p 列の行列で、n ≥ 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 の行数。正の整数値のスカラーとして指定します。
プログラムでの使用
ブロック パラメーター: m |
| 型: 文字ベクトル |
| 値: 正の整数値のスカラー |
既定の設定: 4 |
行列 A の列数と行列 B の行数。正の整数値のスカラーとして指定します。
プログラムでの使用
ブロック パラメーター: 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)' |
ヒント
実数値の入力行列 A と B の Real Burst Matrix Solve Using Q-less QR Decomposition ブロックを含むテンプレート モデルを生成するには、fixed.getQlessQRMatrixSolveModel(A,B) を使用します。
アルゴリズム
シストリック実装はスペースの制約よりも計算速度を優先します。一方、バーストによる実装は演算速度を犠牲にしてスペースの制約を優先します。次の表は、行列の分解と連立線形方程式の求解に使用できる実装間のトレードオフを示しています。
| 実装 | スループット | レイテンシ | 領域 |
|---|---|---|---|
| シストリック | 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を参照してください。
"Matrix Solve Using QR Decomposition" のブロックは同期的に動作します。これらのブロックでは、まず、入力行列 A と B が QR Decomposition ブロックを使用して行列 R と C に分解されます。次に、Back Substitute ブロックで RX = C が計算されます。入力行列 A と B が同期された方法で並行してシステムに伝播されます。

"Matrix Solve Using Q-less QR Decomposition" のブロックは非同期的に動作します。まず、入力行列 A の Q-less QR 分解が実行され、結果の行列 R がバッファーに格納されます。次に、Forward Backward Substitution ブロックで、入力行列 B とバッファーに格納された行列 R を使用して R'RX = B が計算されます。行列 R と行列 B がバッファーに別々に格納されるため、上流の Q-less QR Decomposition ブロックと下流の Forward Backward Substitute ブロックを独立して実行できます。Forward Backward Substitute ブロックによる処理は、1 つ目の行列 R と B が使用できるようになると開始されます。その後、Q-less QR Decomposition ブロックのステータスに関係なく、バッファーに格納された最新の行列 R と B を使用して連続的に実行されます。たとえば、上流のブロックからの行列 A と B の提供が停止すると、Forward Backward Substitute ブロックは行列 R と B の最後のペアを使用して同じ出力を生成し続けます。

"Burst (Asynchronous) Matrix Solve Using Q-less QR Decomposition" のブロックは、ブロック名に示されているように、同期演算と非同期演算の両方のバリアントで使用できます。
このブロックでは AMBA AXI ハンドシェイク プロトコル [1] を使用しています。データと制御情報の転送に valid/ready ハンドシェイク プロセスが使用されます。この双方向の制御メカニズムにより、マネージャーと配下の間で情報をやり取りするレートをマネージャーと配下の双方で制御できます。valid 信号はデータが使用可能であることを示します。ready 信号はブロックでデータを受け入れ可能であることを示します。valid 信号と ready 信号の両方が High の場合にのみデータの転送が行われます。
"Burst Matrix Solve Using Q-less QR Decomposition" のブロックは、行列 A と B を行単位で同期的に受け入れて処理します。m 個の行を受け入れた後、ブロックは行列 X を行単位で連続的に出力します。行列は最初の行から最後の行まで出力されます。
たとえば、入力行列 A と B が 3 行 3 列であるとします。また、validIn のアサートが ready よりも前、つまり上流のデータ ソースが QR 分解よりも速いと仮定します。

この図で次のとおりです。
A1r1は 1 つ目の行列 A の 1 行目、X1r3は 1 つ目の行列 X の 3 行目などのようになります。validInからreadyまで — 1 つの行列内において、行が正常に入力されてから、ブロックで次の行の受け入れ準備ができるまで。最後の行の
validInからvalidOutまで — 最後の行が入力されてから、ブロックで解の出力が開始されるまで。最後の行の
validInから新しい行列の準備完了まで — ブロックで解の出力が開始されてから、ブロックで次の行列入力の受け入れ準備ができるまで。
次の表に、Real Burst Matrix Solve Using Q-less QR Decomposition ブロックのタイミングの詳細を示します。レイテンシは、行列 A のサイズと、行列 A および B のデータ型によって異なります。表内では以下のようになっています。
この表で、m は行列 A の行数を表しており、n は行列 A の列数です。wl は入力データの語長を表しています。
m は、行列 A の行数です。
n は行列 A の列数です。
wl は行列 A の入力データの語長を表します。
| 入力データ型 | validIn から ready まで (サイクル) | 最後の行の validIn から validOut まで (サイクル) | 最後の行の validIn から新しい行列の準備完了まで (サイクル) |
|---|---|---|---|
固定小数点 fi | (wl + 5)*n + 2 | 7*n2 + 27*n + 6 + 3*n*wl + 2*n*nextpow2(wl) | 7*n2 + 27*n + 6 + 3*n*wl + 2*n*nextpow2(wl) + n |
スケーリングされた double の fi | (wl + 5)*n + 2 | 7*n2 + (3*wl + 25)*n + 6 | 7*n2 + (3*wl + 25)*n + 6 + n |
double | 58*n + 2 | 7*n2 + 76*n + 6 | 7*n2 + 76*n + 6 + n |
single | 29*n + 2 | 7*n2 + 47*n + 6 | 7*n2 + 47*n + 6 + n |
このブロックは、Simulink® HDL ワークフロー アドバイザーを使用した HDL コード生成をサポートしています。例については、Simulink モデルからの HDL コード生成と FPGA 合成 (HDL Coder)およびImplement Digital Downconverter for FPGA (DSP HDL Toolbox)を参照してください。
この例のデータは、Xilinx® Zynq® UltraScale™ + RFSoC ZCU111 評価ボードでブロックを合成して生成したものです。合成ツールは Vivado® v.2020.2 (win64) です。
合成に使用したパラメーターは次のとおりです。
ブロック パラメーター:
m = 16n = 16p = 1行列 A の次元: 16 行 16 列
行列 B の次元: 16 行 1 列
入力データ型:
sfix16_En14ターゲット周波数: 250 MHz
次の各表に、配置配線後のリソース使用状況の結果とタイミングの概要をそれぞれ示します。
| リソース | 使用 | 使用可能 | 使用率 (%) |
|---|---|---|---|
| CLB LUT | 13653 | 425280 | 3.21 |
| CLB レジスタ | 15739 | 850560 | 1.85 |
| DSP | 4 | 4272 | 0.09 |
| ブロック RAM タイル | 0 | 1080 | 0.00 |
| URAM | 0 | 80 | 0.00 |
| 値 | |
|---|---|
| 要件 | 4 ns |
| データ パス遅延 | 3.468 ns |
| スラック | 0.427 ns |
| クロック周波数 | 279.88 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 | 生成されたコードに挿入する出力パイプライン ステージ数。分散型パイプラインと制約付き出力パイプラインでは、これらのレジスタを移動できます。既定の設定は |
固定小数点データ型のみをサポートします。
バージョン履歴
R2020a で導入参考
ブロック
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)
