Symbol Sync



Symbol Sync is a type of symbol synchronizer that performs a bunch of tasks typically required to receive/decode a digital signal from over the air, listed below. This block acts as an improvement to the Clock Recovery and Polyphase Clock Sync blocks.

1. Estimates and tracks symbol rate (i.e. number of samples per symbol), given an initial estimate of samples per symbol and an allowable deviation from that estimate.

2. Performs the timing synchronization needed so that the signal is sampled at exactly the right moment in time, which is when each symbol/pulse is at its max value (see diagram below).

3. Decimate the signal so that what comes out of the block is 1 sample per symbol (or multiple if the user would like, but it's usually set to 1 or sometimes 2).

4. Filter signal appropriately



For the GNU Radio Conference 2017 presentation on this block, see []

Example flowgraphs using this block can be found here: https://github.com/gnuradio/gnuradio/tree/master/gr-digital/examples/demod

Parameters

 * Timing Error Detector (TED)
 * The enumerated type of timing error detector to use. See enum ted_type for a list of possible types.


 * Samples per Symbol
 * User specified nominal clock period in samples per symbol.


 * Expected TED Gain
 * Expected gain of the timing error detector, given the TED in use and the anticipated input amplitude, pulse shape, and Es/No. This value is the slope of the TED's S-curve at timing offset tau = 0. This value is normally computed by the user analytically or by simulation in a tool outside of GNURadio. This value must be correct for the loop filter gains to be computed properly from the desired input loop bandwidth and damping factor.


 * Loop BW
 * Approximate normalized loop bandwidth of the symbol clock tracking loop. It should nominally be close to 0, but greater than 0. If unsure, start with a number around 2*pi*0.04, and experiment to find the value that works best for your situation.


 * Damping Factor
 * Damping factor of the symbol clock tracking loop. Damping < 1.0 is an under-damped loop. Damping = 1.0/sqrt(2.0) is a maximally flat loop response. Damping = 1.0 is a critically-damped loop. Damping > 1.0 is an over-damped loop. Start with critically damped or over-damped.  An under-damped loop is usually not desirable for timing recovery.


 * Max Deviation
 * Maximum absolute deviation of the average clock period estimate from the user specified nominal clock period in units of samples per symbol. Smaller is better for acquiring lock at start of burst. Too small misses data when symbol clock is far from nominal.


 * Output Samples/Symbol
 * The number of output samples per symbol (default=1). Normally set to 1; or to 2 if upstream from an equalizer block.


 * TED Slicer Constellation
 * A constellation obj shared pointer that will be used by decision directed timing error detectors to make decisions. I.e. the timing error detector will use this constellation as a slicer, if the particular algorithm needs sliced symbols.


 * Interpolating Resampler Type
 * The enumerated type of interpolating resampler to use. See the interpolating resampler type enum for a list of possible types.


 * Num Filters (if using certain resamplers)
 * The number of arms in the polyphase filterbank of the interpolating resampler, if using an interpolating resampler that uses a PFB.


 * PFB Taps (if used certain resamplers)
 * The prototype filter for the polyphase filterbank of the interpolating resampler, if using an interpolating resampler that uses a PFB.

Usage Hints and Gotchas
1. Input signal should be at a consistent amplitude (e.g., +/- 1.0), so consider an AGC before this block. TEDs have specific assumptions about input amplitudes!

2. For decision directed TEDs (M&M, Modified M&M, Zero Crossing), the input signal amplitude should match constellation. Note that GNU Radio's Constellation Object silently scales your constellation!

3. Input signal should not have a DC offset

4. Input signal should be peaked at symbol centers, except for MSK signals and MSK TEDs. This requirement will normally be accomplished by the matched filter which occurs before the Symbol Sync block, unless you use the PFB, MF resampler which does the matched filtering for you.