主要内容

实现硬件高效的复杂突发QR分解

这个例子展示了如何使用Complex Burst QR分解块实现硬件高效的QR分解。

经济规模QR分解

复爆发QR分解块首先求解最小二乘矩阵方程AX = B,将A in-place变换为R, B in-place变换为C = Q'B,然后求解变换后的系统RX = C,其中QR为A的正交三角分解。

为了计算独立的QR分解,本例将B设置为单位矩阵,以便Complex Burst QR分解块的输出是上三角R和C = Q'。

定义矩阵维度

指定矩阵A和B的行数,矩阵A的列数和矩阵B的列数。本例将B设为与矩阵A的行数相同大小的单位矩阵。

M = 10;矩阵A和B中的行数%N = 3;矩阵A中的列数P = m;%矩阵B中的列数

生成矩阵A和B

使用helper函数complexUniformRandomArray生成一个随机矩阵a,使得a元素的实部和虚部在-1和+1之间,并且a是满秩的。矩阵B是单位矩阵。

rng (“默认”) A = fixed.example.complexUniformRandomArray(-1,1,m,n);B =眼睛(m);

选择定点数据类型

使用helper函数qrFixedpointTypes为矩阵A和矩阵B选择定点数据类型,保证在A in-place转换为R和B in-place转换为C = Q'B时不发生溢出。

A元素的实部和虚部在-1和1之间,因此任何元素的最大可能绝对值是根号2。

max_abs_A =√(2);max(A(:))的上限max_abs_B = 1;max(B(:))的上限precisionBits = 24;%精度位数T = fixed.qrFixedpointTypes(m,max_abs_A,max_abs_B,precisionBits);A = cast(A,“喜欢”, T.A);B = complex(cast(B,“喜欢”、肺结核));

打开模型

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

该模型中的Data Handler子系统以复杂矩阵A和B作为输入。它使用AMBA AXI握手协议将A行和B行发送到QR块。的validIn信号表示数据可用。的准备好了信号表示该块可以接受该数据。数据的传输只发生在两个validIn而且准备好了信号很高。您可以在Data Handler中设置a行和B行的输入之间的延迟,以模拟上游块的处理时间。validIn保持高rowDelay设置为0,因为这表示数据处理程序始终有可用数据。

在模型工作区中设置变量

使用helper函数setModelWorkspace将上面定义的变量添加到模型工作区。这些变量对应于Complex Burst QR分解块的块参数。

numSamples = 1;样本矩阵的个数rowDelay = 1;在A行和B行进料之间的时钟周期延迟%fixed.example.setModelWorkspace(模型,“一个”一个,“B”B“米”米,“n”n“p”、磷、...“numSamples”numSamples,“rowDelay”, rowDelay);

模拟模型

Out = sim(型号);

从输出数据构造解决方案

Complex Burst QR分解块每次输出一行数据。当输出结果行时,块设置validOut为true。矩阵R和C的行以相反的顺序输出,以适应反向替换,因此必须重新构造数据以解释结果。要从输出数据重构矩阵R和C,请使用helper函数qrModelOutputToArray

[C,R] = fixed.example.qrModelOutputToArray(out.C,out.R,m,n,p,numSamples);

提取经济规模的Q

块计算C = Q'B。在这个例子中,B是单位矩阵,所以Q = C'是QR分解的经济规模正交因子。

Q = c ';

验证Q是正交的,R是上三角的

Q是正交的,所以Q'Q是舍入内的单位矩阵。

I = q '* q
I = 1.0000 + 0.0000i -0.0000 + 0.0000i -0.0000 - 0.0000i 1.0000 + 0.0000i -0.0000 + 0.0000i -0.0000 - 0.0000i 1.0000 + 0.0000i DataTypeMode:定点:二进制点缩放signness: Signed WordLength: 62 FractionLength: 48

R是一个上三角矩阵。

R
R = 3.1655 + 0.0000i 0.4870 + 1.1980i 0.1466 - 0.9092i 0.0000 + 0.0000i 2.2184 + 0.0000i -0.2159 - 0.0972i 0.0000 + 0.0000i 0.0000 + 0.0000i 2.2903 + 0.0000i DataTypeMode:定点:二进制点缩放signiness: Signed WordLength: 29 FractionLength: 24
isequal (R, triu (R))
Ans =逻辑1

验证输出的准确性

为了评估复杂爆发QR分解块的准确性,计算相对误差。

相对误差= norm(double(Q*R - A))/norm(double(A))
Relative_error = 1.2460e-06

抑制mlint警告。

% #好< * NOPTS >
Baidu
map