AFSK demodulation

Status
Not open for further replies.

ereuter

Member
I'm interested in using a Teensy to do AFSK demodulation. I have mark and space frequencies of 1200 and 1800 Hz. I did find some very old references here to APRS receivers, which use a similar encoding, but nothing that ever got very far.

I'm wondering if I should use the audio library and filter on these frequencies and do peak detection, or if it wouldn't be well suited to that. The symbol rate is 1200 baud, so I need to detect single cycles.

I have implemented this in GNU Radio using a quadrature demodulator, but my DSP skills are pretty limited.

Does anyone have thoughts on this?

Thanks-
Eric
 
Hi Eric,

RTTY decoding as a special case of AFSK is implemented on Teensy here:

https://www.kk5jy.net/modem-v2/

and (two different decoders) here:

https://github.com/DD4WH/Teensy-ConvolutionSDR/blob/master/Teensy_Convolution_SDR.ino

One way of demodulation from IQ signals and subsequent decoding is explained briefly here:

https://github.com/df8oe/UHSDR/wiki/Digimodes

However, your high baud rate of 1200Bd and the shift of 600Hz sounds a bit strange to me, what kind of signals do you want to decode? Is this a university course project?

You could also consider using Goertzel filters centred on space and mark signals, they are much more efficient than using FFT or FIR filters.
 
Hi DD4WH-

Thanks for those leads. I didn't find any of those in my hours of googling.

This is for a railroad telemetry system. The reason for the 1200/1800 Hz frequencies is that it produces a continuous phase signal to limit bandwidth. One cycle of 1200 or 1.5 cycles of 1800.

I have a working decoder based on GNU Radio and python, but have wanted to come up with a cheap handheld decoder without the overhead of Linux so it can be powered on and off quickly.

I did a talk on this and another protocol at DEF CON last year: https://youtu.be/vloWB0LHT_4
My GNU Radio/Python implementation is here: https://github.com/ereuter/PyEOT

My approach is to use a frequency-translating FIR filter to shift 0 to 1500 Hz, and then run it through a quadrature demodulator. Then I can just look at the polarity of the output to decode a mark or space. It works very well, but of course I have unlimited computing resources on an actual computer.

Thanks for the links. I'll dig in.

Eric
AB1XO
 
Status
Not open for further replies.
Back
Top