What is a correct approach to baud-rate digital timing recovery for self-equalized line code In particular, I have a signal coming from a twisted pair of arbitrary length with a differential encoded
biphase line code. What should be a correct approach to timing recovery in this case?
Currently I am trying to implement a baud-rate timing recovery algorithm using a Mueller&amp;Muller TED (timing error detector), loop filter (average over 120 symbols) and counter-divider with adjustable initial value as a digital VCO. The source code for current implementation of the algorithm in python is here. For TED I use the following timing function:
$$
\frac{(a_k^2 - 5)}{16}(a_k x_{k-1} - a_{k-1} x_k )
$$
For simulation purposes I have sampled versions of the signal in half-duplex mode (i.e. without echo). Signal samples look like this for two different channel lengths:


For these signals the timing recovery algorithm converges to the phase near signal's zero crossings. This does not allow to correctly determine the original bit sequence (e.g. &quot;+1 -1 +1 +1 -1 +1 ...&quot;) and I would like it to converge to the maximum eye opening, i.e. somewhere near the peaks.
I've managed to get this by adding a $(1 - aD)$ filter, where $a$ is $0,75$ for the first signal sample and $1,325$ for the second one. But because a channel has an arbitrary length, the shape of a signal is unknown during design phase and this filter with fixed coefficients seems like a bad solution. Moreover, adding this filter was purely an empirical solution and is not backed up by any math.
I am very new to timing recovery and would appreciate any advice.
A good option for timing function for such signal happens to be the canonical $(a_k x_{k-1} - a_{k-1} x_k )$ with additional condition to calculate its value only when $a_k$ equals $a_{k-1}$ (i.e. when &quot;1&quot; is preceded by &quot;1&quot; or &quot;-1&quot; is preceded by &quot;-1&quot;). As a result, no additional digital filter is needed.
The reason for this condition came from observations of S-curve for this timing function (see M. Rice «Chapter 8 Symbol Timing Synchronization» in &quot;Digital communications: a discrete-time approach&quot;). Having timing function (timing error function) $e(k)$ written as
$$e(k)=a(k) x(kT+\tau) - a(k-1) x((k-1)T+\tau),$$
where $T$ - is a symbol period, and $\tau$ - is a phase error,
the S-curve is an expected value of $e(k,\tau)$:
$$g(\tau)=E\{e(k,\tau)\}.$$
For the signal samples the proper S-curve with a single zero crossing was obtained only for &quot;11&quot;, &quot;00&quot;, &quot;1100&quot; and &quot;0011&quot; symbol patterns. The shorter symbol pattern (i.e. $a_k=a_{k-1}$) was selected to simplify further implementation.
Here is an example plot of a signal sample and values of $e(k)$ as a function of a phase (which vaguely represents $g(\tau)$), for different symbol patterns.