aboutsummaryrefslogtreecommitdiffstats
path: root/Transceiver52M/sigProcLib.cpp
diff options
context:
space:
mode:
authorTom Tsou <tom.tsou@ettus.com>2016-04-26 19:28:59 -0700
committerTom Tsou <tom.tsou@ettus.com>2016-04-26 19:31:14 -0700
commitd2b070369dd5341ac42ec091370d8bcd5a8ac5ee (patch)
tree93fc3cb7798228683b32f80c16cab2608cff39c3 /Transceiver52M/sigProcLib.cpp
parent9664c3a6e7f6bb1f83c2a55d6e6b1c7b59a99024 (diff)
uhd: Correct timing alignment in 8-PSK and GMSK downlink bursts
Delay the EDGE downlink bursts by one symbol in order to match GMSK pulse shaping group delay. The difference in group delay arises from the dual pulse filter combination of the GMSK Laurent represenation whereas 8-PSK uses a single pulse linear filter. Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
Diffstat (limited to 'Transceiver52M/sigProcLib.cpp')
-rw-r--r--Transceiver52M/sigProcLib.cpp19
1 files changed, 14 insertions, 5 deletions
diff --git a/Transceiver52M/sigProcLib.cpp b/Transceiver52M/sigProcLib.cpp
index 2182550..6848727 100644
--- a/Transceiver52M/sigProcLib.cpp
+++ b/Transceiver52M/sigProcLib.cpp
@@ -935,26 +935,35 @@ static signalVector *mapEdgeSymbols(const BitVector &bits)
return symbols;
}
+/*
+ * EDGE 8-PSK rotate and pulse shape
+ *
+ * Delay the EDGE downlink bursts by one symbol in order to match GMSK pulse
+ * shaping group delay. The difference in group delay arises from the dual
+ * pulse filter combination of the GMSK Laurent represenation whereas 8-PSK
+ * uses a single pulse linear filter.
+ */
static signalVector *shapeEdgeBurst(const signalVector &symbols)
{
- size_t nsyms, nsamps = 625;
+ size_t nsyms, nsamps = 625, sps = 4;
signalVector *burst, *shape;
signalVector::iterator burst_itr;
nsyms = symbols.size();
- if (nsyms * 4 > nsamps)
+ if (nsyms * sps > nsamps)
nsyms = 156;
burst = new signalVector(nsamps, GSMPulse4->c0->size());
- burst_itr = burst->begin();
- for (size_t i = 0; i < nsyms; i++) {
+ /* Delay burst by 1 symbol */
+ burst_itr = burst->begin() + sps;
+ for (size_t i = 0; i < nsyms - 1; i++) {
float phase = i * 3.0f * M_PI / 8.0f;
Complex<float> rot = Complex<float>(cos(phase), sin(phase));
*burst_itr = symbols[i] * rot;
- burst_itr += 4;
+ burst_itr += sps;
}
/* Single Gaussian pulse approximation shaping */