实现Hardware-Efficient复杂的破裂Q-less QR分解
这个例子展示了如何实现一个hardware-efficient Q-less QR分解使用复杂的破裂Q-less QR分解块。
经济规模Q-less QR分解
复杂的破裂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);
打开模型
模型=“ComplexBurstQlessQRModel”;open_system(模型);
安巴AXI握手过程
在这个模型中,数据处理程序子系统需要复杂的矩阵作为输入。它发送行QR分解块使用的安巴AXI握手协议。的validIn
信号表明当数据是可用的。的准备好了
信号表示可以接受的数据块。数据传输发生只有当了validIn
和准备好了
信号是高。你可以设置延迟喂养的行数据处理程序的模拟上游块的处理时间。validOut
仍然很高,当信号的数据处理程序rowDelay
被设置为0
因为这表明数据处理程序总是可用的数据。
设置变量在模型中工作区
使用辅助函数setModelWorkspace
上面定义的变量添加到模型空间。这些变量对应的块参数复杂破裂Q-less QR分解块。
numSamples = 1;%的样本矩阵rowDelay = 1;%延迟喂养的行之间的时钟周期fixed.example.setModelWorkspace(模型,“一个”一个,“米”米,“n”n…“numSamples”numSamples,“rowDelay”,rowDelay);
模拟模型
= sim(模型);
构建解决方案从输出数据
复杂的破裂Q-less QR分解输出数据块一次一行。当一个结果行输出,块集validOut
为true。矩阵的行R在相反的顺序输出,以适应替换回去,所以你必须重建数据解释结果。从输出数据重建矩阵R,使用helper函数qlessqrModelOutputToArray
。
R = fixed.example.qlessqrModelOutputToArray (out.R, m, n, numSamples);
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
验证输出结果的准确性
评估复杂的破裂的准确性Q-less QR分解,计算相对误差。
relative_error =标准(双(R * R -一个“*))/规范(双(“*))
relative_error = 8.3255 e-07
抑制mlint警告。
% #好< * NOPTS >