Demodulating FSK - No Preamble, Syncword, CRC...?

Demodulating FSK - No Preamble, Syncword, CRC...

I am a newbie - some electronics - some arduino projects - new to RF
Programming - many years experience

I am trying to a FSK Demodulate a signal of Pager buttons.
The type where there is a single button, sometimes used in shops to call the next customer to a counter.

I am trying to create a USB interface to a PC, using a RF Module and Arduino.

What I have tried and know so far.
Center Frequency = 434.32MHz
Encoding = 2FSK

I used GNU-Radio with an RTLSDR and got the attached images.
It looks like there is NO Preamble, Syncword, CRC so I think I have to receive data in Raw Mode.
I have tried a couple of RF Modules (before I knew what the signal looks like) but they all have
predefined packet structures that requires a 101010... Preamble.

What I can see from the current hardware:
The caller buttons have a PT2240B-S encoder
The current Receiver (w/o PC interface) is using a ADF7021 transceiver.

I have ADF7021 transceivers but can't find any details online on how to wire it to an Arduino.
I contacted the manufacturers but they were of no help.

As far as I can see the SI4463 RFModule can work in "Raw Mode", but I am not sure if it can solve my problem.

Every time I want to try a module it is $70 + 2 weeks time lost to import because I can't find it locally
The HC-12 module has a SI4463 chip but it is AT command based and I don't see any way to configure it to receive raw data.

Of course cost is a factor, so I don't want to overkill with a HackRF or MicroModem

I think this should be simple (For someone knowing what they are doing :^)

Please help - What is my best approach?

The upper trace in your diagram looks like a bitstream out of signal with about a 1Khz carrier which has demodulated by your software radio.
If the signal was originally a 2 tone FSK signal, it would have sounded like the noise you hear when your telephone is connected to a fax machine.
So basically, it is an audio signal. The frequency of the radio channel on which it was transmitted is not really relevant to the decoding of the signal.

  1. If the original signal is an AFSK, relevant is the audio channel frequency (say 1100 KHz), the frequency of the Marks (say 1200 Hz) and the frequency of the spaces (say 2200Hz). You need a demodulater to convert this into a bit stream.

  2. The bit stream sample you have shown is too short to see how data bytes are encoded onto it (number of start bits, stop bits, whether you can read the bits directly or if bit transitions are used to identify bits, if they are packed into frames, training sequences etc. etc. ).

What I can say I have some experience of solving a similar problem for interpreting AFSK used for encoding Caller IDs in telephone signals using a software demodulator (using part of the Arduino APRS library found on http://unsigned.io/ ) on a variety of Arduinos and an ESP8266. One of my projects is here. Arduino telephone caller ID system - Exhibition / Gallery - Arduino Forum Arduino telephone caller ID system - Exhibition / Gallery - Arduino Forum However, in that case, the encoding of the bit stream was standardised (international telephony standards) and well documented so it the interpretation was relatively straight forward (just took a lot of time develop). If you can find a document describing the bitstream encoding for your application, it could save a huge amount of reverse engineering.

Thank you so much for taking the time to give me such a detailed response.

What I was told when I got the pager hardware, was that is is using FSK... and at the back of the caller it states 434.6Mhz... I found that the center frequency is 434.32Mhz

I am new to GNU-Radio, but see the attached image for what I have done to the signal to get the image.

  1. The bit stream sample that I have have shown is the complete stream and it is just repeated with some
    0s in between - See attached image of 3 different pagers - It does not look like there are any start bits... (see marked in green) the sequences start different...
    All three ends with the same bits... (of course "coincidence is a probability")

I also don't need to decode the streams to anything meaningful... I just need to be able to identify the pagers uniquely (hope this sentence make sense) when the button is pressed.
There is no documentation available on the encoding, but I think it is just straight forward transmitted as the PT2240B-S encodes it.

I also attached a FFT plot of the original signal.

Also ... It will be great to hear from anybody that has used the SI4463 RF module in RAW/Direct mode.

FFT Plot.png

OK. I see it looks like a 16bit data stream repeated multiple times and each device sends always the same data stream so you can identify the sender without interpreting that data stream.

Unfortunately, I have no experience of the Si4463 radio device so I hope you get some better advice.

All I can say is this, which you have probably found out yourself by now:
There is a "WDS" method of programming the device. There is also an Excel Spreadsheet for generating the parameters www.silabs.com/documents/public/software/Si443x-Register-Settings_RevB1.xls . There is an Arduino Library RadioHead which has an RF24 driver which claims to support the Si4463. But it is not for the faint hearted.