discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Discuss-gnuradio] AGC loop


From: Bob McGwier
Subject: Re: [Discuss-gnuradio] AGC loop
Date: Tue, 19 Sep 2006 13:36:55 -0400
User-agent: Mozilla Thunderbird 1.0.8-1.4.1 (X11/20060420)

Tom:

A good agc has at least two time constants. One for attack and one for decay. Your attack is much too slow.

tmp = (reference - sqrt(real(y)^2 + imag(y)^2));
rate = rate1;
if   tmp > gain    rate = rate2;

gain += tmp*rate;

rate2 is decay (where gain needs to be increased) and rate1 is attack where gain needs to be decreased. rate1 > rate2 and rate1 must be fast enough that you do not clip and destroy the first bits of information in a packet. If the packet has some idles, or other announcement data, then you want to recover fast enough to recover receiver parameters such as clock and carrier in addition to gain. Since you are doing dsp and have data in buffers, you can do noncausal agc as well. I do sense of the required signal level three time constants ahead of the place I apply the actual gain where time constant is determined by the attack rate. This works spectacularly well in DttSP. In addition to this, we actually complicate things a bit more much to our advantage by having two tracks of agc. One where rapids peaks and impulses flatten the gain but they release quickly. The other is a slower agc channel. The gain is the min of the two gains. Again, from all indications of the users of the SDR-1000, this is a spectacular agc. We allow for thresholded agc which does decrease the dynamic range but this is subject to user preference. Where you are doing data, and not listening to it, you probably don't care about thresholding.


Bob



Tom Rondeau wrote:

Ok, so I've been working on the digital modulations, and everything works
great except when I put in the AGC loop. It jumps up in gain when there is
no signal applied and then takes too long to converge when the signal comes
in. The result is that it almost always misses the first packet before
converging to receive the rest of a burst of packets. Taking the AGC loops
out will work when the transmitter amplitude and receiver gain are set
within a reasonable range, but we're of course loosing dynamic range this
way.

I've played with the rate of the AGC to no avail, and we have a limiter in
there to clamp the gain, but again, if we clamp too much, we'll loose
dynamic range.

The implementation is a straight-forward and simple AGC:
        gain += (reference - sqrt(real(y)^2 + imag(y)^2))*rate
Where the reference is the value to converge to (+-1 usually) and the rate
is the slew rate of the loop.

I'm looking at Frerking's "Digital Signal Processing in Communications
Systems" for a possible solution. His AGC circuit is a similar approach to
the one above with a few more parts like a log(), integrator, blah blah
blah. I'm concerned with adding too much more to the AGC loop for
computational concerns, though, but will if it's the best way to go.

Does anyone have any recommendations? Is it worth implementing a more
complicated circuit to improve the acquisition time of the AGC? Or am I
looking in the wrong direction?

Thanks,
Tom





_______________________________________________
Discuss-gnuradio mailing list
address@hidden
http://lists.gnu.org/mailman/listinfo/discuss-gnuradio



--
Robert W. McGwier, Ph.D.
Center for Communications Research
805 Bunn Drive
Princeton, NJ 08540
(609)-924-4600
(sig required by employer)






reply via email to

[Prev in Thread] Current Thread [Next in Thread]