I'm trying to equalize a BPSK signal which has a residual frequency offset on it. This frequency offset is dealt with at a later stage in the DSP chain, along with phase estimation.
I have implemented a FIR filter which updates its filter taps using gradient descent CMA:
The equalized signal (y) is a discrete-time convolution of the filter taps (W) and the input signal (X):
$$ y = W^HX $$
The update error is: $$ \epsilon = |y|^2-1 $$
Finally I compute the update as: $$ W_{i+1} = W_i - \mu \epsilon y^*X $$ Where $\mu$ is the step size = 0.001.
My problem is that due to the frequency offset, my input signal X is complex, which is resulting in complex filter taps in W. This in turn introduces a huge phase error into my signal. One possible solution I've looked at so far is putting the equalizer behind the frequency offset compensation stage. However, since the signal still contains some phase error, it's not entirely constrained to the real axis in the constellation diagram and I have the same problem. My workaround so far has been to update the filter taps as: $$ W_{i+1} = W_i - real(\mu \epsilon y^*X) $$ My reasoning being that after frequency offset compensation and phase estimation, there should only be noise in the quadrature part of the signal, and I can safely discard it.
I'm unhappy with this solution for 2 reasons:
I'm not entirely sure it's theoretically sound, and at the very least it's rather unorthodox.
I would prefer to equalize the signal upstream in the DSP chain.
I would appreciate any help or insights!


I should clarify that I'm not trying to avoid using a complex taps, rather, I simply can't get the filter to work if I don't include the real(.) operation in the update algorithm.
– Philip May 10 '17 at 14:24