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