主要内容

真正实现Hardware-Efficient Partial-Systolic矩阵解决使用QR分解

这个例子展示了如何实现一个实值hardware-efficient最小二乘解矩阵方程AX = B使用真正的Partial-Systolic矩阵解决使用QR分解块。

定义矩阵维度

指定的行数矩阵A和B,在矩阵的列数和列数矩阵B。

m = 300;%的行数矩阵A和Bn = 10;%的列数矩阵Ap = 1;%的列数矩阵B

生成随机矩阵最小二乘

对于这个示例,使用helper函数realRandomLeastSquaresMatrices生成随机矩阵A和B AX = B的最小二乘问题。矩阵生成这样的元素A和B - 1和+ 1之间,和一个满秩。

rng (“默认”)[A, B] = fixed.example.realRandomLeastSquaresMatrices (m, n, p);

选择定点数据类型

使用辅助函数realQRMatrixSolveFixedpointTypes选择输入矩阵A和B,定点数据类型和输出X,这样有一个低概率的计算溢出。

max_abs_A = 1;%上限马克斯(abs ((:))max_abs_B = 1;%上限马克斯(abs (B (:))precisionBits = 24;%的比特数的精度T = fixed.realQRMatrixSolveFixedpointTypes (m, n, max_abs_A、max_abs_B precisionBits);一个=投(,“喜欢”,T.A);B =投(B,“喜欢”、肺结核);OutputType = fixed.extractNumericType (T.X);

打开模型

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

这个模型的数据处理程序子系统需要真正的矩阵A和B作为输入。它发送行A和B的QR块使用安巴AXI握手协议。的validIn信号表明当数据是可用的。的准备好了信号表示可以接受的数据块。数据传输发生只有当了validIn准备好了信号是高。你可以设置之间的延迟喂养在a和B的行数据处理程序来模拟上游块的处理时间。validIn仍然很高时rowDelay设置为0因为这表明数据处理程序总是可用的数据。

设置变量在模型中工作区

使用辅助函数setModelWorkspace上面定义的变量添加到模型空间。这些变量对应的块参数实际Partial-Systolic矩阵解决使用QR分解块。

numSamples = 1;%的样本矩阵rowDelay = 1;%之间的时钟周期延迟喂养在成排的A和Bfixed.example.setModelWorkspace(模型,“一个”一个,“B”B“米”米,“n”n“p”、磷、“regularizationParameter”0,“numSamples”numSamples,“rowDelay”rowDelay,“OutputType”,OutputType);

模拟模型

= sim(模型);

构建解决方案从输出数据

真正的Partial-Systolic矩阵解决使用QR分解输出数据块一次一行。当一个结果行输出,块集validOut为true。X的行输出的顺序计算,最后一排第一,所以你必须重建数据解释结果。重建矩阵X从输出数据,使用helper函数matrixSolveModelOutputToArray

X = fixed.example.matrixSolveModelOutputToArray (out.X, n, p, numSamples);

验证输出结果的准确性

评估的准确性真正Partial-Systolic矩阵解决使用QR分解块,计算相对误差。

relative_error =标准(双(A * X - B)) /规范(双(B))% #好< NOPTS >
relative_error = 2.3952 e-05