I'm working on demodulating an fsk signal sent from a cubesat on the ground to an antenna station. I'm trying to do it in GNU radio but I am not quite getting the original signal back. The cubesat uses a si4464 radio and I have the fsk signal centered at 434 mhz with the mark and space being +- 20khz. I've put a screenshot below of the gnu radio setup I am using to decode it. I think my problem is in my symbol sync because I am getting the right sequence of 10101010 to start the signal but then I am occasionally getting an extra 0 or 1 in the signal.

As for my thought process going into this, the USRP source already demods the signal to be centered at "0" hz with the mark and space being on the positive and negative side. I put a squelch on it to only read data when a strong signal is received. I then put a quadrature demod to turn the positive and negative frequencies into 1 or -1. The symbol sync should then sample this wave at the appropriate time, and from there, it slices it into a 1 or 0. The sample rate of the SDR is 400k and the symbol rate is 1000 so I have 400 samples per symbol. The last bit just packs the bits to a byte and then writes it to a file. If anyone has any suggestions for things I am missing or ways to do this better (including already written software packages) I would love to know about it.

Thanks for your help

GNU radio flowchart for fsk decoding


That extra 1 and 0 could come from different signals around 431MHz. Since you are not doing any lowpass filtering you'r demodulator gets whole 400kHz band (your USRP sample rate). I'd suggest putting lowpass filter after USRP source and double check signal you are receiving with QT GUI frequency sink. Good luck!


Your Answer

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

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