主要内容

实现Hardware-Efficient复杂Partial-Systolic矩阵与对角加载解决使用QR分解

这个例子展示了如何实现一个hardware-efficient的复数矩阵方程的最小二乘解

左$ $ \[开始\{数组}{c} \λ我\ \ \{数组}\右]X = & # xA;左\[开始\{数组}}{c O \ \ B \结束数组{}\]$ $

使用复杂Partial-Systolic矩阵解决使用QR分解块。这种方法被称为对角加载\λ美元被称为一个正则化参数。

对角加载方法

当你将正则化参数设置为非零值块复杂Partial-Systolic矩阵解决使用QR分解,然后块计算最小二乘解

左$ $ \[开始\{数组}{c} \λ我\ \ \{数组}\右]X = & # xA;左\[开始\{数组}}{c O \ \ B \结束数组{}\]$ $

在哪里我美元是一个n阶单位矩阵O美元是一个数组大小n-by-p 0。

这种方法被称为对角加载\λ美元被称为一个正则化参数。熟悉课本最小二乘解这个方程如下,导出的方程两边乘以美元[\λ我\;美元的']和左边的逆矩阵。

$ $间{LS} =(我+萨那\λ^ 2)^ {1}' b。$ $

复杂Partial-Systolic矩阵解决使用QR分解块计算解决方案有效地没有计算的逆计算QR分解,转变

左$ $ \[开始\{数组}{c} \λ我\ \ \{数组}\右]$ $

就地上三角R和转换

左$ $ \[开始\{数组}}{c O \ \ B \结束数组{}\]$ $

就地来

左$ $ C =问' \[开始\{数组}}{C O \ \ B \结束数组{}\]$ $

和解决转换方程RX =美元加元

定义矩阵维度

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

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

定义正则化参数

正则化参数时零块复杂Partial-Systolic矩阵解决使用QR分解,然后对角加载的方法。当正则化参数为零,然后方程减少常规最小二乘方程AX = B。

regularizationParameter = 1 e - 3;

块的参数

生成随机矩阵最小二乘

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

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

选择定点数据类型

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

元素的实部和虚部的A和B是1 - 1,因此,最大可能的任何元素的绝对值是sqrt (2)。

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

打开模型

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

在这个模型中,数据处理程序子系统需要复杂的矩阵A和B作为输入。的准备好了端口触发数据处理程序。后发送一个真正validIn信号,可能会有一些延迟准备好了设置为false。当数据处理程序检测到的前缘准备好了信号,块集validIn为true并发送下一行的A和b,该协议允许数据发送时的前缘准备好了检测到信号时,确保所有的数据处理。

设置变量在模型中工作区

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

numSamples = 1;%的样本矩阵fixed.example.setModelWorkspace(模型,“一个”一个,“B”B“米”米,“n”n“p”、磷、“regularizationParameter”regularizationParameter,“numSamples”numSamples,“OutputType”,OutputType);

模拟模型

= sim(模型);

构建解决方案从输出数据

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

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

验证输出结果的准确性

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

A_lambda = [regularizationParameter *眼(n); A];B_0 =(0(氮、磷);B);relative_error =标准(双(A_lambda * X - B_0)) /规范(双(B_0))% #好< NOPTS >
relative_error = 1.0386 e-04