Hi, Steve

> If the constellation spins rather slowly, and the equalizer adapts > fairly quickly, you can actually track the constellation's spinning in > the equalizer, and be able to decode the data. This is a *really* nasty > botch, though, and you can't expect to demodulate high order QAM this > way. You can kinda decode 16-QAM at high SNR - interesting for > experimenting, but not much use in a system.
You are right. With 16-QAM at high SNR, when the constellation spins rather slowly, and the training curve of the equqlizer converge. Though, as you said before, it is meaningless. ---------------------------- Has anybody observed the frequency response of a adaptive equalizer? It is well known that the magnitude response of "zero-forcing equalizer" is just the inverse of channel magnitude response? Then, how about adaptive equalizer? I think the response of the adaptive equalizer may look like the one of "zero-forcing equalizer". The difference is amplitude response of the adaptive equalizer is not as high as "zeroforcing equalizer", when the amplitude response of channel is really small. Am I right?
> So, Phil. If I didn't misunderstand your meaning. You means that > regarding CMA as a pre-equalizer, and get the frequency offset through > CMA. > > Then the estimated frequency offset can be used to as a weighted factor > in the coefficient update formula of another equalizer, like SG MME > equalizer. > > I don't think it is necessary.
I've attempted to illustrate the system that I was describing. I don't know if it applies to your situation, but it seemed to follow earlier posts. The lineup is based on a system that I worked on a while back. It consists of timing recovery (TR), a dual mode LMS equalizer (CMA then decision directed (DD)), CR and then the symbol demapper. This was meant for a continuous wave system, i.e., not packet based and no unique words. Our approach was the following: 1. acquire timing 2. pre-equalize (using your words) using CMA 3. freeze CMA once target error is achieved 3. acquire carrier offset 4. switch equalizer to DD mode. err --<---<----<----<-- \/ | TR--->EQ--->CR--->DEMAP Since the CR follows EQ, in DD mode, the carrier offset must be applied to the err signal. I just remembered that the EQ that I am describing was a T-spaced. Perhaps this will not be as helpful to you as I had originally thought.
Phil wrote:
> > spinning. You still need to track the carrier and stop the constellation > > spinning. However, with CMA you can do this after the equalisation step. > > With most other equalisation adaption schemes you need to stop the > > spinning first. > > I agree with most of what Steve says here. I just want to clarify that > when he says that you must "stop the spinning first" for other > adaptation schemes, the spinning is not necessarily stopped at the > input of the equalizer. Basically, one can use the CMA to lock onto > the signal, then use carrier recovery (CR) following the equaliser. > Once the CR is locked, the CR output can be used to generate the error > signal to be fed back for use by a different adaptation scheme. If I > remember correctly, you will want to get that error signal spinning the > same way as your equalizer input. If not, things will go crazy. > > I hope that this helps. > > Phil
Hi, Phil CMA is usually adopted in PSK moduation, for constant amplitude constellation. However, it can also make sensen in QAM modulation. So, Phil. If I didn't misunderstand your meaning. You means that regarding CMA as a pre-equalizer, and get the frequency offset through CMA. Then the estimated frequency offset can be used to as a weighted factor in the coefficient update formula of another equalizer, like SG MME equalizer. I don't think it is necessary.
> spinning. You still need to track the carrier and stop the constellation > spinning. However, with CMA you can do this after the equalisation step. > With most other equalisation adaption schemes you need to stop the > spinning first.
I agree with most of what Steve says here. I just want to clarify that when he says that you must "stop the spinning first" for other adaptation schemes, the spinning is not necessarily stopped at the input of the equalizer. Basically, one can use the CMA to lock onto the signal, then use carrier recovery (CR) following the equaliser. Once the CR is locked, the CR output can be used to generate the error signal to be fed back for use by a different adaptation scheme. If I remember correctly, you will want to get that error signal spinning the same way as your equalizer input. If not, things will go crazy. I hope that this helps. Phil
Thanks, steve.

Yes, I should review the basic knowledge of the receiver.

jia wrote:
> I am still in the fog. > > I have checked some paper about CMA, and didn't find any clue why CMA > can compensate the carrier frequency offset.
It can't what it can do is equalise even though the constellation is spinning. You still need to track the carrier and stop the constellation spinning. However, with CMA you can do this after the equalisation step. With most other equalisation adaption schemes you need to stop the spinning first.
> What I learned is only that 'Adaptive Complex Gain Control' can > compensate the carrier phase offset. I understand what it really works. > > Carrier frequency offset. Could it be 'killed' in the equalizer, > without other device?
The equaliser can't kill the offset. You need to do that separately. Perhaps you need to take a step back and try to understand the overall picture of what the various steps through the receiver are trying to achieve. It seems like you don't really grasp this right now, and nothing will make proper sense until you do. Steve
I am still in the fog.

I have checked some paper about  CMA, and didn't find any clue why CMA
can compensate the carrier frequency offset.

What I learned is only that 'Adaptive Complex Gain Control' can
compensate the carrier phase offset. I understand what it really works.

Carrier frequency offset. Could it be 'killed' in the equalizer,
without other device?

Thanks.

