diff options
author | Tom Tsou <tom.tsou@ettus.com> | 2015-05-18 13:57:54 -0700 |
---|---|---|
committer | Tom Tsou <tom.tsou@ettus.com> | 2015-05-18 16:35:35 -0700 |
commit | 577cd020c16e8d74d7464ea59157e7a44cbb6683 (patch) | |
tree | cdf1912d07046590d17c832a35e64c29262f194e /Transceiver52M/sigProcLib.cpp | |
parent | 88bbf1aafd4c5701608a319693a8e69222981eba (diff) |
sigproc: Add clipping detection on RACH and TSC input
Alert user of overdriven burst input indicated by a positive
threshold detector result. This indication serves as notification
that the receive RF gain level is too high for the configured
transceiver setup.
Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
Diffstat (limited to 'Transceiver52M/sigProcLib.cpp')
-rw-r--r-- | Transceiver52M/sigProcLib.cpp | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/Transceiver52M/sigProcLib.cpp b/Transceiver52M/sigProcLib.cpp index 54dd8fc..4501a13 100644 --- a/Transceiver52M/sigProcLib.cpp +++ b/Transceiver52M/sigProcLib.cpp @@ -40,6 +40,9 @@ using namespace GSM; #define TABLESIZE 1024 #define DELAYFILTS 64 +/* Clipping detection threshold */ +#define CLIP_THRESH 30000.0f + /** Lookup tables for trigonometric approximation */ float cosTable[TABLESIZE+1]; // add 1 element for wrap around float sinTable[TABLESIZE+1]; @@ -1369,6 +1372,18 @@ static int detectBurst(signalVector &burst, return 1; } +static int detectClipping(signalVector &burst, float thresh) +{ + for (size_t i = 0; i < burst.size(); i++) { + if (fabs(burst[i].real()) > thresh) + return 1; + if (fabs(burst[i].imag()) > thresh) + return 1; + } + + return 0; +} + /* * RACH burst detection * @@ -1390,7 +1405,10 @@ int detectRACHBurst(signalVector &rxBurst, CorrelationSequence *sync; if ((sps != 1) && (sps != 4)) - return -1; + return -SIGERR_UNSUPPORTED; + + if (detectClipping(rxBurst, CLIP_THRESH)) + return -SIGERR_CLIP; target = 8 + 40; head = 4; @@ -1406,7 +1424,7 @@ int detectRACHBurst(signalVector &rxBurst, delete corr; if (rc < 0) { - return -1; + return -SIGERR_INTERNAL; } else if (!rc) { if (amp) *amp = 0.0f; @@ -1443,7 +1461,10 @@ int analyzeTrafficBurst(signalVector &rxBurst, unsigned tsc, float thresh, CorrelationSequence *sync; if ((tsc < 0) || (tsc > 7) || ((sps != 1) && (sps != 4))) - return -1; + return -SIGERR_UNSUPPORTED; + + if (detectClipping(rxBurst, CLIP_THRESH)) + return -SIGERR_CLIP; target = 3 + 58 + 16 + 5; head = 4; @@ -1459,7 +1480,7 @@ int analyzeTrafficBurst(signalVector &rxBurst, unsigned tsc, float thresh, delete corr; if (rc < 0) { - return -1; + return -SIGERR_INTERNAL; } else if (!rc) { if (amp) *amp = 0.0f; |