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