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.