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 
\begin{equation}
\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 ]
\end{equation}
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:
\begin{equation}
\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}
\end{equation}
In I/Q format, this becomes:
\begin{equation}
\mathrm{s\left ( t \right )_{M=1}} = \mathrm{I\left ( t \right )\cos \omega_{0}t - Q(t)\sin \omega_{0}t}
\end{equation}
where
\begin{equation}
\label{i}
\mathrm{I\left(t\right)} =  \mathrm{\sqrt{2P}s_{1}\left ( t \right )\sin\theta_{1}}
\end{equation}
and
\begin{equation}
\label{q}
\mathrm{Q\left(t\right)} =  \mathrm{-\sqrt{2P}\cos \theta_{1}}
\end{equation}


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 
\begin{equation}
e(kTs) = Q(kTs)*slice(I(kTs)); 
\end{equation} 
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.
I have been facing this problem of phase synchronization with my PCM/PM/SP-L signals as well, and found a temp solution by filtering away the residual carrier.

For carrier offset correction, there are two gnuradio blocks that work, the FLL Band Edge and PLL Carrier Tracking, but I found that the FLL Band Edge blocks works better together with the built-in Costas Loop block when dealing with PM signals with a residual carrier. This is completely from anecdotal experience though, and I have not done any proper characterization of the blocks performance.

One hacky solution of the phase synchronization problem might be to filter away the carrier of the signal before feeding it into the Costas Loop. This filter step should be after carrier offset correction, before Costas Loop. Since the presence of the residual carrier makes the IQ constellation of a Binary PM signal offset from the origin, filtering away the carrier will center the PM signal about the origin, and the Costas Loop PLL can lock its phase to that of a standard BPSK.

Rough Flow Graph:

PCM/PM RX -> FLL Band Edge -> Highpass Filter -> PFB Clock Sync -> Costas Loop -> BPSK Demodulator