"Steve Underwood" <steveu@dis.org> wrote in message
news:e62vni\$gut\$1@home.itg.ti.com...
> jia wrote: > > Hi, here > > > > I am now doing a project about T/2 -spaced FSE MMSE equalizer based on > > the stochastic gradient algorithm. I use training symbol method to > > update the coefficient. > > > > It seems working well in some channel distortion enviroment. However, > > when carrier offset exists, i.e. (the constellation of QAM rotates), > > this algorithm doesn't converge, even I force the update coefficient > > steps very small. > > Of course it doesn't converge. You are trying to train against a moving > target. You need to despin the constellation before you feed the data to > an equalizer of that type. > > > Is the equalizer with this algorithm capable of comensating for the > > carrier frequency offset. I searched some papers, and find someone > > prefer to the CMA (constant modulus algorithm) method if carrier offset > > exists. > > CMA is usually used in blind equalizers. It converges more slowly than > LMS, so it won't usually work with formal training sequences - they > aren't long enough. Although you can use CMA to train the equalizer > before you despin the constellation, you would normally need to despin > before you can start decoding the bit stream. > > > The following is my matlab codes for adaptive equalizer, with > > stochastic gradient algorithm. It doesn't converge when there is > > carrier offset. Any idea? > > If the constellation spins rather slowly, and the equalizer adapts > fairly quickly, you can actually track the constellation's spinning in > the equalizer, and be able to decode the data. This is a *really* nasty > botch, though, and you can't expect to demodulate high order QAM this > way. You can kinda decode 16-QAM at high SNR - interesting for > experimenting, but not much use in a system. > > Steve
That's correct, you want to use CMA while the constellation is spinning. Once CMA has adapted it's usually possible to obtain carrier lock so that you can switch to decision directed adaptation. In your case, since you have a training sequence you could still try to use CMA since you know the radius of each symbol in the sequence and it should adapt faster than blind. However, unless it is a differential QAM signal you still need to recover the carrier very quickly to get good data, especially if this is a packet and not a continuous signal. -Clark
Hi, Steve:

> If the constellation spins rather slowly, and the equalizer adapts > fairly quickly, you can actually track the constellation's spinning in > the equalizer, and be able to decode the data.
you mean the if the frequency offset is really small, and the equalizer coefficient updates a little bigger. the equqlizer may track the constellation's spinning?
> This is a *really* nasty botch, though, and you can't expect to demodulate > high order QAM this way. You can kinda decode 16-QAM at high SNR - interesting for > experimenting, but not much use in a system.
I rewrite the program in a noiseless channel, with 16-QAM modulation. However, the equalizer also doesn't work. ^_^ , The |error] seems to be increase to the time. ------------------------------------------------------ clear all clc % % % % % % % % % % % % % % % % % % % % % % % % % Parameters Initialization % % % % % % % % % % % % % % % % % % % % % % % % Fs = 8; % Sampling frequency 8Hz Ts = 1/Fs; % Sampling interval [s] T = 1; % Symbol time interval [s] Taps = 2^9; % Taps of RC shaping filter alpha = 0.5; % Roll-off factor num_bits = 1500; % Number of information bits delta_f = 0.00000001; % Carrier frequency offset % % % % % % % % % % % % % % % % % % % % % % % % % 16-QAM modulation % % % % % % % % % % % % % % % % % % % % % % % % M = 4; % M^2-QAM temp_M = -(M-1):2:(M-1); % Generate QAM Alphabet, one possibility for i=1:M for k = 1:M QAM(i,k) = temp_M(i) + j*temp_M(k); end end QAM = QAM(:).'; % Alphabet vector index = randint(1,num_bits,[1 M^2]); sym = QAM(index); % Random QAM symbol sequence % % % % % % % % % % % % % % % % % % % % % % % % % Discrete Time Overall Puse-Shaping Filter p % % % % % % % % % % % % % % % % % % % % % % % % t = -Ts*Taps/2: Ts : Ts*(Taps/2-1); % Time vector (sampling intervals) t = t+0.00000001; % Otherwise, the denominator would be zero at t=0 p = sinc(t/T).*(cos(alpha*pi*t/T)./(1-(2*alpha*t/T).^2)); % Raised-Cosine FIR filter % % % % % % % % % % % % % % % % % % % % % % % % % Using the Designed Pulse-Shaping Filter % % % % % % % % % % % % % % % % % % % % % % % % N = length(sym); % Number of symbols r = Fs*T; % Oversampling factor sym_over(1: r : r*N) = sym; xn = filter(p,1,sym_over); % Pulse Shaping filtering xn = xn(Taps/2+1:end); % delete filter delay Ak = xn(1: T*Fs/2 : end); % Ak for T/2-spaced Equalizer % % % % % % % % % % % % % % % % % % % % % % % % % Carrier offset model % % % % % % % % % % % % % % % % % % % % % % % % xn = xn.*exp(j*2*pi*delta_f*(0:length(xn)-1) ); scatterplot(xn(1: T*Fs : end)) % % % % % % % % % % % % % % % % % % % % % % % % % Equalizer % % % % % % % % % % % % % % % % % % % % % % % % beta = 0.001; % step-size of the algorithm eq_len = 33; % length of equalizer c = zeros(eq_len,1); % equalizer coefficients, initializations c((eq_len+1)/2) = 1; equalizer_in = xn(1: T*Fs/2 : end); % T/2 spaced input equlizer for i = (eq_len+1)/2 : length(equalizer_in)-(eq_len-1)/2 rk = flipud(equalizer_in(i-(eq_len-1)/2:i+(eq_len-1)/2).'); % Received signal vector Ek(i) = Ak(i) - c.'*rk; % Error signal, we assume a known symbol sequence c = c + beta.*Ek(i).*conj(rk); end figure; plot(abs(Ek).^2); % Convergence behaviour of the LMS-algorithm.