aboutsummaryrefslogtreecommitdiffstats
path: root/Transceiver52M
diff options
context:
space:
mode:
Diffstat (limited to 'Transceiver52M')
-rw-r--r--Transceiver52M/sigProcLib.cpp44
-rw-r--r--Transceiver52M/sigProcLib.h4
2 files changed, 22 insertions, 26 deletions
diff --git a/Transceiver52M/sigProcLib.cpp b/Transceiver52M/sigProcLib.cpp
index 0a1fd44..56a1a58 100644
--- a/Transceiver52M/sigProcLib.cpp
+++ b/Transceiver52M/sigProcLib.cpp
@@ -737,20 +737,6 @@ bool vectorSlicer(SoftVector *x)
return true;
}
-bool vectorSlicer(signalVector *x)
-{
-
- signalVector::iterator xP = x->begin();
- signalVector::iterator xPEnd = x->end();
- while (xP < xPEnd) {
- *xP = (complex) (0.5*(xP->real()+1.0F));
- if (xP->real() > 1.0) *xP = 1.0;
- if (xP->real() < 0.0) *xP = 0.0;
- xP++;
- }
- return true;
-}
-
static signalVector *rotateBurst(const BitVector &wBurst,
int guardPeriodLength, int sps)
{
@@ -2020,6 +2006,22 @@ static SoftVector *softSliceEdgeBurst(signalVector &burst)
}
/*
+ * Convert signalVector to SoftVector by taking real part of the signal.
+ */
+static SoftVector *signalToSoftVector(signalVector *dec)
+{
+ SoftVector *bits = new SoftVector(dec->size());
+
+ SoftVector::iterator bit_itr = bits->begin();
+ signalVector::iterator burst_itr = dec->begin();
+
+ for (; burst_itr < dec->end(); burst_itr++)
+ *bit_itr++ = burst_itr->real();
+
+ return bits;
+}
+
+/*
* Shared portion of GMSK and EDGE demodulators consisting of timing
* recovery and single tap channel correction. For 4 SPS (if activated),
* the output is downsampled prior to the 1 SPS modulation specific
@@ -2062,18 +2064,12 @@ SoftVector *demodGmskBurst(signalVector &rxBurst, int sps,
/* Shift up by a quarter of a frequency */
GMSKReverseRotate(*dec, 1);
- vectorSlicer(dec);
-
- bits = new SoftVector(dec->size());
-
- SoftVector::iterator bit_itr = bits->begin();
- signalVector::iterator burst_itr = dec->begin();
-
- for (; burst_itr < dec->end(); burst_itr++)
- *bit_itr++ = burst_itr->real();
-
+ /* Take real part of the signal */
+ bits = signalToSoftVector(dec);
delete dec;
+ vectorSlicer(bits);
+
return bits;
}
diff --git a/Transceiver52M/sigProcLib.h b/Transceiver52M/sigProcLib.h
index 7dca71f..ed72430 100644
--- a/Transceiver52M/sigProcLib.h
+++ b/Transceiver52M/sigProcLib.h
@@ -101,8 +101,8 @@ signalVector* correlate(signalVector *a,
unsigned startIx = 0,
unsigned len = 0);
-/** Operate soft slicer on real-valued portion of vector */
-bool vectorSlicer(signalVector *x);
+/** Operate soft slicer on a soft-bit vector */
+bool vectorSlicer(SoftVector *x);
/** GMSK modulate a GSM burst of bits */
signalVector *modulateBurst(const BitVector &wBurst,