discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Discuss-gnuradio] Relative Newbie Question: PSK Demod Block - RDS/RDBS


From: Kevin McQuiggin
Subject: [Discuss-gnuradio] Relative Newbie Question: PSK Demod Block - RDS/RDBS Data Recovery
Date: Fri, 6 Nov 2015 21:40:03 -0800

Hi All:

I hope that this is not too simple a question for the group.  I have spent several weeks working on this issue (reading, studying, experimenting), and as success is still elusive, it is time to ask for assistance.  Thanks in advance for any assistance you may be able to give.  

This post is kind of long, but I am trying to provide thorough and complete information!


Goal:

My goal is data recovery and then decoding of RDS/RBDS 57 KHz sub carrier signals in the FM broadcast band. This is a learning exercise - I know of gr-rds; redsea, etc, but I want to accomplish this myself!  I’m not interested in downloading and running a working package!  I have used redsea for testing, but I want to learn the process and reach this goal this myself.

My post is specifically related to problems with the 57 KHz sub carrier recovery, and PSK demodulation of that signal.  See below.


System and Other Relevant Data:

USRP B200, good antenna
Ubuntu 14.04
Gnuradio 3.7.8
Year-old i5-based system, 32 GB RAM, USB 3.0 working.  Gnuradio and the USRP work well in all other respects.  I have several other analog receivers working.
“Redsea” works well on RDS recovery with an RTL dongle on the same antenna, so it is not a reception problem.  
I have read the RDBS specs front to back


Project Components:

There are two components to this project: the signal recovery and demodulation; and the post-processing to recover the RDS/RBDS blocks and groups from the demodulated data.  I am not interested at this time in processing the RDS data in real time.  I want to pack demod data bits and send them to a file sink.  Then I have written a C program that will read the data file and recover the RDS blocks and groups in a post-processing fashion.  At least in theory!  I need valid demod data first.

I have verified that the bit packing in my flowgraph, i.e. the LSB/MSB ordering of the individual demod bits is working appropriately.  My C program has also been pretty thoroughly tested.  If I can get valid data into it, I am pretty sure that it will recover RDS blocks and groups.


The Problem:

On the recovery/demodulation side, I am having problems in recovering the BPSK sub carrier and doing the demodulation.  I will present my flowgraph below.  


Summary of Flowgraph:

I use a USRP source tuned to a known-good RDS station at 93.7 MHz.  I use a low pass filter to isolate 200 KHz, then pass the signal through the WBFM receiver.  At one point I added a frequency sink here and could see the 57 KHz sub carrier clearly.

The output of the demodulator goes to a frequency translating FIR filter centred at 57 KHz with a bandwidth of ~2.6 KHz.  This signal goes into the PSK demodulator, set with what seems to be appropriate parameters - this is my main area of concern!

The RDS data stream runs at 1187.5 bps.  In the PSK demod block I compute “samples per signal” by dividing my samp_rate by the decimation of the FIR xlating filter (20), then further dividing by 1187.5 and casting to int, for a figure of 20 samples per symbol.

Bits (one per byte) coming out of the demod are packed in a LSB manner and then go into a file sink.  

I have tried several approaches to the demodulation (PFB, MPSK, PSK Demod, RRC filter, Costas Loop, CMA equalizer, etc) and through the use of constellation sinks I can see that in several iterations I have achieved a fairly good, stable 2-point constellation.  The guided tutorials and several other sources, including some videos on YouTube have been very helpful, but valid bits are eluding me.


Flowgraph:


I have run through likely 10 iterations of the flowgraph using various approaches, but as I stated above, while I have developed stable constellations, I have never achieved valid a valid RDS data stream in the file sink.  I see numerous valid blocks (although even random data will generate pseudo valid blocks, given the looseness of the RBDS spec) but not the expected series of valid blocks (type A, B, C, …) as per the RBDS specification.


Question:

Is my approach correct?  

Are my parameters correct?  I understand that the PSK Demod block contains the necessary RRC matching filter to balance the filter in the RDS transmitter.  I have left the rolloff at what seems to be a reasonable match, from the spec document.

Anything I am doing wrong?  I am a newbie to gnuradio, after all!


Conclusion:

Any assistance or commentary would be appreciated!


Thanks again in advance,

Kevin






Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail


reply via email to

[Prev in Thread] Current Thread [Next in Thread]