How to make the error of the Gardner timing error detector not depend on signal amplitude? I have implemented a Gardner timing error detector with an interpolator and timing recovery in software. I noticed that the error term of the Gardner TED depends on the signal amplitude, which causes problems with the large variations of signal strength my receiver is expected to see.
With bursts (no timing sequence, only CW + sync word over 64 symbols), there are variations of 10 dB from the start of the transmission to after a few (15-20) symbols of frame data. For continuous signals (long CW + long timing sequence), this is less of an issue as the signal level tends to be relatively constant or varying rather slowly.
Is there a way I can make the Gardner error factor not depend on signal amplitude or should I instead focus on making sure the TED always sees a constant power level?
The maximum absolute error term is roughly 2 times the input power for the Gardner TED. Having a fixed (or predictable) input power, through the use of an AGC, means you can scale the error term to adjust the speed at which corrections will be performed.
With M-QAM modulations (for M &gt; 4), the input power will vary depending on the symbol, and thus the maximum error term will also vary. This means that symbols with less energy will move the timing corrections more slowly than symbols with more energy. Given a proper initial synchronization sequence, this should not be an issue when maintaining the lock. Proper care should be taken to make sure the lowest energy symbol can still make the timing offset move if necessary.