aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Tsou <tom.tsou@ettus.com>2015-05-18 17:13:00 -0700
committerAlexander Chemeris <Alexander.Chemeris@gmail.com>2015-06-05 23:40:27 -0400
commit2518186b450c17382e2cd9adca912fb3cf7c41ec (patch)
tree1b0c3d2a49e77e81fb8ef4101756bd45c341b758
parent6512812e43179ae3e4bf85c3203f11e281f19cd0 (diff)
sigproc: Setup downlink bursts at 156.25 duration with 4 SPSfairwaves/625
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.
-rw-r--r--Transceiver52M/sigProcLib.cpp24
1 files changed, 11 insertions, 13 deletions
diff --git a/Transceiver52M/sigProcLib.cpp b/Transceiver52M/sigProcLib.cpp
index 4355fce..4b2ccd2 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);
}