discuss-gnuradio
[Top][All Lists]
Advanced

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

Re: Symbol timing estimator block and CPM modulations


From: Andy Walls
Subject: Re: Symbol timing estimator block and CPM modulations
Date: Thu, 25 Jun 2020 10:14:57 -0400
User-agent: Evolution 3.32.5 (3.32.5-1.fc30)

Hi Nick:

On Wed, 2020-06-24 at 17:39 -0700, Nick Foster wrote:
Hi,

I'm finally getting around to doing some more CPM work and playing with Andy Walls's (fantastic!) symbol timing estimator block. I'm familiarizing myself with the block and had a few questions, mostly prompted by my failure to get it working correctly. =) The timing error detector I'm most interested in is the generalized MSK one. The outputs I'm getting look very reasonable for 2sps, but not at all reasonable for 1sps -- it seems like it's picking the wrong sampling phase to output.

Obviously something is wrong. :(

The number of output samples/symbol should not in any way affect the outcome. The TED input and output should only be clocked and processed at the symbol clock. You can see this in the output by looking at the red TED output error trace on your 2 sps output plot and observing it's sample and hold behavior (it only changes at the symbol clock).

First confession time:

1. I never tested the Gen MSK and GMSK TEDs (surprise!)

2. I never understood why the two TEDs were essentially the same, with just a different sign on the output. I just implemented them from the paper and book as is.

3. (Not that it is relevant to your problem )Tag propagation for 1 sps output is correct. Tags propagation for > 1 sps output may propagate a tag to a wrong (too early) sample within the output symbol.



At 2sps (2sps output at the top with timing error, 4sps input at the bottom):
image.png

At 1sps (1sps output at the top, 4sps input at the bottom):
image.png

The sampling instant in the 1sps case looks off -- I'm getting penalized with a lower SNR as a result. To compare, I went back to the old msk_timing_estimator I hacked together for gr-ais:
image.png
You can see it takes a while to lock on, but it does arrive at the correct sampling point eventually. I'm arriving at TED gains and loop bandwidths experimentally (informed by what little data the papers gave on that subject), but I've tried a whole slew without finding any which work well.

Let's eliminate some variables.

It turns out the the Symbol Sync block allows direct manipulation of the PI loop filter gains, alpha (proportional gain) and beta (integral gain) even though the GRC GUI XML didn't provide an option to do so. You just can't set them in the constructor. So you can skip playing with expected TED gain, damping factor, and loop BW, and just set the loop gains directly like in your old block: gain=> alpha. omega_gain => beta.

1. Can you please run a test where you set alpha and beta gains directly on the symbol sync block, and compare to the MSK timing recovery block with the equivalent gain settings? In this test, could you also plot out all of the diagnostic outputs from the symbol sync block. The the instantaneous symbol period estimate (T_inst in units of sps) and the average symbol clock period estimate (T_avg in units of sps) will give a pretty clear indication if the block thinks it has converged.

2. Can you please run an experiment where you either eliminate the "time_est" tag altogether, or adjust the placement of the "time_est" tag to as close as possible to the center of the 2nd or 3rd symbol in the preamble? I know that's kind of hard to get the right placement with modulated MSK and ISI, but having the time_est tag sitting out there in front on no symbol my be creating a pathologically bad initial condition.



I'm hoping Andy or anyone else with a detailed understanding of timing recovery (a rarefied group) could chime in here. I've attached the flowgraph I'm testing with.

If there are no bugs with the symbol sync block (haha) then this is just a matter of getting the right expected TED gain, damping factor, and loop bandwidth set, along with making sure the time_est hint tag is actually at a symbol center.

If there are bugs in the symbol sync block, it is likely about the internal "clocks" in the block not being clocked properly and/or feeding the TED at the wrong time or with the wrong values. I also have to look at how the TED is handling the values pushed to it.

Hopefully the experiments I asked for will let me know for certain that there is a bug in the symbol sync block.


Just one more side not, some TEDs expected gain will change based on pathological vs random symbol streams. The M&M TED exhibits this effect: the S-curve flattens to 0 on a ...1,-1,1,-1,1,-1,... symbol stream. I have not simulated the Gen MSK TED to see what happens to it's S-Curve on this AIS like preamble vs random data.

Regards,
Andy

Best,
Nick



reply via email to

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