# MMSE & LMS Equalization Question

Started by April 16, 2010
```Ok so, i'm confusing myself somewhere and its driving myself crazy.

I have written matlab implementations of MMSE (wiener) and LMS (gradient
method .. h = h(n-1) + mu*dE/dh) to minimize the following equation:

( s[n] - yhat[n] )^2

where s[n] is the original 'sent' message and yhat[n]=conv(Hhat,y[n]) where
y[n] is the signal received at the transmitter (with noise/channel
effects). That is, my code calculates the 'inverse channel' (Hhat) in the
LS sense.

Both my implementations work really well on real input / real channel
systems. However, they dont work nearly as well if my input is complex
(like a QAM signal) or if my channel is complex. I would say the output is
correctly equalized about 40% of the time. (I am generating random length
30 complex channel filters each iteration with random 'multipath' delays).

In the LMS case I know it isnt a problem with my step size..because my
output after equalization isn't 'blowing up' and if I use the channel to
equalize the data it sort of looks like the original sent signal s[n]. My
error vector seems to behave weird though. When the equalizer first starts
the error shoots up (duh!). After a couple iterations the error falls down
and starts to converge, then 50-100 iterations later it will "spike-up"
(never larger than the first spike) start to converge...spike up
again...start to converge...and repeats this process.

Most of the literature I can find only talks about LMS/MSSE in a 'channel
identification' sense. That is, using the received signal y[n] to come up
with a filter h[n] such that conv(h[n],s[n]) = y[n]. My code works very
well if I try to 'identify the channel' (on real and complex data) but
doesnt work to well if I try to calculate the 'inverse channel'.

Is this because my implementations in MMSE and LMS are FIR filters and the
channel i need to equalize is IIR so I lack enough taps, or is there some
properties of MMSE/LMS (that I can't find) that doesnt work well in terms
of equalization?

Thanks
FPW
```
```firepluswater <ampierce@n_o_s_p_a_m.gmail.com> wrote:

>Ok so, i'm confusing myself somewhere and its driving myself crazy.

>I have written matlab implementations of MMSE (wiener) and LMS (gradient
>method .. h = h(n-1) + mu*dE/dh) to minimize the following equation:

>( s[n] - yhat[n] )^2

>where s[n] is the original 'sent' message and yhat[n]=conv(Hhat,y[n]) where
>y[n] is the signal received at the transmitter (with noise/channel
>effects). That is, my code calculates the 'inverse channel' (Hhat) in the
>LS sense.

The last equation above looks backwards ... in your model you (usually)
want to first convolve the transmitted signal with the linear channel,
and then add receiver noise.  There are exceptions to this, such as
some of the response being after the receiver front end (say IF or BB
filters), but generally in the baseline case you want to add the noise
after the channel response.

I do not know what switching the order does to your equalizer but
it can't be good... the peaks in your transfer function Hhat are
now amplifying the noise!

Steve
```
```Steve:

Right, I see what your saying about my equation, and thats what i'm
wondering...is my approach to the problem wrong?

Essentially what I am trying to solve is:
(s[n] - conv(Hhat[n],conv(s[n],H[n])+N[n]) )^2

So, I am trying to find a filter Hhat[n] that i can convolve with my
received signal ( S(f)*H(f)+N(f) ) to get S[n]....Isn't this how
equalization is suppose to work?

or is the purpose of LMS/MMSE to give me the channel that the original
signal WENT thru and not the INVERSE channel to convert my y[n] to my sent
message s[n]
```
```
firepluswater wrote:
> Ok so, i'm confusing myself somewhere and its driving myself crazy.
>
> I have written matlab implementations of MMSE (wiener) and LMS (gradient
> method .. h = h(n-1) + mu*dE/dh) to minimize the following equation:

> Both my implementations work really well on real input / real channel
> systems. However, they dont work nearly as well if my input is complex
> (like a QAM signal) or if my channel is complex. I would say the output is
> correctly equalized about 40% of the time. (I am generating random length
> 30 complex channel filters each iteration with random 'multipath' delays).
>

Unless you put special restrictions, this will generate extremely evil
channels, especially in the complex case.

> My code works very
> well if I try to 'identify the channel' (on real and complex data) but
> doesnt work to well if I try to calculate the 'inverse channel'.

Aha. It is a lot easier to become as bad as evil, then to undo the evil
by good. Think of eigenvalue spread.

> Is this because my implementations in MMSE and LMS are FIR filters and the
> channel i need to equalize is IIR so I lack enough taps, or is there some
> properties of MMSE/LMS (that I can't find) that doesnt work well in terms
> of equalization?

You can improve the situation by adding more taps, but this opens you
for convergence problems and numerical difficulties also.

DSP and Mixed Signal Design Consultant
http://www.abvolt.com
```
```Ah I see... I completely overlooked the eigenvalue spread. So how are these
equalizers used in the real world since not all channels are 'pretty'? What
kind of special restrictions can u put on the equalizer to make it more
robust to any channel?

From the books/papers I was looking at I was under the assumption that
these methods would work for any channel... Bummer... It's never as easy as
you think it is :p
```
```>Ah I see... I completely overlooked the eigenvalue spread. So how are
these
>equalizers used in the real world since not all channels are 'pretty'?
What
>kind of special restrictions can u put on the equalizer to make it more
>robust to any channel?
>

Well....in real life people use MLSE equalizer...at least in the case of RF
(Not Underwater comms).....they assume that the channel remains constant
during the packet transmission.....then they estimate the channel using any
estimation algorithm and then apply Viterbi decoding...