Bug

When input amplitude is too large, symbol_sync_cc get stuck.
Screenshot

[image: frame1]
<https://user-images.githubusercontent.com/7480424/50651077-3ee5e480-0fbd-11e9-9da4-a4d7f473944f.png>
[image: frame2]
<https://user-images.githubusercontent.com/7480424/50651078-3f7e7b00-0fbd-11e9-8b1b-6c42ef2c4d5b.png>
Tracing

   - in file symbol_sync_cc_impl.cc line 537:
   error = -488.4;
   advance_loop(error);
   - in file clock_tracking_loop.cc line 128 function advance_loop(float
   error) :
   before: d_avg_period=10.771521, d_beta=0.0090558, error=-488.4;
   d_avg_period = d_avg_period + d_beta * error;
   after: d_avg_period = -0.417
   out of range [d_min_avg_period, d_max_avg_period]
   - back to file symbol_sync_cc_impl.cc line 540:
   d_clock->phase_wrap();
   - in file clock_tracking_loop.cc line 145 function phase_wrap()

phase = -87.227, limit=-0.417/2=-0.20895, now we stuck in these while loops;
*ps: i think period should be d_avg_period, because avg period is estimated
symbol period. when loop bandwidth relatively larger ( 0.05~0.25 ),
limiting d_inst_period can make tracking error larger, even loop unlock.
i'll benchmark both later.*
Workaround

apply limit to d_avg_period immediately after d_avg_period changed

   - in file clock_tracking_loop.cc line 127

Ultimate solution

   - check every input, state and output in range when calculate control
   loop
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to