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: Adrian Musceac
Subject: Re: [Discuss-gnuradio] Best in-tree blocks for clock recovery of 8FSK
Date: Mon, 02 Apr 2018 12:41:14 +0000

Hi Thomas,

I use it for 4FSK, it does work, not optimally it seems, but I attribute that to my lack of understandimg of the algorithm.
Regarding the square wave issue, I use a low pass filter in front of it with bandwidth = samp-rate / samples-per-symbol.

Regards,
Adrian

On April 2, 2018 11:54:21 AM UTC, Thomas Habets <address@hidden> wrote:
I just seem to recall that being said.

I've used M&M successfully in the past, but it does require some massaging of the data to not be "square wave" before it'll work. Also does it work (well) for M-FSK?

On 2 April 2018 at 11:16, Adrian Musceac <address@hidden> wrote:
Hi,

Why is the M&M algorithm discouraged?
I use successfully both in FSK and PSK demodulators. It seems to perform fine.

Regards,
Adrian


On April 2, 2018 8:48:00 AM UTC, Thomas Habets <address@hidden> 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), 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" };
 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
address@hidden
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio




--
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]