The QRD converts the complex matrix \(A\) into:
Equation 2:
Where:
\(Q\), size $[m,n]$, is an orthogonal matrix, which yields the identity matrix when:
Equation 3:
Where:
\(Q^H\) is the complex conjugate transpose for complex systems
\(Q^T\) is the transpose for real systems.
\(R\), size $[n,n]\(, is an upper triangular matrix, or right triangular matrix, meaning the lower triangle is all zeros. This makes for fast arithmetic when solving for \)x$. Equation 4 follows from substituting the QR relationship back into Equation 1.
Equation 4:
The last step is to solve for \(x\) using back-substitution. Let \(c = Q^Hb\).
Equation 5:
From this equation, we develop the HLS C code that implements the QR decomposition algorithm. The HLS C code is provided in the reference files: mgs_qrd_wbs.cpp, mgs_qrd_wbs.h, and mgs_qrd_wbs_tb.cpp