I was looking at some Stereo FM demodulators on the Internet, and I can't understand the use of the complex to real block for demodulation of the L-R signal (DSBSC-AM) which can be seen in different projects, for example:

  1. https://github.com/gnuradio/gnuradio/blob/master/gr-analog/python/analog/wfm_rcv_pll.py#L145-L147
  2. https://github.com/vsergeev/luaradio/blob/master/radio/composites/wbfmstereodemodulator.lua#L36-L39

My (possibly flawed) understanding is that complex to real can be used here only because in both cases there is a PLL which accurately tracks the phase. Without it, if we have knowledge of the frequency, but no knowledge of the phase, we would be able to demodulate correctly only by using the complex to magnitude operation as in normal AM (because in the worst case the signal may lie completely on the imaginary axis). Is this correct? Because I also explored the gr-rds project, and I can't understand how it works without a PLL block. There were PLL blocks until this commit but they were removed. Another example is the luaradio SSB demodulator which again uses complex to real without some type of carrier recovery.

So, my question is: what is the right way to demodulate a DSBSC-AM signal (with and without a pilot tone) and how is the complex to real (not complex to magnitude) block able to do it, even without a PLL in the rds_rx flowgraph?


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.