实现硬件高效的实突发无q QR分解
这个例子展示了如何使用Real Burst Q-less QR decomposition块实现一个硬件高效的Q-less QR分解。
经济尺寸Q-less QR分解
Real Burst Q-less QR分解块执行求解矩阵方程A'AX = B的第一步,将A就地转换为上三角R,然后求解转换后的系统R'RX = B,其中R'R = A'A。
定义矩阵维度
指定矩阵A中的行数和列数。
M = 5;矩阵A中的行数N = 3;矩阵A中的列数
生成矩阵A
使用helper函数realUniformRandomArray
生成一个随机矩阵a,使得a的元素在-1到+1之间,且a是满秩的。
rng (“默认”) A = fixed.example.realUniformRandomArray(-1,1,m,n);
选择定点数据类型
使用helper函数qlessqrFixedpointTypes
为矩阵A选择定点数据类型,保证在将A in-place转换为R时不发生溢出。
max_abs_A = 1;max(A(:))的上限precisionBits = 24;%精度位数T = fixed.qlessqrFixedpointTypes(m,max_abs_A,precisionBits);A = cast(A,“喜欢”, T.A);
打开模型
模型=“RealBurstQlessQRModel”;open_system(模型);
AMBA AXI握手过程
该模型中的Data Handler子系统以实矩阵A作为输入。它使用AMBA AXI握手协议将A行发送到QR Decomposition块。的validIn
信号表示数据可用。的准备好了
信号表示该块可以接受该数据。数据的传输只发生在两个validIn
而且准备好了
信号很高。您可以在Data Handler中为A行中的传送设置延迟,以模拟上游块的处理时间。validOut
时,数据处理程序的信号保持高rowDelay
设置为0
因为这表明数据处理程序总是有可用的数据。
在模型工作区中设置变量
使用helper函数setModelWorkspace
将上面定义的变量添加到模型工作区。这些变量对应于Real Burst Q-less QR Decomposition块的块参数。
numSamples = 1;样本矩阵的个数rowDelay = 1;在A行之间进料的时钟周期延迟%fixed.example.setModelWorkspace(模型,“一个”一个,“米”米,“n”n...“regularizationParameter”0,...“numSamples”numSamples,“rowDelay”, rowDelay);
模拟模型
Out = sim(型号);
从输出数据构造解决方案
Real Burst无q QR分解块每次输出一行数据。当输出结果行时,块设置validOut
为true。矩阵R的行以相反的顺序输出以适应反向替换,因此必须重新构造数据以解释结果。要从输出数据重建矩阵R,请使用helper函数qlessqrModelOutputToArray
.
R = fixed.example.qlessqrModelOutputToArray(out.R,m,n,numSamples);
R是一个上三角矩阵。
R
R = 1.5379 0.0432 -0.1395 0 1.5978 0.4742 0 0 1.5192 DataTypeMode:定点:二进制点缩放signdness: Signed WordLength: 28 FractionLength: 24
isequal (R, triu (R))
Ans =逻辑1
验证输出的准确性
为了评估真实爆发无q QR分解块的准确性,计算相对误差。
relative_error = norm(double(R'*R - A'*A))/norm(double(A'*A)))
Relative_error = 8.2641e-07
抑制mlint警告。
% #好< * NOPTS >