Let's say I have a sequence $x[n]$ (signal) and perform convolution with another sequence $h[n]$ (channel), so: $$ y[n] = h[n]*x[n] = \sum_{k}{h[k]x[n-k]} \leftrightarrow Y(z) = H(z)X(z) $$
I'm looking for $C(z)$ such that: $$ C(z)= \frac{1}{H(z)} $$
So that I can compensate the channel: $$ c[n]*y[n] = \sum_{k}{c[k]y[n-k]} \leftrightarrow C(z)Y(z) = \frac{1}{H(z)}Y(z) = \frac{1}{H(z)}H(z)X(z) = X(z) $$
Let's assume I know the channel $h[n]$ and I use that to obtain $c[n]$ using Zero-Forcing equalization.
My question is, if I do:
x = [1 2 3 4 5 6 7];
h = [1 0.9 0.3];
c = zeroforcing(h); % c=[-4.7619, 4.2857, -1.4286]
y = filter(h,1,x);
x_d = filter(c,1,y);
Shouldn't x_d
be a delayed version of x
? But I don't seem to get that in my simulations.
(The way I obtain c
is converting h
to a toeplitz matrix and doing $c[n]=H^{-1}\delta [n]$ as explained here:
$$ \begin{bmatrix} c_1 \\ c_2 \\ c_3 \end{bmatrix} = \begin{bmatrix} h_2 & h_1 & 0 \\ h_3 & h_2 & h_1 \\ 0 & h_3 & h_2 \end{bmatrix}^{-1} \begin{bmatrix} 0 \\ 1 \\ 0 \end{bmatrix} = \begin{bmatrix} 0.9 & 1 & 0 \\ 0.3 & 0.9 & 1 \\ 0 & 0.3 & 0.9 \end{bmatrix}^{-1} \begin{bmatrix} 0 \\ 1 \\ 0 \end{bmatrix} $$