主要内容

真正实现Hardware-Efficient Partial-Systolic Q-less QR分解

这个例子展示了如何实现一个hardware-efficient Q-less QR分解使用真正的Partial-Systolic Q-less QR分解块。

经济规模Q-less QR分解

真正的Partial-Systolic Q-less QR分解块执行的第一步解决矩阵方程'AX = B,将就地转换上三角R,然后解决了转换系统R 'RX = B,在R或=。

定义矩阵维度

指定的行数和列矩阵A。

m = 5;%在矩阵的行数n = 3;%的列数矩阵A

生成矩阵

使用辅助函数realUniformRandomArray生成一个随机矩阵的元素是1和+ 1之间,和一个满秩。

rng (“默认”)= fixed.example.realUniformRandomArray (1, 1, m, n);

选择定点数据类型

使用辅助函数qlessqrFixedpointTypes选择定点矩阵,保证没有溢出的数据类型的转换将发生在就地R。

max_abs_A = 1;%上限马克斯(abs ((:))precisionBits = 24;%的比特数的精度T = fixed.qlessqrFixedpointTypes (m, max_abs_A, precisionBits);一个=投(,“喜欢”,T.A);

打开模型

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

安巴AXI握手过程

这个模型的数据处理程序子系统需要真正的矩阵作为输入。它发送行QR分解块使用的安巴AXI握手协议。的validIn信号表明当数据是可用的。的准备好了信号表示可以接受的数据块。数据传输发生只有当了validIn准备好了信号是高。你可以设置延迟喂养的行数据处理程序的模拟上游块的处理时间。validOut仍然很高,当信号的数据处理程序rowDelay被设置为0因为这表明数据处理程序总是可用的数据。

设置变量在模型中工作区

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

numSamples = 1;%的样本矩阵rowDelay = 1;%延迟喂养的行之间的时钟周期fixed.example.setModelWorkspace(模型,“一个”一个,“米”米,“n”n“numSamples”numSamples,“rowDelay”,rowDelay);

模拟模型

= sim(模型);

构建解决方案从输出数据

真正的Partial-Systolic QR分解块输出矩阵R在每个时间步。一个有效的结果矩阵输出时,块集validOut为true。

R = out.R;

R是一个上三角矩阵。

R
R = 1.5379 0.0432 -0.1395 1.5978 - 0.4742 0 0 1.5192 DataTypeMode:定点:二进制扩展Signedness:签了字:28 FractionLength: 24
isequal (R, triu (R))
ans =逻辑1

验证输出结果的准确性

评估的准确性真正Partial-Systolic Q-less QR分解,计算相对误差。

relative_error =标准(双(R * R -一个“*))/规范(双(“*))
relative_error = 8.2641 e-07

抑制mlint警告。

% #好< * NOPTS >