From b873c75e3aa74c2c4e8ff17127c89ba06a19aba0 Mon Sep 17 00:00:00 2001 From: Piotr Krysik Date: Thu, 11 Jun 2009 12:13:19 +0200 Subject: doxygen coments - start, changes to sch search process --- src/lib/Assert.h | 2 +- src/lib/gsm_receiver_cf.cc | 27 +++++----- src/lib/gsm_receiver_cf.h | 132 ++++++++++++++++++++++++++++++++++++++------- 3 files changed, 129 insertions(+), 32 deletions(-) diff --git a/src/lib/Assert.h b/src/lib/Assert.h index acfb3f7..dd222b0 100644 --- a/src/lib/Assert.h +++ b/src/lib/Assert.h @@ -26,7 +26,7 @@ #include "stdio.h" #include -#define NDEBUG +// #define NDEBUG /**@name Macros for standard messages. */ //@{ diff --git a/src/lib/gsm_receiver_cf.cc b/src/lib/gsm_receiver_cf.cc index 3f8602a..827c600 100644 --- a/src/lib/gsm_receiver_cf.cc +++ b/src/lib/gsm_receiver_cf.cc @@ -113,8 +113,8 @@ gsm_receiver_cf::gsm_receiver_cf(gr_feval_dd *tuner, int osr) d_OSR(osr), d_chan_imp_length(CHAN_IMP_RESP_LENGTH), d_tuner(tuner), - d_counter(0), - d_fcch_start_pos(0), + d_samples_counter(0), +// d_fcch_start_pos(0), d_freq_offset(0), d_burst_nr(osr), d_state(first_fcch_search) @@ -166,9 +166,10 @@ gsm_receiver_cf::general_work(int noutput_items, case next_fcch_search: prev_freq_offset = d_freq_offset; if (find_fcch_burst(in, ninput_items[0])) { - if (abs(d_freq_offset) > 100) { + if (abs(d_freq_offset) > 100.0) { set_frequency(d_freq_offset); } + d_samples_counter = 0; produced_out = 0; d_state = sch_search; } else { @@ -389,10 +390,11 @@ bool gsm_receiver_cf::find_fcch_burst(const gr_complex *in, const int nitems) break; case fcch_found: - DCOUT("fcch found on position: " << d_counter + start_pos); +// DCOUT("fcch found on position: " << d_samples_counter + start_pos); + DCOUT("fcch found on position: " << start_pos); to_consume = start_pos + FCCH_HITS_NEEDED * d_OSR + 1; - d_fcch_start_pos = d_counter + start_pos; +// d_fcch_start_pos = d_samples_counter + start_pos; freq_offset = compute_freq_offset(best_sum, FCCH_HITS_NEEDED); d_freq_offset -= freq_offset; DCOUT("freq_offset: " << d_freq_offset); @@ -408,7 +410,7 @@ bool gsm_receiver_cf::find_fcch_burst(const gr_complex *in, const int nitems) } } - d_counter += to_consume; +// d_samples_counter += to_consume; consume_each(to_consume); return result; @@ -438,8 +440,9 @@ bool gsm_receiver_cf::find_sch_burst(const gr_complex *in, const int nitems , fl int to_consume = 0; bool end = false; bool result = false; - unsigned sample_nr_near_sch_start = d_fcch_start_pos + (FRAME_BITS - SAFETY_MARGIN) * d_OSR; - +// unsigned sample_nr_near_sch_start = d_fcch_start_pos + (FRAME_BITS - SAFETY_MARGIN) * d_OSR; + const unsigned sample_nr_near_sch_start = (FRAME_BITS - SAFETY_MARGIN + TS_BITS) * d_OSR; + enum states { start, reach_sch, search_not_finished, sch_found } sch_search_state; @@ -450,7 +453,7 @@ bool gsm_receiver_cf::find_sch_burst(const gr_complex *in, const int nitems , fl switch (sch_search_state) { case start: - if (d_counter < sample_nr_near_sch_start) { + if (d_samples_counter < sample_nr_near_sch_start) { sch_search_state = reach_sch; } else { sch_search_state = sch_found; @@ -458,8 +461,8 @@ bool gsm_receiver_cf::find_sch_burst(const gr_complex *in, const int nitems , fl break; case reach_sch: - if (d_counter + nitems >= sample_nr_near_sch_start) { - to_consume = sample_nr_near_sch_start - d_counter; + if (d_samples_counter + nitems >= sample_nr_near_sch_start) { + to_consume = sample_nr_near_sch_start - d_samples_counter; } else { to_consume = nitems; } @@ -479,7 +482,7 @@ bool gsm_receiver_cf::find_sch_burst(const gr_complex *in, const int nitems , fl } } - d_counter += to_consume; + d_samples_counter += to_consume; consume_each(to_consume); return result; } diff --git a/src/lib/gsm_receiver_cf.h b/src/lib/gsm_receiver_cf.h index 8e30b42..ce05b81 100644 --- a/src/lib/gsm_receiver_cf.h +++ b/src/lib/gsm_receiver_cf.h @@ -1,8 +1,8 @@ /* -*- c++ -*- */ /* - * Copyright 2004 Free Software Foundation, Inc. - * - * This file is part of GNU Radio + * @file + * @author Piotr Krysik + * @section LICENSE * * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -34,35 +34,30 @@ class gsm_receiver_cf; typedef boost::shared_ptr gsm_receiver_cf_sptr; typedef std::vector vector_complex; -/*! - * \brief Return a shared_ptr to a new instance of gsm_receiver_cf. - * - * To avoid accidental use of raw pointers, gsm_receiver_cf's - * constructor is private. howto_make_square_ff is the public - * interface for creating new instances. - */ gsm_receiver_cf_sptr gsm_make_receiver_cf(gr_feval_dd *tuner, int osr); -/*! - * \brief Receives fcch +/** GSM Receiver GNU Radio block + * GSM Receiver class supports frequency correction, synchronisation and + * MLSE (Maximum Likelihood Sequence Estimation) estimation of synchronisation + * bursts and normal bursts. * \ingroup block - * \sa */ class gsm_receiver_cf : public gr_block { private: + const int d_OSR; const int d_chan_imp_length; - gr_complex d_sch_training_seq[N_SYNC_BITS]; //encoded training sequence of a SCH burst - gr_complex d_norm_training_seq[TRAIN_SEQ_NUM][N_TRAIN_BITS]; - - gr_feval_dd *d_tuner; - unsigned d_counter; + gr_complex d_sch_training_seq[N_SYNC_BITS]; ///