|
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:
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.
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.
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
|
[Prev in Thread] | Current Thread | [Next in Thread] |