主要内容

利用无q QR分解实现硬件高效的实突发矩阵求解

这个例子展示了如何使用无q QR分解块实现实值矩阵方程a 'AX=B的硬件高效解决方案。

定义矩阵维度

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

M = 100;A中的行数N = 10;A中的列数和B中的行数P = 1;B中列数的%

生成矩阵

对于本例,使用helper函数realRandomQlessQRMatrices为问题A'AX=B生成随机矩阵A和B。生成的矩阵是这样的:A和B的元素在-1和+1之间,A是满秩的。

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

选择定点数据类型

使用helper函数realQlessQRMatrixSolveFixedpointTypes对输入矩阵A和B选择定点数据类型,对输出矩阵X选择定点数据类型,使计算过程中溢出的概率低。

max_abs_A = 1;max(A(:))的上限max_abs_B = 1;max(B(:))的上限precisionBits = 24;%精度位数T = fixed.realQlessQRMatrixSolveFixedpointTypes(m,n,max_abs_A,max_abs_B,precisionBits);A = cast(A,“喜欢”, T.A);B = cast(B,“喜欢”、肺结核);OutputType = fixed.extractNumericType(T.X);

打开模型

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

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

在模型工作区中设置变量

使用helper函数setModelWorkspace将上面定义的变量添加到模型工作区。这些变量对应于使用无q QR分解块的实爆发矩阵求解的块参数。

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

模拟模型

Out = sim(型号);

从输出数据构造解决方案

使用无q QR分解块的实爆发矩阵求解每次输出一行数据。当输出结果行时,块设置validOut为true。X的行按计算顺序输出,最后一行先输出,因此必须重新构造数据以解释结果。要从输出数据重建矩阵X,请使用helper函数matrixSolveModelOutputToArray

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

验证输出的准确性

为了评估使用无q QR分解块的实爆发矩阵求解的精度,计算相对误差。

relative_error = norm(double(A'*A*X - B))/norm(double(B)))% #好< NOPTS >
Relative_error = 5.5603e-04