Let me start off by saying I'm at least a little embarrassed that there's something simple that I'm fundamentally not understanding here. Not sure if the blame is on me, or the prof that taught me DSP in grad school, but either way...

I have a very simple flowgraph in GNU Radio. LimeSDR block, (quadrature) sampling at the full 61.44MHz - so it's actually capturing 61.44MHz of spectrum - 30.72 above the center frequency, and 30.72 below the center frequency. So the effective bw at this point is 61.44MHz

Next a Frequency XLating FIR block, being used as a channel selector - no decimation (decimation=1, complex to complex, real taps). So let's say I take a 34 MHz chunk of the incoming spectrum and shift that to be centered around 0Hz and 34MHz bandwidth.

Do a very simple complex operation - multiply conjugate, the signal by itself to a 1 sample delayed version of itself.

Take the output of the multiply conjugate, and feed it into a QT GUI Sink to look at the spectral components. In the resulting FFT, I have a symmetric spectrum from -30.72MHz to +30.72MHz, and any spectral component that's above 30.72MHz is aliased around 30.72, so for instance if I have a spectral component at 34MHz, it ends up at 30.72 - (34-30.72) = 27.44 Mhz.

So, with a sampling frequency of 61.44MHz and everything being quadrature sampled, how do I end up with only half of that bandwidth in the end? Is it the multiply conjugate that halves the bandwidth? Do I need to 2x upsample before that operation? Do I need to use complex taps on the FIR filter instead of real taps?

GRC FlowGraph

  • $\begingroup$ never be embarassed to ask! That's how you learn. Welcome here! $\endgroup$ Nov 18, 2021 at 22:59
  • $\begingroup$ I added a 2x up-sampling before the delay and multiply blocks, and that works, I can now see frequency components that are >30.72MHz at the correct (not aliased) frequencies, but I don't understand why that's necessary. Which operation is squashing the effective bandwidth in half? $\endgroup$
    – Andrew
    Nov 19, 2021 at 0:27
  • 1
    $\begingroup$ Multiplying the signal with a delayed version of itself will create double frequency terms ($\cos^2(x)=1/2+1/2\cos(2x)$). You probably need a lowpass filter after the multiplication to remove the the harmonics. $\endgroup$
    – Harris
    Nov 19, 2021 at 0:32
  • $\begingroup$ Yes, there are harmonics, but they don't bother me too much. I'm using this for blind symbol rate detection of m-psk (or qam) type signals, so the only one I care about is the first peak. screenshot that one is obviously small enough that it wasn't causing the aliasing issue, but anything over 30.72MHz (or 30.72 MSym/sec) before was $\endgroup$
    – Andrew
    Nov 19, 2021 at 0:48
  • $\begingroup$ Are you saying that you are starting with a complex signal that has a unique spectrum from -fs/2 to +fs/2 and then you have a real output with a Hermitian symmetric spectrum over that same frequency range (both sampled at fs)? Is your input complex and your output real? $\endgroup$ Nov 19, 2021 at 1:24

1 Answer 1


When you multiply a signal by it's conjugate you would get a real result given the phase terms cancel in the conjugate multiplication:

$$A[n]e^{j\phi[n]}A[n]e^{-j\phi[n]} = A^2[n]$$

Thus we see we get a real result and specifically the square of the magnitude. However to be very clear, this will only occur reliably when the signal and its conjugate product are synchronized in time. The OP has stated that the conjugate product is the signal with a delayed version of itself, as:

$$A[n]e^{j\phi[n]}A[n-1]e^{-j\phi[n-1]} = A[n]A[n-1]e^{j(\phi[n]-\phi[n-1])}$$

This is a classic conjugate product frequency discriminator that can be used to correct for carrier offsets. The result gives us the phase between the two successive samples. It will only be real when there is no phase variation between adjacent samples. The two samples are separated in time, and frequency is given as the derivative of phase versus time (change in phase versus a change in time).

If there was no carrier offset for a baseband signal, the result could be real if the phase is not changing from sample to sample (other than the modulation itself). Typically with bandlimited complex waveforms (QPSK, QAM etc) we would still see phase variations between every sample. For equiprobable data, these variations would average to zero and the long term average out of the complex conjugate product with delay would still provide a reasonable error metric for carrier offset used in carrier tracking loops.

For carrier recovery applications where we drive the error term (the longer term average out of the cross product) to zero, we can use the small angle approximation and therefore extract the phase measurement from the imaginary portion of the product alone, which then reduces the frequency discriminator two two multiplies for each complex pair of samples as shown in the diagram below (this is a common frequency discrimination technique):

cross product frequency discriminator

  • $\begingroup$ Dan, don't you have to divide by something like the $I[n]I[n-1]+Q[n]Q[n-1]$? And apply a log or arctan somewhere? $\endgroup$ Nov 19, 2021 at 19:20
  • $\begingroup$ @robertbristow-johnson for most carrier recovery applications when tracking we just need an error signal that is proportional to frequency error rather than an accurate phase measurement. If the signal is AGC’d then it can be as simple as this without further processing. $\endgroup$ Nov 19, 2021 at 20:45
  • $\begingroup$ The imaginary output of the complex conjugate multiplication is proportional to the sine of the phase, and for small angles the sine of the phase is approximately the phase…. $\endgroup$ Nov 19, 2021 at 21:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.