From de1460aa9438f6a466a5fe4455ed968033d4ecdb Mon Sep 17 00:00:00 2001 From: tvoid Date: Tue, 15 Apr 2008 15:09:00 -0600 Subject: added m&m to burst_cf doubles to floats --- gsm-tvoid/src/lib/mm_c.cc | 73 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 gsm-tvoid/src/lib/mm_c.cc (limited to 'gsm-tvoid/src/lib/mm_c.cc') diff --git a/gsm-tvoid/src/lib/mm_c.cc b/gsm-tvoid/src/lib/mm_c.cc new file mode 100644 index 0000000..7b3e335 --- /dev/null +++ b/gsm-tvoid/src/lib/mm_c.cc @@ -0,0 +1,73 @@ + +#include "mm_c.h" + +mm_c::mm_c(float omega): + d_omega(omega), + d_mu(0.5), + d_x_1(0.0,0.0), + d_x_2(0.0,0.0), + d_a_1(0.0,0.0), + d_a_2(0.0,0.0), + d_gain_mu(0.01), + d_gain_omega(0.25 * d_gain_mu * d_gain_mu) +{} + + +gr_complex mm_c::slicer(gr_complex x) +{ + float real=SLICE_0_R, imag=SLICE_0_I; + + if(x.real() > 0.0) + real = SLICE_1_R; + + if(x.imag() > 0.0) + imag = SLICE_1_I; + + return gr_complex(real,imag); +} + +float mm_c::update(gr_complex x_0, gr_complex a_0) +{ + //mm vars + gr_complex x,y,u; + + x = (a_0 - d_a_2) * conj(d_x_1); + y = (x_0 - d_x_2) * conj(d_a_1); + u = y - x; + d_mm = u.real(); //error signal + + //limit d_mm + if (d_mm > 1.0) d_mm = 1.0; + else if (d_mm < -1.0) d_mm = -1.0; + + //error feedback + d_omega = d_omega + d_gain_omega * d_mm; + + //limit omega +/* + if (d_omega > d_max_omega) + d_omega = d_max_omega; + else if (d_omega < d_min_omega) + d_omega = d_min_omega; +*/ + //update mu + d_mu = d_mu + d_omega + d_gain_mu * d_mm; + //process mu / ii advances after burst processing for burst timing + + //update delay taps + d_x_2 = d_x_1; + d_x_1 = x_0; + d_a_2 = d_a_1; + d_a_1 = a_0; + + return d_mu; +} + + +float mm_c::update(gr_complex x_0) +{ + return update(x_0, slicer(x_0) ); +} + + + -- cgit v1.2.3