主要内容

实现Hardware-Efficient复杂Partial-Systolic矩阵解决使用Q-less QR分解

这个例子展示了如何实现hardware-efficient解决的复数矩阵方程使用复杂Partial-Systolic 'AX = B矩阵解决使用Q-less QR分解块。

向前和向后替换

当一个上三角因素是准备好了,然后向前和向后替换计算与当前输入B产生输出X。

$ $ X = R_k \ setminus (R_k \ setminus B) $ $

定义矩阵维度

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

m = 30;%的行数n = 10;%的列数和行Bp = 1;%的列数BnumInputs = 3;%的A和B matricies数量

生成矩阵

对于这个示例,使用helper函数complexRandomQlessQRMatrices生成随机矩阵A和B 'AX = B的问题。这样生成的矩阵元素的实部和虚部的A和B - 1和+ 1之间,和一个满秩。

rng (“默认”)[A, B] = fixed.example.complexRandomQlessQRMatrices (m, n, p);如果numInputs > 1我= 2:numInputs [Atemp Btemp] = fixed.example.complexRandomQlessQRMatrices (m, n, p);=猫(3个Atemp);B =猫(3 B Btemp);结束结束

选择定点数据类型

使用辅助函数complexQlessQRMatrixSolveFixedpointTypes选择输入矩阵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.complexQlessQRMatrixSolveFixedpointTypes (m, n, max_abs_A、max_abs_B precisionBits);一个=投(,“喜欢”,T.A);B =投(B,“喜欢”、肺结核);OutputType = fixed.extractNumericType (T.X);

打开模型

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

安巴AXI握手过程

在这个模型中,数据处理程序子系统需要复杂的矩阵A和B作为输入。它发送的行和完整的B矩阵QR分解块使用安巴阿喜的握手协议。的validIn信号表明当数据是可用的。的准备好了信号表示可以接受的数据块。数据传输发生只有当了validIn准备好了信号是高。你可以设置延迟喂养的行和喂养在B矩阵数据处理程序来模拟上游块的处理时间。validInAvalidInB保持高位时aDelaybDelay0因为这表明数据处理程序总是可用的数据。当所有矩阵A和B发送,数据处理程序循环回到第一个A和B矩阵。

异步矩阵解算器

这个街区异步操作。首先,Q-less输入矩阵QR分解执行,由此产生的R矩阵是放到一个缓冲区。然后,向前向后替代块使用输入B矩阵和缓冲矩阵计算R 'RX = B,因为R和B矩阵分别存储在缓冲区中,上游Q-less QR分解块和下游向前向后替代块可以独立运行。向前向后替代块开始处理当第一个R和B矩阵是可用的。然后它运行连续使用最新的缓冲R和B矩阵,不管Q-less QR分解块的状态。例如,如果上游块停止提供A和B矩阵,向前向后替代块继续使用R的最后对生成相同的输出和B矩阵。

数据处理程序发送A和B矩阵的QR分解迭代块。发送最后一个矩阵后,数据处理程序重置其内部计数器和发送一个矩阵。B矩阵以类似的方式处理。

设置变量在模型中工作区

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

numOutputs = 1;%的记录输出aDelay = 1;%延迟喂养的行之间的时钟周期bDelay = 1;%延迟喂养B矩阵之间的时钟周期fixed.example.setModelWorkspace(模型,“一个”一个,“B”B“米”米,“n”n“p”、磷、“regularizationParameter”0,“aDelay”aDelay,“bDelay”bDelay,“numOutputs”numOutputs,“OutputType”,OutputType);

模拟模型

= sim(模型);

构建解决方案从输出数据

复杂Partial-Systolic矩阵解决使用Q-less QR分解块输出矩阵X在每个时间步。一个有效的结果矩阵输出时,块集validOut为true。

X = out.X;

验证输出结果的准确性

评估的准确性复杂Partial-Systolic矩阵解决使用Q-less QR分解块,计算相对误差。选择最后一个模拟的输出。

双(X = X(:,:,最后));

最后输出同步X输入通过输入A和B产生。

一个=双(A);B =双(B);relative_errors = 0(大小(A, 3),大小(B, 3));k = 1:尺寸(3)g = 1:尺寸(B, 3) relative_errors (k, g) =规范((:,:,k)”* (:,:, k) * X - B (:,:, g)) /规范(B (:,:, g));结束结束(因为,用)=找到(relative_errors = = min (relative_errors [],“所有”))% #好< NOPTS >relative_error =标准(双((:,:,因为)*(:,:,因为)* X - B(:,:,用)))/规范(双(B(:,:,用)))% #好< NOPTS >
因为= 1用= 2 relative_error = 6.1162 e-05