Process Network QR Algorithm Demo

The above applet shows the result of a Process Network (PN) executing the QR-algorithm on a continuous stream of data that is coming from an array of antennas. Each execution of the algorithm on a new set of data from the antennas is called an update. The applet shows the matrix R in a MatrixViewer. This matrix is of size NxN, where N is the number of antenna's involved. The individual entries in the matrix are also shown in the Plotter. The matrix R is obtained after doing a certain number of QR-algorithm updates on a stream of data coming from the antenna array of a certain size.

In the demo, if we select 10 QR-updates for an array of 6 antenna's, the following R matrix must be found:

# name: Rout
# type: matrix
# rows: 6
# columns: 6

270.843 206.234  60.482 -39.318 -89.100 -38.568
  0.000 144.933 181.192 172.919 104.333  10.488
  0.000   0.000  32.964  18.280  10.909   9.170
  0.000   0.000   0.000  24.739   7.446   7.208
  0.000   0.000   0.000   0.000  20.30   11.206
  0.000   0.000   0.000   0.000   0.000   8.535

The QR algorithm describes a linear algebra problem in which a matrix A can be written as a product of two matrices Q and R (A=QR). The matrix R is an upper triangular matrix and matrix Q is an orthogonal matrix. A program that does this QR transformation is given below in the Matlab programming language. The algorithm uses the Cordic functions Vectorize and Rotate to find the QR transform. If we execute this program in Matlab, we would find the same matrix R.

%% Initialize Matrix r
for j = 1:1:N,
  for i = j:1:N,
    [r(j,i)] = _ReadMatrix_Zeros_64x64();
  end
end

%% Initialize Matrix x
for k = 1:1:K,
  for j = 1:1:N,
    [x(k,j)] = _ReadMatrix_U_1000x16();
  end
end

%% do the QR updates
for k = 1:1:K,
  for j = 1:1:N,
    [r(j,j), x(k,j), t ] = Vectorize( r(j,j), x(k,j) );
    for i = j+1:1:N,
       [r(j,i), x(k,i), t] = Rotate( r(j,i), x(k,i), t );
    end
  end
end

%% After the K iterations, collect the values of the R Matrix
for j = 1:1:N,
  for i = j:1:N,
    [ Sink(j,i) ] = Rout( r(j,i) );
  end
end

However, we can also describe the same QR-algorithm as a Process Network, as shown in the block diagram.