利用无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