真正实现Hardware-Efficient破裂QR分解
这个例子展示了如何实现一个hardware-efficient QR分解使用真正的破灭QR分解块。
经济规模QR分解
真正的破灭QR分解块执行的第一步解决最小二乘矩阵方程AX = B转换一个就地R和B就地C = Q ' B,然后解决了转换系统RX = C, QR的orthogonal-triangular分解。
计算独立QR分解,这个例子集B单位矩阵,这样的输出真正的破灭QR分解块上三角R和C =问”。
定义矩阵维度
指定在A和B矩阵的行数,列数的矩阵A, B和矩阵的列数。这个例子集B是单位矩阵的行数相同的大小。
m = 10;%的行数矩阵A和Bn = 3;%的列数矩阵Ap = m;%的列数矩阵B
生成矩阵A和B
使用辅助函数realUniformRandomArray
生成一个随机矩阵的元素是1和+ 1之间,和一个满秩。矩阵B是单位矩阵。
rng (“默认”)= fixed.example.realUniformRandomArray (1, 1, m, n);B =眼(m);
选择定点数据类型
使用辅助函数qrFixedpointTypes
选择定点数据类型矩阵A和B,保证没有溢出的转换将发生在就地R C和B就地=问' B。
max_abs_A = 1;%上限马克斯(abs ((:))max_abs_B = 1;%上限马克斯(abs (B (:))precisionBits = 24;%的比特数的精度T = fixed.qrFixedpointTypes (m, max_abs_A, max_abs_B precisionBits);一个=投(,“喜欢”,T.A);B =投(B,“喜欢”、肺结核);
打开模型
模型=“RealBurstQRModel”;open_system(模型);
这个模型的数据处理程序子系统需要真正的矩阵A和B作为输入。它发送行A和B的QR块使用安巴AXI握手协议。的validIn
信号表明当数据是可用的。的准备好了
信号表示可以接受的数据块。数据传输发生只有当了validIn
和准备好了
信号是高。你可以设置之间的延迟喂养在a和B的行数据处理程序来模拟上游块的处理时间。validIn
仍然很高时rowDelay
设置为0,因为这表明数据处理程序总是可用的数据。
设置变量在模型中工作区
使用辅助函数setModelWorkspace
上面定义的变量添加到模型空间。这些变量对应的块参数实际破裂QR分解块。
numSamples = 1;%的样本矩阵rowDelay = 1;%之间的时钟周期延迟喂养在成排的A和Bfixed.example.setModelWorkspace(模型,“一个”一个,“B”B“米”米,“n”n“p”、磷、…“numSamples”numSamples,“rowDelay”,rowDelay);
模拟模型
= sim(模型);
构建解决方案从输出数据
真正的破灭QR分解输出数据块一次一行。当一个结果行输出,块集validOut
为true。矩阵的行R和C是用倒序输出适应替换回去,所以你必须重建数据解释结果。重建矩阵R和C从输出数据,使用helper函数qrModelOutputToArray
。
[C R] = fixed.example.qrModelOutputToArray (out.C out.R, m, n, p, numSamples);
提取大包装问
块计算C = Q ' b。在这个例子中,B是单位矩阵,所以Q = C”是大包装正交因素的QR分解。
Q = C ';
验证Q正交和R是上三角
问orothogonal,所以问'Q舍入内的单位矩阵。
我=问' * Q
I = 1.0000 -0.0000 -0.0000 -0.0000 1.0000 -0.0000 -0.0000 -0.0000 1.0000 DataTypeMode:定点:二进制扩展Signedness:签了字:62 FractionLength: 48
R是一个上三角矩阵。
R
R = 2.2180 0.8559 -0.5607 2.0578 - -0.4017 0 0 1.7117 DataTypeMode:定点:二进制扩展Signedness:签了字:29 FractionLength: 24
isequal (R, triu (R))
ans =逻辑1
验证输出结果的准确性
评估的准确性真正破灭QR分解,计算相对误差。
relative_error =标准(双(Q * R - A)) /规范(双(一))
relative_error = 1.5886 e-06
抑制mlint警告。
% #好< * NOPTS >