主要内容

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

这个例子展示了如何使用QR分解块实现复值矩阵方程AX=B的硬件高效最小二乘解。

定义矩阵维度

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

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

生成随机最小二乘矩阵

对于本例,使用helper函数complexRandomLeastSquaresMatrices为最小二乘问题AX=B生成随机矩阵A和B。生成的矩阵是这样的:A和B元素的实部和虚部在-1和+1之间,A的秩为r。

rng (“默认”) r = 3;% A级[A,B] = fixed.example.complexRandomLeastSquaresMatrices(m,n,p,r);

选择定点数据类型

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

A和B元素的实部和虚部在-1和1之间,因此任何元素的最大可能绝对值是根号2。

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

打开模型

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

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

在模型工作区中设置变量

使用helper函数setModelWorkspace将上面定义的变量添加到模型工作区。这些变量对应于使用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(型号);

从输出数据构造解决方案

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

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

验证输出的准确性

为了评价利用QR分解块求解复杂突发矩阵的精度,计算相对误差。

相对误差= norm(double(A*X - B))/norm(double(B))% #好< NOPTS >
Relative_error = 3.0528e-06