From 2518186b450c17382e2cd9adca912fb3cf7c41ec Mon Sep 17 00:00:00 2001 From: Tom Tsou Date: Mon, 18 May 2015 17:13:00 -0700 Subject: [PATCH] sigproc: Setup downlink bursts at 156.25 duration with 4 SPS Instead of extending 156/157 symbol sized bursts to 624/628 when 4 samples-per-symbol are used, use a fixed size of 625 samples, or 625.25 us. This is a breaking timing change. --- Transceiver52M/sigProcLib.cpp | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/Transceiver52M/sigProcLib.cpp b/Transceiver52M/sigProcLib.cpp index 4355fcee..4b2ccd26 100644 --- a/Transceiver52M/sigProcLib.cpp +++ b/Transceiver52M/sigProcLib.cpp @@ -44,6 +44,9 @@ using namespace GSM; /* Clipping detection threshold */ #define CLIP_THRESH 30000.0f +/* GSM 4 sps burst length */ +#define GSM_BURST_LEN_4SPS 625 + /** Lookup tables for trigonometric approximation */ float cosTable[TABLESIZE+1]; // add 1 element for wrap around float sinTable[TABLESIZE+1]; @@ -697,27 +700,22 @@ static signalVector *rotateBurst(const BitVector &wBurst, return shaped; } -static signalVector *modulateBurstLaurent(const BitVector &bits, - int guard_len, int sps) +/* + * Laurent decomposition based GMSK modulator - 4 SPS only + */ +static signalVector *modulateBurstLaurent(const BitVector &bits) { - int burst_len; + const int burst_len = GSM_BURST_LEN_4SPS; + const int sps = 4; + float phase; signalVector *c0_pulse, *c1_pulse, *c0_burst; signalVector *c1_burst, *c0_shaped, *c1_shaped; signalVector::iterator c0_itr, c1_itr; - /* - * Apply before and after bits to reduce phase error at burst edges. - * Make sure there is enough room in the burst to accomodate all bits. - */ - if (guard_len < 4) - guard_len = 4; - c0_pulse = GSMPulse->c0; c1_pulse = GSMPulse->c1; - burst_len = sps * (bits.size() + guard_len); - c0_burst = new signalVector(burst_len, c0_pulse->size()); c0_burst->isReal(true); c0_itr = c0_burst->begin(); @@ -826,7 +824,7 @@ signalVector *modulateBurst(const BitVector &wBurst, int guardPeriodLength, if (emptyPulse) return rotateBurst(wBurst, guardPeriodLength, sps); else if (sps == 4) - return modulateBurstLaurent(wBurst, guardPeriodLength, sps); + return modulateBurstLaurent(wBurst); else return modulateBurstBasic(wBurst, guardPeriodLength, sps); }