# how to understand the MIMO zero forcing as a bank of decorrelators?

I am studying the zero forcing as a simple linear receiver for MIMO detection. according to following notes: http://www.ee.ic.ac.uk/bruno.clerckx/All.pdf.

The zero forcing can be understood as the following two ways.

1. For a single stream $$\mathbf{q}$$, we can project the received $$\mathbf{y}$$ onto a subspace orthogonal to channel matrix $$\mathbf{H}$$ without $$\mathbf{h}_q$$, then apply the matched filter to the projected signal or,
2. We can just work on all streams in one shot with the pseudo inverse of the channel matrix, i.e., $$(\mathbf{H}^T\mathbf{H})^{-1}\mathbf{H}^T$$.

I can understand that the second approach certainly cancels the interference as $$(\mathbf{H}^T\mathbf{H})^{-1}$$ exists if columns of $$\mathbf{H}$$ are independent, and obviously $$(\mathbf{H}^T\mathbf{H})^{-1}\mathbf{H}^T\mathbf{H} = \mathbf{I}$$ such that $$(\mathbf{H}^T\mathbf{H})^{-1}\mathbf{H}^T\mathbf{y}=\mathbf{x} + (\mathbf{H}^T\mathbf{H})^{-1}\mathbf{H}^T\mathbf{n}$$.

It seems to me that according to (2), a decorrelator for the $$q^{th}$$ stream is just the $$q^{th}$$ row of the pseudo-inverse of the matrix $$\mathbf{H}$$.

My question is, can we prove, or conclude (2) from (1)?

The following is the MATLAB script implemented according to the methods described in the above-mentioned notes.

%zero forcing

randn('seed', 0);
m=2; n=2;

x = randn(n,1)+1j*randn(n,1);
nz=0;

H = randn(m,n)+1j*randn(m,n);

y=H*x+nz;

%zeero forcing filter

G0 = inv(H'*H)*H';
x0=G0*y;

%disp(x-x0);

% transform the y into the null space of the

% subspace spanned by H1m (H w/o h1)

h1=H(:,1);
H1m=H(:,2:end);
[U, S, Vc]=svd(H1m);

% Q1 spans null space of the subspace spanned by H1m (H w/o h1)

% (actually it is null space of H1m')

% i.e., Q1'*y projects y into the null space of H1m

% y1 = Q1'*y = Q1'*h1*x1 + Q1'*n + zero (cancelled interference)

Q1=U(:,n:m);

% (Q1'*h1)' is the match filter to the transformed y1

% g1=h1'*(Q1*Q1'), note that Q1*Q1' is not orthogonal but Q1'*Q1=I

g1=(Q1'*h1)'*Q1';

% normalization

g1=g1/(norm(g1)^2);
x01=g1*y;

%x(1)-x01

%snr for stream 1

snr1=(norm(Q1'*h1))^2

nv=inv(H'*H);

%snr1 - 1/nv(1,1)
$$$$
`
• There is a couple hundred slides, can you specify which slides you are talking about? – Engineer Feb 21 '20 at 1:57
• The approach (1) is from page 154-155 of the slides. – Hao xue Feb 22 '20 at 1:13

It seems like you understand your question already but are unsure it is correct? Let the decorrelator be $$\mathbf{D}=(\mathbf{H}^T\mathbf{H})^{-1}\mathbf{H}^T$$, then the symbols post-decorrelator are $$\mathbf{z}=\mathbf{D}\mathbf{y}=\mathbf{D}(\mathbf{Hx}+\mathbf{n})$$. The first stream, $$z_1$$, is computed by taking the first row of $$\mathbf{D}$$, call the row vector $$\mathbf{d}_1$$ (first row of $$\mathbf{D}$$), and performing the operation: $$z_1=\mathbf{d}_1(\mathbf{Hx}+\mathbf{n})$$. You get $$z_1=x_1 + \text{filtered noise}$$ because $$\mathbf{d}_1\mathbf{H}=[1, 0, ..., 0]$$.
• Its the inverse because just taking it row-by-row. There is nothing to prove. Once you have $\mathbf{D}$, you can either do your approach #1 (each stream individually) or approach #2 (treat as a bank of filters) – Engineer Feb 22 '20 at 12:37