csdr
csdr copied to clipboard
Add WFM stereo decoding
Also RDS is a feature requested.
Hi! I am not sure whether this scheme would work properly, but maybe I am misunderstanding parts of it. The phase of the audio has to be the same for L+R and L-R, so you would probably want to take the 19k pilot tone, double it and mix the 38k tone with the L+R demodulated audio. Also, I would not put the LPF15k BEFORE the adding/substracting, because if those are IIR filters, they would introduce a phase change. You will probably already know the CUTESDR manual by Whiteley (2011), I find it an excellent publication with FM stereo and RDS demodulating/decoding working code in C: https://github.com/DD4WH/Teensy-ConvolutionSDR/wiki/Links-&-Resources
Also, in the Teensy Convolution SDR, I have implemented a simpler scheme for demodulating stereo FM, which might also be useful for libcsdr, because it needs very low processing power for stereo demodulation and even works on decent small microcontrollers like the Teensy 3.6: https://github.com/DD4WH/Teensy-ConvolutionSDR/wiki/Demodulation-modes
All the best, Frank DD4WH
Frank,
Thank you for your valuable thoughts on this topic.
I've just drafted this very quickly, without much research.
As far as I can see, I need to look into this topic at a deeper level when I'll come to implement it.
VY 73!
Andras, HA7ILM
Andras, unfortunately I am not a programmer and therefore not able to contribute directly to this Linux environment. For my project, your lib has helped me a lot (mainly your thesis, but also parts of the code). Thanks a lot for making all this open source and for your very nice work! 73 de Frank
Thanks!
Teensy-ConvolutionSDR also looks great!
My fork of NGSoftFM will be of your interest (on how to decode the composite signals). BTW the algorithm of csdr's fmdemod_quadri_cf() made my fork faster and taught me how to vectorize the code. Thank you very much! :)
Note well that the stereo MPX 38kHz subcarrier must be in the same phase with the 19kHz pilot signal, so it should be regenerated from the received 19kHz signal. See ITU-R Recommendation BS.450-3 Section 2.2.2.5 as follows:
2.2.2.5 The relative phase of the pilot signal and the sub-carrier is such that, when the transmitter is modulated by a multiplex signal for which A is positive and B = -A, this signal crosses the time axis with a positive slope each time the pilot signal has an instantaneous value of zero. The phase tolerance of the pilot signal should not exceed ± 3° from the above state. Moreover, a positive value of the multiplex signal corresponds to a positive frequency deviation of the main carrier.