Decoding while DFing

I am looking for a way to decode RDS data from FM radio stations while tracking them. I couldn’t find anything in the docs about doing this so wondering if Kraken supports this natively or will need to write a new module to do this? Thanks!

The Kraken code doesn’t support demodulation or decoding, only direction finding.

You could try and code in a demodulator and RDS decoder in the signalProcessing Python script by using the block of data from one channel. I’m not sure if one block of data is enough, or if you need a continuous stream though.

I solved that problem with hardware–using another SDR receiver for reception and demodulation of the signals being tracked. SDR dongles aren’t too expensive and the software for them is free online.

It seemed like the shortest path to the destination.I like having the reception and direction finding receivers separate so they can be on different frequencies (when scanning) and the same freq. when monitoring the DF target. Viewing the Krakken control web page next to the SDR UI on the same laptop makes it easy to update the DF frequency (manually) to match the SDR receiver’s frequency.

Some SDR options I’ve used for a receiver are:

There are cheaper and more expensive options, depending on what you need.

Assuming reasonably low error, one (or a handful to fill in dropped data) to build out the frame should be enough?

Can you help me get a jump start by pointing out the modules / classes I should be working with to provide the raw data for demodulation?

Have a look at the run function in:

There you can access the current frame and access the raw coherent IQ data via the self.processed_signal array. You can choose to use that data before or after decimation (aka channelization). From there you can demodulate and decode it in any way you see fit by adding the appropriate code to do it.

I ended up copying the file write for DOA_value.html and sent another copy to DOA_value.csv as my third party app already has the hooks to ingest and process .csv. Any reason this is a dumb idea?

Should be fine. Make sure that your app reads the timestamp and avoids using the same reading if the polling time is fast.

1 Like