egprs: Enable 8-PSK burst detection when EDGE is enabled
The command line EDGE option will enable 8-PSK burst detection on any slot where a normal burst is expected. The burst search order is 8-PSK first followed by GMSK. EDGE will force 4 SPS sampling on Tx and Rx. Along with twice the search correlation from 8-PSK and GMSK, EDGE will increase CPU utilization. Whether the increase is notable or not is dependent on the particular machine. Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
This commit is contained in:
parent
e88710881b
commit
64464e6c34
|
@ -130,7 +130,7 @@ Transceiver::Transceiver(int wBasePort,
|
|||
mClockSocket(wBasePort, wTRXAddress, mBasePort + 100),
|
||||
mTransmitLatency(wTransmitLatency), mRadioInterface(wRadioInterface),
|
||||
rssiOffset(wRssiOffset),
|
||||
mSPSTx(tx_sps), mSPSRx(rx_sps), mChans(chans), mOn(false),
|
||||
mSPSTx(tx_sps), mSPSRx(rx_sps), mChans(chans), mEdge(false), mOn(false),
|
||||
mTxFreq(0.0), mRxFreq(0.0), mTSC(0), mMaxExpectedDelayAB(0), mMaxExpectedDelayNB(0),
|
||||
mWriteBurstToDiskMask(0)
|
||||
{
|
||||
|
@ -169,7 +169,7 @@ Transceiver::~Transceiver()
|
|||
* are still expected to report clock indications through control channel
|
||||
* activity.
|
||||
*/
|
||||
bool Transceiver::init(int filler, size_t rtsc, unsigned rach_delay)
|
||||
bool Transceiver::init(int filler, size_t rtsc, unsigned rach_delay, bool edge)
|
||||
{
|
||||
int d_srcport, d_dstport, c_srcport, c_dstport;
|
||||
|
||||
|
@ -183,6 +183,8 @@ bool Transceiver::init(int filler, size_t rtsc, unsigned rach_delay)
|
|||
return false;
|
||||
}
|
||||
|
||||
mEdge = edge;
|
||||
|
||||
mDataSockets.resize(mChans);
|
||||
mCtrlSockets.resize(mChans);
|
||||
mControlServiceLoopThreads.resize(mChans);
|
||||
|
@ -620,6 +622,10 @@ SoftVector *Transceiver::pullRadioVector(GSM::Time &wTime, double &RSSI, bool &i
|
|||
GSM::Time time = radio_burst->getTime();
|
||||
CorrType type = expectedCorrType(time, chan);
|
||||
|
||||
/* Enable 8-PSK burst detection if EDGE is enabled */
|
||||
if (mEdge && (type == TSC))
|
||||
type = EDGE;
|
||||
|
||||
/* Debug: dump bursts to disk */
|
||||
/* bits 0-7 - chan 0 timeslots
|
||||
* bits 8-15 - chan 1 timeslots */
|
||||
|
|
|
@ -107,7 +107,7 @@ public:
|
|||
~Transceiver();
|
||||
|
||||
/** Start the control loop */
|
||||
bool init(int filler, size_t rtsc, unsigned rach_delay);
|
||||
bool init(int filler, size_t rtsc, unsigned rach_delay, bool edge);
|
||||
|
||||
/** attach the radioInterface receive FIFO */
|
||||
bool receiveFIFO(VectorFIFO *wFIFO, size_t chan)
|
||||
|
@ -223,6 +223,7 @@ private:
|
|||
int mSPSRx; ///< number of samples per Rx symbol
|
||||
size_t mChans;
|
||||
|
||||
bool mEdge;
|
||||
bool mOn; ///< flag to indicate that transceiver is powered on
|
||||
bool mHandover[8][8]; ///< expect handover to the timeslot/subslot
|
||||
double mTxFreq; ///< the transmit frequency
|
||||
|
|
|
@ -284,7 +284,8 @@ Transceiver *makeTransceiver(struct trx_config *config, RadioInterface *radio)
|
|||
trx = new Transceiver(config->port, config->addr.c_str(),
|
||||
config->tx_sps, config->rx_sps, config->chans,
|
||||
GSM::Time(3,0), radio, config->rssi_offset);
|
||||
if (!trx->init(config->filler, config->rtsc, config->rach_delay)) {
|
||||
if (!trx->init(config->filler, config->rtsc,
|
||||
config->rach_delay, config->edge)) {
|
||||
LOG(ALERT) << "Failed to initialize transceiver";
|
||||
delete trx;
|
||||
return NULL;
|
||||
|
@ -422,7 +423,6 @@ static void handle_options(int argc, char **argv, struct trx_config *config)
|
|||
break;
|
||||
case 'e':
|
||||
config->edge = true;
|
||||
config->rx_sps = 4;
|
||||
break;
|
||||
default:
|
||||
print_help();
|
||||
|
|
Loading…
Reference in New Issue