From: okcsampson Date: Mon, 19 Jun 2017 04:12:45 +0000 (+0000) Subject: Fix bugs in coarse sync in ofdm.c X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=515c59a59a68723ed8ef6808a8022062e68813fc;p=freetel-svn-tracking.git Fix bugs in coarse sync in ofdm.c git-svn-id: https://svn.code.sf.net/p/freetel/code@3216 01035d8c-6547-0410-b346-abe4f91aad63 --- diff --git a/codec2-dev/src/ofdm.c b/codec2-dev/src/ofdm.c index 5397e444..fcf85599 100644 --- a/codec2-dev/src/ofdm.c +++ b/codec2-dev/src/ofdm.c @@ -154,19 +154,24 @@ static complex float vector_conjugate_sum(complex float *a, int num_elements) { */ static int coarse_sync(struct OFDM *ofdm, complex float *rx, int length) { - int Npsam = (OFDM_M + OFDM_NCP); - int Ncorr = length - (OFDM_SAMPLESPERFRAME + Npsam); - int i; - - assert(Ncorr > 0); - + complex float csam; + complex float rxa; + complex float rxb; + int Ncorr = length - (OFDM_SAMPLESPERFRAME + (OFDM_M + OFDM_NCP)); float corr[Ncorr]; + int i, j; for (i = 0; i < Ncorr; i++) { - complex float csam = conjf(ofdm->rate_fs_pilot_samples[i]); + rxa = 0.0f + 0.0f *I; + rxb = 0.0f + 0.0f *I; - corr[i] = cabsf(rx[i] * csam); - corr[i] += cabsf(rx[i + OFDM_SAMPLESPERFRAME] * csam); + for (j = 0; j < (OFDM_M + OFDM_NCP); j++) { + csam = conjf(ofdm->rate_fs_pilot_samples[j]); + rxa += (rx[i + j] * csam); + rxb += (rx[i + j + OFDM_SAMPLESPERFRAME] * csam); + } + + corr[i] = cabsf(rxa) + cabsf(rxb); } /* find the max magnitude and its index */ @@ -480,8 +485,11 @@ void ofdm_demod(struct OFDM *ofdm, int *rx_bits, COMP *rxbuf_in) { if (ofdm->timing_en == true) { /* update timing at start of every frame */ - st = (OFDM_M + OFDM_NCP + OFDM_SAMPLESPERFRAME + 1) - floorf(OFDM_FTWINDOWWIDTH / 2) + ofdm->timing_est; - en = st + OFDM_SAMPLESPERFRAME - 1 + OFDM_M + OFDM_NCP + OFDM_FTWINDOWWIDTH - 1; + //st = (OFDM_M + OFDM_NCP + OFDM_SAMPLESPERFRAME + 1) - floorf(OFDM_FTWINDOWWIDTH / 2) + ofdm->timing_est; + //en = st + OFDM_SAMPLESPERFRAME - 1 + OFDM_M + OFDM_NCP + OFDM_FTWINDOWWIDTH - 1; + + st = (OFDM_M + OFDM_NCP + OFDM_SAMPLESPERFRAME) - floorf(OFDM_FTWINDOWWIDTH / 2) + ofdm->timing_est; + en = st + OFDM_SAMPLESPERFRAME - 1 + OFDM_M + OFDM_NCP + OFDM_FTWINDOWWIDTH; complex float work[(en - st)];