discuss-gnuradio
[Top][All Lists]
Advanced

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

[Discuss-gnuradio] symbol_sync_cc stuck when error too large (resulting


From: WarMonkey
Subject: [Discuss-gnuradio] symbol_sync_cc stuck when error too large (resulting d_avg_period goes negative)
Date: Mon, 7 Jan 2019 20:24:57 +0800

Bug

When input amplitude is too large, symbol_sync_cc get stuck.

Screenshot

frame1
frame2

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

reply via email to

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