discuss-gnuradio
[Top][All Lists]
Advanced

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

Re: [Discuss-gnuradio] Best in-tree blocks for clock recovery of 8FSK


From: Thomas Habets
Subject: Re: [Discuss-gnuradio] Best in-tree blocks for clock recovery of 8FSK
Date: Mon, 2 Apr 2018 12:51:19 +0100

It is indeed an amateur M-FSK. Like I said it's FT8[1] which is 8FSK, and was captured at 14.074MHz.
I've captured some 20m, 30m, and 40m (at the same time, because 10Msps is enough for that) and the goal is not so much actually learning what the messages are as learning to decode them. I use fldigi and wsjtx to actually use these protocols.

So you're saying there's no good way to do FSK decoding with in-tree blocks?

[1] https://en.wikipedia.org/wiki/WSJT_(amateur_radio_software)#FT8

On 2 April 2018 at 11:48, Jeff Long <address@hidden> wrote:
The gr-op25 code handles 4FSK. The demod and slicer code might be expanded to 8FSK.


On 04/02/2018 06:22 AM, Jeff Long wrote:
This looks like an amateur M-FSK signal. You might have luck with fldigi and save yourself some work. It uses FFTs and then analyzes frequency shifts. You could do some of this in GR, but syncing to the signal would be hard because you would miss a few transitions trying to get synced.

On 04/02/2018 04:48 AM, Thomas Habets wrote:
Hi.

As an experiment I'm trying to decode an FT8 signal I've captured. I've gotten far enough that I can clearly see the packet (https://blog.habets.se/tmp/ft8_packet.png <https://blog.habets.se/tmp/ft8_packet.png>), but now I want to actually turn that into bits.

I know it's 8FSK (the above screenshot is quad demod of that), but I have a few questions on clock recovery:

* Is the GFSK block only for BFSK? If so then that's out.
* Is there a "best" clock recovery block nowadays? I seem to recall "Clock Recovery MM" being discouraged in favor of "Polyphase Clock Sync".
* I'm trying to read up on the parameters Polyphase Clock Sync wants, but any pointers would be helpful.
* Would it be a good idea to throw in a costas loop for frequency tuning?
* Does Polyphase Clock Sync have the same dislike of "staircase" inputs? That is, I should try to make the center of the bits more "pointy"? (e.g. lowpass filter them)

I've done some custom OOT decoders before, so I'm not shy about that. Maybe the best thing is some whole-packet clock recovery[1]. But if I just write a block that takes the quad demod (see above screenshot) and finds the "platforms", outputting a message that is a list of floats, and then another block that takes a list of floats and the number 8 and decodes it as 8FSK, well it seems like I may be reimplementing things where I'm guessing someone might say "oh just use this block".

Also for experimentation and my own understanding I'd like to turn it into bits using in-tree blocks, if possible.

Maybe a correct Polyphase Clock Sync of the quad demod followed by a Constellation decoder? I could use the float as the phase, with magnitude 1. Does that make sense? Is it a good idea?

What I have so far is:
Data:

GRC:

Screenshot:
(everything off-screen to the right is failed clock recovery experiments)

Quad demod



-- 
typedef struct me_s {
  char name[]      = { "Thomas Habets" };
  char email[]     = { "address@hidden <mailto:address@hidden>" };
  char kernel[]    = { "Linux" };
  char *pgpKey[]   = { "http://www.habets.pp.se/pubkey.txt" };
  char pgp[] = { "9907 8698 8A24 F52F 1C2E  87F6 39A4 9EEA 460A 0169" };
  char coolcmd[]   = { "echo '. ./_&. ./_'>_;. ./_" };
} me_t;


_______________________________________________
Discuss-gnuradio mailing list


_______________________________________________
Discuss-gnuradio mailing list



-- 
typedef struct me_s {
 char name[]      = { "Thomas Habets" };
 char email[]     = { "address@hidden" };
 char kernel[]    = { "Linux" };
 char *pgpKey[]   = { "http://www.habets.pp.se/pubkey.txt" };
 char pgp[] = { "9907 8698 8A24 F52F 1C2E  87F6 39A4 9EEA 460A 0169" };
 char coolcmd[]   = { "echo '. ./_&. ./_'>_;. ./_" };
} me_t;

reply via email to

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