aboutsummaryrefslogtreecommitdiffstats
path: root/Transceiver52M/sigProcLib.cpp
diff options
context:
space:
mode:
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 */