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

这个例子演示了如何在Simulink®中使用硬件高效的MATLAB®代码计算复杂矩阵的QR分解。金宝app该模型在QR分解算法的各个步骤中共享计算资源。因此,它比完全流水线方法使用更少的芯片资源,同时牺牲了一些总吞吐量。

用QR分解求解矩阵方程

在求解矩阵方程时,很少(如果有的话)需要计算矩阵[1][3]的逆。复突发QR分解模块为求解该方程提供了一种有效的硬件方法

$ Ax = B $$

在哪里一个美元是一个复杂的m x n矩阵,x美元是一个复杂的n x p矩阵,B美元是一个复杂的m x p矩阵。这个方程可以转换成这种形式

$ Rx = Q^H B $

通过一系列的正交变换。在这里,R美元是一个复杂的m x n上三角矩阵。问美元是一个复杂的m x m正交矩阵QR =美元美元.复突发QR分解块只保留非零行R美元,以及相应的行问^ H B美元

QR分解非常适合于定点架构,因为它可以完全通过Givens旋转来执行。它们在CORDIC算法方面有一个有效的定点实现。关于定点QR分解算法的更多细节,请参见使用CORDIC进行QR分解

首先,打开Simulink模型金宝appfxpdemo_complex_burst_QR_model

open_system (“fxpdemo_complex_burst_QR_model”);

该模型适用于定点、双精度、单精度和比例双精度数据类型。在Simulink中实现了该算法的一个完全流水线版本。金宝app看到在收缩阵列中使用CORDIC实现硬件高效的QR分解

复杂突发QR分解的输入参数

复突发QR分解块有四个输入参数。这个块的掩码如下所示:

您必须在MATLAB工作空间中将输入数据分配给变量。要自定义该算法,请根据以下部分中使用的过程更改数据。

定义矩阵维度

模型的体系结构分配了最少的内存来存储执行QR分解所需的数据。因此,在编译时必须知道输入矩阵的大小。在这里,是复数矩阵的行数吗一个Bn列数是多少一个,p列数是多少B

此外,由于块可以处理无限数量的矩阵串联分解,因此指定了若干个样本。当所有的样本都被使用后,模型终止。

m = 4;n = 4;p = 4;num_samples = 100;

定义输入数据类型

在生成输入数据之前,指定矩阵数据的数据类型非常重要,如下所示。本例使用16位字长和小数类型的有符号定点类型。对于复杂的4 × 4矩阵,输出类型需要额外的3位,以适应输入数据的整数部分的数据增长;看到用硬件高效算法求解复值线性方程组为进一步的细节。

word_length = 16;qr_growth_bits = 3;Fraction_length = word_length - 1;Nt = numerictype(1,word_length + qr_growth_bits,fraction_length); / /计算长度

定义CORDIC迭代次数

Givens旋转的CORDIC近似是一种迭代算法,它在每次迭代时提供额外的位精度。对于有符号的定点数据类型,当执行的迭代次数比字长少1时,可以达到最大可能的精度。

NumberOfCORDICIterations = nt.WordLength - 1;

初始化随机数据

本例中的数据处理程序采用复杂矩阵一个B作为输入。在这个例子中,一个B定义为从-1到1的均匀分布中抽取的随机矩阵元素。请注意,一个B都定义为三维数组,其中每个样本矩阵存储在前两个维中。

A = fi(complex(2*rand(m,n,num_samples) - 1,2 *rand(m,n,num_samples) - 1),nt);B = fi(complex(2*rand(m,p,num_samples) - 1, 2*rand(m,p,num_samples) - 1),nt);

传输数据到复杂突发QR分解

准备好了端口触发数据处理程序子系统。当准备好了是high,块断言validIn然后发送下一行一个B箱子.传输数据的协议允许在任何时候发送数据准备好了为高,确保所有数据均已处理。如果数据是在准备好了不高,就不会加工。

处理输出

复突发QR分解一次输出一行数据。每当块输出一个结果行,它就断言validOut.请注意,溃败输出R美元,而cOut输出问^ HB美元.这些行以相反的顺序输出,因为这是使用它们进行回替换的自然顺序。在本例中,它们被保存为(m * num_samples)xn矩阵,行按接收顺序排列。

模拟

sim卡fxpdemo_complex_burst_QR_model

从输出数据重建解决方案金宝搏官方网站

因为数据是以相反的顺序输出的,所以必须重构数据来解释结果。下面的代码将数据按正确的顺序排列。

C =细胞(1、num_samples);细胞(R = 1, num_samples);2 = 1: num_samples C {2} = flipud (C_Out ((ii-1) * m + 1: 2 * m:));R{ii} = flipud(R_Out((ii-1)*m + 1:ii*m,:))); / /输出结束

评估结果的准确性

为了评估复突发QR分解块的准确性,检验使用复突发QR分解块的矩阵方程的解与使用MATLAB内置的双精度反解得到的解之间的差异的大小。绘制每个样品的绝对误差和条件编号。数据表明,解的精度跟踪条件数,如预期[2]。

num_samples xAct =细胞(1);num_samples xExp =细胞(1);num_samples xErr = 0 (1);num_samples condNumber = 0 (1);ii = 1:num_samples xAct{ii} = double(R{ii})\double(C{ii});xExp{2} =双((:,:ii)) \双(B (:,: ii));xErr(ii) = norm(xAct{ii} - xExp{ii});condNumber (ii) =电导率(双((:,:ii)));结束图(1)CLF h1 = subplot(2,1,1);持有;h1。YScale =“日志”;情节(xErr)网格标题(“复突发QR分解”的误差);ylabel (“规范(R \ \ C - A \ \ B)”);h2 =次要情节(2,1,2);持有;h2。YScale =“日志”;情节(condNumber);网格标题(“样本的条件数量”);ylabel (的电导率(A)”);包含(测试点的);linkaxes (h1, h2,“x”);

关闭模式

close_systemfxpdemo_complex_burst_QR_model

参考文献

George E. Forsythe, M.A. Malcom和Cleve B. Moler。数学计算的计算机方法。Englewood Cliffs, n.j.: Prentice-Hall, 1977。

Cleve B. Moler。克里夫的角落:矩阵的条件数是多少?, The MathWorks, Inc. 2017。

Cleve B. Moler。用MATLAB进行数值计算。暹罗,2004年。isbn: 978-0-898716-60-3。