基于Arria10硬浮点的矩阵分解

【时间:2017 年 11 月 01 日, 来源:本站原创, 作者:Jerry Zheng】

一、概述

QR矩阵分解( qrdQRD),也称为正交矩阵三角化,基本原理是将矩阵( A )的分解为正交矩阵(Q )和上三角矩阵( R)。QRD是求解最小二乘问题和联立方程的有效方法。QRD在无线应用有很多的有效应用场景,如在OFDM的MIMO系统通常需要对对个低阶矩阵(如4*4矩阵)求逆,这种类型的系统通常需要采用典型的非递归技术如QRD。

二、QRD算法介绍

参考如下方程:

AY = Z

其中:

    A,Y,Z均为矩阵,A为N*N的方阵,Y,Z为N阶向量。A与Z是已知的,Y是未知的,最终目的就是确定Y 矩阵的值。

将矩阵A用QR替换得到如下结果:

(QR)Y= Z;

将Q移到方程右边得到如下结果:

RY= Q-1 Z;

Q是一个正交(酉)矩阵,因此Q -1等于复数Q的共轭转置,因此便可得到如下方程:

RY= Z';

其中

Z' = Q-1 Z

   实现QRD算法包括gram - Schmidt正交,Householder变换和Givens转换,由于Givens转换具有并行化的优势,下面主要介绍基于Givens转换的QRD实现。

   我们可以采用每个单元均实现Givens转换的结构实现QRD,图1显示了不同输入如何反馈到不同收缩阵列的不同列。

 

     当所有输入数据输入到收缩阵列并通过数组传播,数组所有列中的值(不包括最后一列)
提供上三角R矩阵。最后一列提供Z’的值,及Q-1Z的值。确定R跟Z’后便可以求解方程
RY = Z' 得到Y.

三、A10 DSP模块特性


Arria10 可变精度 DSP Block同时支持浮点运算及定点运算 ,浮点 运算时特性:

 

1、 完整 硬件结构支持乘法、 加法、 减法、乘加、乘减等浮点运算; 
2、 带累加及动态累加器复位控制浮点乘法;
3、 带加法 或减法 级联的浮点乘法;
4、 浮点复数乘法运算; 
5、 直接向量点积运算; 
6、 脉动 FIR滤波器 ;

 

 

四、QRD算法实现

      下面是4阶方阵QRD Matlab的实现代码,并给出了直接通过Matlab QR分解函数和该算法的结果对比:

m=4;

A = randn(m,m)+i*randn(m,m);

[q,r] =qr(A)    %%Matlab QR分解函数

Q = zeros(m,m);

R = zeros(m,m);

%% k=1

R(1,1) = sqrt(sum(abs(A(:,1)).^2));

Q(:,1) = A(:,1)/R(1,1);

%%  k= 2

R(1,2) = Q(:,1)'*A(:,2);

A(:,2) = A(:,2)-Q(:,1)*R(1,2);

R(2,2) = sqrt(sum(abs(A(:,2)).^2));

Q(:,2) = A(:,2)/R(2,2);

%%  k= 3

R(1,3) = Q(:,1)'*A(:,3);

A(:,3) = A(:,3)-Q(:,1)*R(1,3);

R(2,3) = Q(:,2)'*A(:,3);

A(:,3) = A(:,3)-Q(:,2)*R(2,3);

R(3,3) = sqrt(sum(abs(A(:,3)).^2));

Q(:,3) = A(:,3)/R(3,3);

 

%%  k= 4

R(1,4) = Q(:,1)'*A(:,4);

A(:,4) = A(:,4)-Q(:,1)*R(1,4);

R(2,4) = Q(:,2)'*A(:,4);

A(:,4) = A(:,4)-Q(:,2)*R(2,4);

R(3,4) = Q(:,3)'*A(:,4);

A(:,4) = A(:,4)-Q(:,3)*R(3,4);

R(4,4) = sqrt(sum(abs(A(:,4)).^2));

Q(:,4) = A(:,4)/R(4,4);

 

Q

R

q =

 -0.2696 + 0.2758i   0.0926 -0.1033i   0.3199 - 0.6630i  -0.0668 + 0.5344i

 -0.2042 + 0.2798i  -0.4199 -0.0996i   0.4549 + 0.3194i   0.6203 + 0.0077i

 -0.7428 - 0.2179i  -0.3284 +0.3758i  -0.3217 - 0.1656i   0.0147 - 0.1438i

  0.3629 + 0.0195i  -0.4886 +0.5539i  -0.0138 + 0.1345i  -0.1966 + 0.5153i

 

r =

  3.9640 + 0.0000i  -2.1874 +1.5695i  -0.0841 + 0.8639i   0.1994 + 0.4748i

  0.0000 + 0.0000i   1.8159 +0.0000i   0.4109 - 1.0269i   0.6065 - 1.2118i

  0.0000 + 0.0000i   0.0000 +0.0000i   0.5670 + 0.0000i   0.5431- 1.2020i

  0.0000 + 0.0000i   0.0000 +0.0000i   0.0000 + 0.0000i  -0.1807 + 0.0000i

Q =

 -0.2696 + 0.2758i   0.0926 -0.1033i   0.3199 - 0.6630i   0.0668 - 0.5344i

 -0.2042 + 0.2798i  -0.4199 -0.0996i   0.4549 + 0.3194i  -0.6203 - 0.0077i

 -0.7428 - 0.2179i  -0.3284 +0.3758i  -0.3217 - 0.1656i  -0.0147 + 0.1438i

  0.3629 + 0.0195i  -0.4886 +0.5539i  -0.0138 + 0.1345i   0.1966 - 0.5153i

R =

  3.9640 + 0.0000i  -2.1874 +1.5695i  -0.0841 + 0.8639i   0.1994 + 0.4748i

  0.0000 + 0.0000i   1.8159 + 0.0000i   0.4109 - 1.0269i   0.6065 - 1.2118i

  0.0000 + 0.0000i   0.0000 +0.0000i   0.5670 + 0.0000i   0.5431 - 1.2020i

  0.0000 + 0.0000i   0.0000 +0.0000i   0.0000 + 0.0000i   0.1807 + 0.0000i

     通过以上算法,实现QRD包含了浮点复数模值,浮点复数矩阵乘法,浮点复数矩阵加乘等预算,通过合理调用硬符点DSPblock实现相关复数浮点运算。下面是基于A10硬浮点结构实现4*4矩阵QR分解的部分代码,基于该参考代码用户实现了8阶的矩阵的QR分解,基于A10硬浮点的优势,实现8阶的QR分解仅需要用到66个DSPblock,并且延时仅为500个时钟周期,相比软浮点设计大幅度提升。

 

如欲了解更多关于该方案的信息,请联系骏龙科技各地的办事处,或发邮件至stonemao@macnica.com

 

骏龙科技微信公众号

骏龙Altera FPGA微信公众号: