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.


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,
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)
```
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]$.