# Residual carrier tracking with PLL

Residual carrier systems such as PCM/PM/NRZ and PCM/PM/Bi-phase are common in space applications. Compared to suppressed-carrier systems such as BPSK, the literature sources on residual-carrier systems are pretty old, dating back from the 1970s. The demodulators described in these sources are analogue. I'm having some trouble with GNU Radio SDR implementation of these analog structures, in particular, carrier recovery with PLL. In residual carrier systems, shown above, there is an unmodulated carrier on the Q-channel (pilot) that is used for carrier recovery. The transmitted signal is $$$$\mathrm{s\left ( t \right )} = \mathrm{\sqrt{2P}}\sin \left [ \mathrm{\omega_{0}t + \sum_{i=1}^{M}\theta_{i}d_{i}\left ( t \right )} \right ]$$$$ where M is the number of subcarriers and $$\theta$$ is the modulation index. The modulation index determines the ratio between the power in the data carrier and the residual carrier. Assuming no subcarriers (M = 1), the PCM/PM signal takes the form: $$$$\mathrm{s\left ( t \right )_{M=1}} = \mathrm{\sqrt{2P}\cos \theta_{ 1} \sin \omega_{0}t + \sqrt{2P}d_{1}\left ( t \right )\sin\theta_{ 1}\cos \omega_{0}t}$$$$ In I/Q format, this becomes: $$$$\mathrm{s\left ( t \right )_{M=1}} = \mathrm{I\left ( t \right )\cos \omega_{0}t - Q(t)\sin \omega_{0}t}$$$$ where $$$$\label{i} \mathrm{I\left(t\right)} = \mathrm{\sqrt{2P}s_{1}\left ( t \right )\sin\theta_{1}}$$$$ and $$$$\label{q} \mathrm{Q\left(t\right)} = \mathrm{-\sqrt{2P}\cos \theta_{1}}$$$$

Im having a problem with implementing the carrier tracking loop, in particular, I dont know what phase error detector to use. The signal in question is shown above, where the residual carrier can be seen as a peak at DC.
For BPSK(suppressed carrier) Costa’s loop, the phase error detector is pretty straightforward and is given by $$$$e(kTs) = Q(kTs)*slice(I(kTs));$$$$ Both I and Q channels are used by the PED, as shown in the diagram above. On the other hand, residual-carrier systems use the Q channel only for carrier phase recovery. I have tried different PEDs on my own without any luck.

float
residualPhaseRecovery_impl::phaseDetectorPM(gr_complex out) const
{
//return imag(out)*slice(real(out)); //Costa's loop, for BPSK
return imag(out); // Naive Residual carrier PED. Doesnt work.
}


What would be the appropriate PED in this case?

EDIT Another receiver structure that could be used (?) is shown below (Rice, Digital Communications: A discrete Approach). All I need is an equation for the "Compute Phase Error" block.

• Residual carrier should make life easier. In gr-analog, there are 3 PLL blocks, one of which is carrier tracking, that should keep you tracking along (for slow movement of the center frequency due to doppler). In the spectrum of the received signal you should be able to see the carrier/pilot tone peak. – Andy Walls Jan 26 '19 at 22:53
• I have tried the PLL carrier tracking block. It configured it to track between $Freqmax = \mathrm{2\pi}$ and $Freqmin = \mathrm{-2\pi}$ with a loop bandwidth of $2*\pi*0.001$. Is this a proper way to configure the block? The output of the match filter still has the DC peak (instead of being flat). – Moses Browne Mwakyanjala Jan 27 '19 at 14:19
• freqmax = fmax * math.pi/(Fs/2.0), freqmin = fmin *math.pi/(Fs/2.0). Where you expect the residual carrier to be found in the frequency rang of [fmin, fmax] Hz. loop bandwidth is set to some small number (much less than pi), whose exact value depends on how reactive you want the PLL to be. Your flowgraph doesn't show you using any real hardware, so that "DC" peak is your residual carrier that you're generating, right? That's what the PLL is gong to phase lock to. – Andy Walls Jan 30 '19 at 18:44