diff options
author | Alexander Chemeris <Alexander.Chemeris@gmail.com> | 2017-03-17 15:24:18 -0700 |
---|---|---|
committer | Alexander Chemeris <Alexander.Chemeris@gmail.com> | 2017-03-24 14:59:24 -0700 |
commit | 4e6c938024031f2dc6d891b75cdd48c5846afba8 (patch) | |
tree | 18e2e3e1176cc28cf780a61d1de2620fadc0b1da | |
parent | 4aa548f0c2da2c505624807b3b027eaccf5aa98a (diff) |
Move Transceiver::detectBurst() to sigProcLib to make it reusable.
Change-Id: I3cbe8e6e4f39dde02c945e6c9086c040e276845c
-rw-r--r-- | Transceiver52M/Transceiver.cpp | 35 | ||||
-rw-r--r-- | Transceiver52M/Transceiver.h | 4 | ||||
-rw-r--r-- | Transceiver52M/sigProcLib.cpp | 32 | ||||
-rw-r--r-- | Transceiver52M/sigProcLib.h | 22 |
4 files changed, 56 insertions, 37 deletions
diff --git a/Transceiver52M/Transceiver.cpp b/Transceiver52M/Transceiver.cpp index c1a63fd..e37c08e 100644 --- a/Transceiver52M/Transceiver.cpp +++ b/Transceiver52M/Transceiver.cpp @@ -542,38 +542,6 @@ CorrType Transceiver::expectedCorrType(GSM::Time currTime, } } -int Transceiver::detectBurst(signalVector &burst, - complex &, float &toa, CorrType type) -{ - int rc = 0; - - switch (type) { - case EDGE: - rc = detectEdgeBurst(burst, mTSC, BURST_THRESH, mSPSRx, - amp, toa, mMaxExpectedDelayNB); - if (rc > 0) - break; - else - type = TSC; - case TSC: - rc = analyzeTrafficBurst(burst, mTSC, BURST_THRESH, mSPSRx, - amp, toa, mMaxExpectedDelayNB); - break; - case RACH: - rc = detectRACHBurst(burst, BURST_THRESH, mSPSRx, amp, toa, - mMaxExpectedDelayAB); - break; - default: - LOG(ERR) << "Invalid correlation type"; - } - - if (rc > 0) - return type; - - return rc; -} - - /* * Demodulate GMSK by direct rotation and soft slicing. */ @@ -679,7 +647,8 @@ SoftVector *Transceiver::pullRadioVector(GSM::Time &wTime, double &RSSI, bool &i } /* Detect normal or RACH bursts */ - rc = detectBurst(*burst, amp, toa, type); + rc = detectAnyBurst(*burst, mTSC, BURST_THRESH, mSPSRx, type, amp, toa, + (type==RACH)?mMaxExpectedDelayAB:mMaxExpectedDelayNB); if (rc > 0) { type = (CorrType) rc; diff --git a/Transceiver52M/Transceiver.h b/Transceiver52M/Transceiver.h index 425b004..3c70e5c 100644 --- a/Transceiver52M/Transceiver.h +++ b/Transceiver52M/Transceiver.h @@ -202,10 +202,6 @@ private: /** send messages over the clock socket */ void writeClockInterface(void); - /** Detectbursts */ - int detectBurst(signalVector &burst, - complex &, float &toa, CorrType type); - /** Demodulate burst and output soft bits */ SoftVector *demodulate(signalVector &burst, complex amp, float toa, CorrType type); diff --git a/Transceiver52M/sigProcLib.cpp b/Transceiver52M/sigProcLib.cpp index 6f50f04..2de1816 100644 --- a/Transceiver52M/sigProcLib.cpp +++ b/Transceiver52M/sigProcLib.cpp @@ -1925,6 +1925,38 @@ int detectEdgeBurst(signalVector &burst, unsigned tsc, float threshold, return rc; } +int detectAnyBurst(signalVector &burst, unsigned tsc, float threshold, + int sps, CorrType type, complex &, float &toa, + unsigned max_toa) +{ + int rc = 0; + + switch (type) { + case EDGE: + rc = detectEdgeBurst(burst, tsc, threshold, sps, + amp, toa, max_toa); + if (rc > 0) + break; + else + type = TSC; + case TSC: + rc = analyzeTrafficBurst(burst, tsc, threshold, sps, + amp, toa, max_toa); + break; + case RACH: + rc = detectRACHBurst(burst, threshold, sps, amp, toa, + max_toa); + break; + default: + LOG(ERR) << "Invalid correlation type"; + } + + if (rc > 0) + return type; + + return rc; +} + signalVector *downsampleBurst(signalVector &burst) { signalVector *in, *out; diff --git a/Transceiver52M/sigProcLib.h b/Transceiver52M/sigProcLib.h index 7bdbde8..6413b47 100644 --- a/Transceiver52M/sigProcLib.h +++ b/Transceiver52M/sigProcLib.h @@ -255,6 +255,28 @@ int detectEdgeBurst(signalVector &burst, unsigned max_toa); /** + 8-PSK/GMSK/RACH burst detector + @param burst The received GSM burst of interest + @param tsc Midamble type (0..7) also known as TSC + @param threshold The threshold that the received burst's post-correlator SNR is compared against to determine validity. + @param sps The number of samples per GSM symbol. + @param amplitude The estimated amplitude of received TSC burst. + @param toa The estimate time-of-arrival of received TSC burst (in symbols). + @param max_toa The maximum expected time-of-arrival (in symbols). + @return positive value (CorrType) if threshold value is reached, + negative value (-SignalError) on error, + zero (SIGERR_NONE) if no burst is detected +*/ +int detectAnyBurst(signalVector &burst, + unsigned tsc, + float threshold, + int sps, + CorrType type, + complex &, + float &toa, + unsigned max_toa); + +/** Downsample 4 SPS to 1 SPS using a polyphase filterbank @param burst Input burst of at least 624 symbols @return Decimated signal vector of 156 symbols |