主要内容

实现硬件高效的实突发无q QR分解

这个例子展示了如何使用Real Burst Q-less QR decomposition块实现一个硬件高效的Q-less QR分解。

经济尺寸Q-less QR分解

Real Burst Q-less QR分解块执行求解矩阵方程A'AX = B的第一步,将A就地转换为上三角R,然后求解转换后的系统R'RX = B,其中R'R = A'A。

定义矩阵维度

指定矩阵A中的行数和列数。

M = 5;矩阵A中的行数N = 3;矩阵A中的列数

生成矩阵A

使用helper函数realUniformRandomArray生成一个随机矩阵a,使得a的元素在-1到+1之间,且a是满秩的。

rng (“默认”) A = fixed.example.realUniformRandomArray(-1,1,m,n);

选择定点数据类型

使用helper函数qlessqrFixedpointTypes为矩阵A选择定点数据类型,保证在将A in-place转换为R时不发生溢出。

max_abs_A = 1;max(A(:))的上限precisionBits = 24;%精度位数T = fixed.qlessqrFixedpointTypes(m,max_abs_A,precisionBits);A = cast(A,“喜欢”, T.A);

打开模型

模型=“RealBurstQlessQRModel”;open_system(模型);

AMBA AXI握手过程

该模型中的Data Handler子系统以实矩阵A作为输入。它使用AMBA AXI握手协议将A行发送到QR Decomposition块。的validIn信号表示数据可用。的准备好了信号表示该块可以接受该数据。数据的传输只发生在两个validIn而且准备好了信号很高。您可以在Data Handler中为A行中的传送设置延迟,以模拟上游块的处理时间。validOut时,数据处理程序的信号保持高rowDelay设置为0因为这表明数据处理程序总是有可用的数据。

在模型工作区中设置变量

使用helper函数setModelWorkspace将上面定义的变量添加到模型工作区。这些变量对应于Real Burst Q-less QR Decomposition块的块参数。

numSamples = 1;样本矩阵的个数rowDelay = 1;在A行之间进料的时钟周期延迟%fixed.example.setModelWorkspace(模型,“一个”一个,“米”米,“n”n...“regularizationParameter”0,...“numSamples”numSamples,“rowDelay”, rowDelay);

模拟模型

Out = sim(型号);

从输出数据构造解决方案

Real Burst无q QR分解块每次输出一行数据。当输出结果行时,块设置validOut为true。矩阵R的行以相反的顺序输出以适应反向替换,因此必须重新构造数据以解释结果。要从输出数据重建矩阵R,请使用helper函数qlessqrModelOutputToArray

R = fixed.example.qlessqrModelOutputToArray(out.R,m,n,numSamples);

R是一个上三角矩阵。

R
R = 1.5379 0.0432 -0.1395 0 1.5978 0.4742 0 0 1.5192 DataTypeMode:定点:二进制点缩放signdness: Signed WordLength: 28 FractionLength: 24
isequal (R, triu (R))
Ans =逻辑1

验证输出的准确性

为了评估真实爆发无q QR分解块的准确性,计算相对误差。

relative_error = norm(double(R'*R - A'*A))/norm(double(A'*A)))
Relative_error = 8.2641e-07

抑制mlint警告。

% #好< * NOPTS >