主要内容

实现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

生成矩阵

使用辅助函数complexUniformRandomArray生成一个随机矩阵的实部和虚部- 1和+ 1之间的元素,和一个满秩。

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

选择定点数据类型

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

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

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

打开模型

模型=“ComplexPartialSystolicQlessQRModel”;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 = 2.1863 + 0.0000我0.6427 - 1.0882 -0.5771 - 0.3089 0.0000 1.8126 + 0.0000 + 0.0000我0.2095 0.0599 0.0000我0.0000 + 0.0000 + 0.0000 + 1.7760 + 0.0000我DataTypeMode:定点:二进制扩展Signedness:签了字:29 FractionLength: 24
isequal (R, triu (R))
ans =逻辑1

验证输出结果的准确性

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

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

抑制mlint警告。

% #好< * NOPTS >