Gardner [1] timing error detection for estimating and compensating timing error.
Gardner is widely used timing error detector due to its independence of the carrier phase. For the estimation it uses a two times upsampled $x_{i}(n) version of the received signal $x(n)$. The goal of the esitmator is to detect the roots of the signal. The timing error is calculated as follows $$ t_\mathrm{err} = \mathrm{Re}\left\{\sum_{n=0}^{N/2-1}\left[x_i(2n-1)-x_i(2n+1)\right]x_i^*(2n)\right\}, $$ where $N$ is the averaging length.
However, this does not work for Nyquist pulses (especially when roll-off $\rightarrow$ 0). In this case, a modified version of the Gardner algorithm is used. It uses the power of the incoming signal $p_i(n)$ as the input. $$ t_\mathrm{err} = \sum_{n=0}^{N/2-1}\left[p_i(2n-1)-p_i(2n+1)\right]p_i(2n). $$ This is commonly refered to as the fourth power [2].
It can also be applied in the frequency domain.