Howdy list,
My partner and I have been working on getting a QAM demodulator
working on the gnuradio; the current patch, with lots of debugging
spew still present, is located at
http://www.cae.wisc.edu/~masond/gr-qam-patch-rev7.diff .
The current problem: When the constellation 'locks', it looks
like the following:
http://www.cae.wisc.edu/~masond/figure3.png
(for qam16)
http://www.cae.wisc.edu/~masond/figure4.png
http://www.cae.wisc.edu/~masond/figure4.png
(for qam8)
The red Xes are the true constellation points, and the black dots
are the output of the receiver. The amplitude of the receiver output
seems to spray out pretty widely from the constellation point
intended. Any ideas what could be causing this amplitude distortion?
I’ve tried increasing the number of stages in the feedforward AGC to
40 or 60 (as many as my receiver can bear without underruns) and it
doesn’t seem to impact it. The amplitude noise is present with a
variety of mus and costas alphas (the ones used in those figures were
alpha~.015 and gain-mu~.05-.075). I’ve also tried with several
different --tx-amplitudes to see if it was a matter of some clipping
or other artifact to no luck.
I know that for digital radio purposes the constellation doesn't
have to be perfect, but rather ‘good enough’, so I would be inclined
to let this go except for point 2:
–The receiver frequently cycle-slips, with the longest string of
un-slipped packets somewhere in the 2000 range on our USRPs. I think
that this is being hurt by the amplitude noise pushing received points
into neighboring constellation points and causing the receiver to
correct for that.
I'm running out of ideas (I've tried only using the corner points
as the patch does, using all points with weighting based on distance,
weighting only the costas loop portion, weighting only the m&m timing
portion…) and could use some suggestions or obvious things I may
have overlooked.
–Mason