aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Transceiver52M/Transceiver.cpp19
-rw-r--r--Transceiver52M/Transceiver.h3
-rw-r--r--Transceiver52M/sigProcLib.cpp9
-rw-r--r--Transceiver52M/sigProcLib.h4
4 files changed, 24 insertions, 11 deletions
diff --git a/Transceiver52M/Transceiver.cpp b/Transceiver52M/Transceiver.cpp
index a1c6f1b..1f59f78 100644
--- a/Transceiver52M/Transceiver.cpp
+++ b/Transceiver52M/Transceiver.cpp
@@ -119,7 +119,8 @@ Transceiver::Transceiver(int wBasePort,
mTransmitLatency(wTransmitLatency), mRadioInterface(wRadioInterface),
rssiOffset(wRssiOffset),
mSPSTx(tx_sps), mSPSRx(rx_sps), mChans(chans), mOn(false),
- mTxFreq(0.0), mRxFreq(0.0), mTSC(0), mMaxExpectedDelay(0), mWriteBurstToDiskMask(0)
+ mTxFreq(0.0), mRxFreq(0.0), mTSC(0), mMaxExpectedDelayAB(0), mMaxExpectedDelayNB(0),
+ mWriteBurstToDiskMask(0)
{
txFullScale = mRadioInterface->fullScaleInputValue();
rxFullScale = mRadioInterface->fullScaleOutputValue();
@@ -535,18 +536,19 @@ int Transceiver::detectBurst(TransceiverState *state, signalVector &burst,
switch (type) {
case EDGE:
rc = detectEdgeBurst(burst, mTSC, threshold, mSPSRx,
- amp, toa, mMaxExpectedDelay);
+ amp, toa, mMaxExpectedDelayNB);
if (rc > 0)
break;
else
type = TSC;
case TSC:
rc = analyzeTrafficBurst(burst, mTSC, threshold, mSPSRx,
- amp, toa, mMaxExpectedDelay);
+ amp, toa, mMaxExpectedDelayNB);
break;
case RACH:
threshold = 6.0;
- rc = detectRACHBurst(burst, threshold, mSPSRx, amp, toa);
+ rc = detectRACHBurst(burst, threshold, mSPSRx, amp, toa,
+ mMaxExpectedDelayAB);
break;
default:
LOG(ERR) << "Invalid correlation type";
@@ -753,9 +755,16 @@ void Transceiver::driveControl(size_t chan)
//set expected maximum time-of-arrival
int maxDelay;
sscanf(buffer,"%3s %s %d",cmdcheck,command,&maxDelay);
- mMaxExpectedDelay = maxDelay; // 1 GSM symbol is approx. 1 km
+ mMaxExpectedDelayAB = maxDelay; // 1 GSM symbol is approx. 1 km
sprintf(response,"RSP SETMAXDLY 0 %d",maxDelay);
}
+ else if (strcmp(command,"SETMAXDLYNB")==0) {
+ //set expected maximum time-of-arrival
+ int maxDelay;
+ sscanf(buffer,"%3s %s %d",cmdcheck,command,&maxDelay);
+ mMaxExpectedDelayNB = maxDelay; // 1 GSM symbol is approx. 1 km
+ sprintf(response,"RSP SETMAXDLYNB 0 %d",maxDelay);
+ }
else if (strcmp(command,"SETRXGAIN")==0) {
//set expected maximum time-of-arrival
int newGain;
diff --git a/Transceiver52M/Transceiver.h b/Transceiver52M/Transceiver.h
index 79b487a..472adbe 100644
--- a/Transceiver52M/Transceiver.h
+++ b/Transceiver52M/Transceiver.h
@@ -227,7 +227,8 @@ private:
double mTxFreq; ///< the transmit frequency
double mRxFreq; ///< the receive frequency
unsigned mTSC; ///< the midamble sequence code
- unsigned mMaxExpectedDelay; ///< maximum expected time-of-arrival offset in GSM symbols
+ unsigned mMaxExpectedDelayAB; ///< maximum expected time-of-arrival offset in GSM symbols for Access Bursts (RACH)
+ unsigned mMaxExpectedDelayNB; ///< maximum expected time-of-arrival offset in GSM symbols for Normal Bursts
unsigned mWriteBurstToDiskMask; ///< debug: bitmask to indicate which timeslots to dump to disk
std::vector<TransceiverState> mStates;
diff --git a/Transceiver52M/sigProcLib.cpp b/Transceiver52M/sigProcLib.cpp
index f3fa4f0..9674aa8 100644
--- a/Transceiver52M/sigProcLib.cpp
+++ b/Transceiver52M/sigProcLib.cpp
@@ -1816,21 +1816,22 @@ int detectGeneralBurst(signalVector &rxBurst,
*
* Correlation window parameters:
* target: Tail bits + RACH length (reduced from 41 to a multiple of 4)
- * head: Search 4 symbols before target
- * tail: Search 10 symbols after target
+ * head: Search 4 symbols before target
+ * tail: Search 4 symbols + maximum expected delay
*/
int detectRACHBurst(signalVector &rxBurst,
float thresh,
int sps,
complex &amp,
- float &toa)
+ float &toa,
+ unsigned maxTOA)
{
int rc, target, head, tail;
CorrelationSequence *sync;
target = 8 + 40;
head = 4;
- tail = 10;
+ tail = 4 + maxTOA;
sync = gRACHSequence;
rc = detectGeneralBurst(rxBurst, thresh, sps, amp, toa,
diff --git a/Transceiver52M/sigProcLib.h b/Transceiver52M/sigProcLib.h
index 870eb1a..93251b5 100644
--- a/Transceiver52M/sigProcLib.h
+++ b/Transceiver52M/sigProcLib.h
@@ -192,13 +192,15 @@ bool energyDetect(signalVector &rxBurst,
@param sps The number of samples per GSM symbol.
@param amplitude The estimated amplitude of received RACH burst.
@param TOA The estimate time-of-arrival of received RACH burst.
+ @param maxTOA The maximum expected time-of-arrival
@return positive if threshold value is reached, negative on error, zero otherwise
*/
int detectRACHBurst(signalVector &rxBurst,
float detectThreshold,
int sps,
complex &amplitude,
- float &TOA);
+ float &TOA,
+ unsigned maxTOA);
/**
Normal burst correlator, detector, channel estimator.