From f078273a8ab73fcdd3fa8402977884d428045d9f Mon Sep 17 00:00:00 2001 From: Thomas Tsou Date: Tue, 29 Oct 2013 15:55:47 -0400 Subject: Transceiver52M: Separate transceiver per-slot state information Collect the slot information into an indpendent state object. This will allow us to easily create multiple instances of internal state variables without having to replicate the transceiver object itself. Signed-off-by: Thomas Tsou --- Transceiver52M/Transceiver.h | 100 +++++++++++++++++++++++++++++-------------- 1 file changed, 69 insertions(+), 31 deletions(-) (limited to 'Transceiver52M/Transceiver.h') diff --git a/Transceiver52M/Transceiver.h b/Transceiver52M/Transceiver.h index 4b549ef..1f8bed2 100644 --- a/Transceiver52M/Transceiver.h +++ b/Transceiver52M/Transceiver.h @@ -30,6 +30,54 @@ #include #include +class Transceiver; + +/** Channel descriptor for transceiver object and channel number pair */ +struct TransceiverChannel { + TransceiverChannel(Transceiver *trx, int num) + { + this->trx = trx; + this->num = num; + } + + ~TransceiverChannel() + { + } + + Transceiver *trx; + size_t num; +}; + +/** Internal transceiver state variables */ +struct TransceiverState { + TransceiverState(); + ~TransceiverState(); + + /* Initialize a multiframe slot in the filler table */ + void init(size_t slot, signalVector *burst); + + int chanType[8]; + + /* Last timestamp of each timeslot's channel estimate */ + GSM::Time chanEstimateTime[8]; + + /* The filler table */ + signalVector *fillerTable[102][8]; + int fillerModulus[8]; + + /* Most recent channel estimate of all timeslots */ + signalVector *chanResponse[8]; + + /* Most recent DFE feedback filter of all timeslots */ + signalVector *DFEForward[8]; + signalVector *DFEFeedback[8]; + + /* Most recent SNR, timing, and channel amplitude estimates */ + float SNRestimate[8]; + float chanRespOffset[8]; + complex chanRespAmplitude[8]; +}; + /** The Transceiver class, responsible for physical layer of basestation */ class Transceiver { private: @@ -66,27 +114,6 @@ private: IDLE ///< timeslot is an idle (or dummy) burst } CorrType; - - /** Codes for channel combinations */ - typedef enum { - FILL, ///< Channel is transmitted, but unused - I, ///< TCH/FS - II, ///< TCH/HS, idle every other slot - III, ///< TCH/HS - IV, ///< FCCH+SCH+CCCH+BCCH, uplink RACH - V, ///< FCCH+SCH+CCCH+BCCH+SDCCH/4+SACCH/4, uplink RACH+SDCCH/4 - VI, ///< CCCH+BCCH, uplink RACH - VII, ///< SDCCH/8 + SACCH/8 - VIII, ///< TCH/F + FACCH/F + SACCH/M - IX, ///< TCH/F + SACCH/M - X, ///< TCH/FD + SACCH/MD - XI, ///< PBCCH+PCCCH+PDTCH+PACCH+PTCCH - XII, ///< PCCCH+PDTCH+PACCH+PTCCH - XIII, ///< PDTCH+PACCH+PTCCH - NONE, ///< Channel is inactive, default - LOOPBACK ///< similar go VII, used in loopback testing - } ChannelCombination; - float mNoiseLev; ///< Average noise level noiseVector mNoises; ///< Vector holding running noise measurements @@ -116,22 +143,13 @@ private: int mSPSRx; ///< number of samples per Rx symbol bool mOn; ///< flag to indicate that transceiver is powered on - ChannelCombination mChanType[8]; ///< channel types for all timeslots double mTxFreq; ///< the transmit frequency double mRxFreq; ///< the receive frequency int mPower; ///< the transmit power in dB unsigned mTSC; ///< the midamble sequence code - int fillerModulus[8]; ///< modulus values of all timeslots, in frames - signalVector *fillerTable[102][8]; ///< table of modulated filler waveforms for all timeslots unsigned mMaxExpectedDelay; ///< maximum expected time-of-arrival offset in GSM symbols - GSM::Time channelEstimateTime[8]; ///< last timestamp of each timeslot's channel estimate - signalVector *channelResponse[8]; ///< most recent channel estimate of all timeslots - float SNRestimate[8]; ///< most recent SNR estimate of all timeslots - signalVector *DFEForward[8]; ///< most recent DFE feedforward filter of all timeslots - signalVector *DFEFeedback[8]; ///< most recent DFE feedback filter of all timeslots - float chanRespOffset[8]; ///< most recent timing offset, e.g. TOA, of all timeslots - complex chanRespAmplitude[8]; ///< most recent channel amplitude of all timeslots + TransceiverState mState; public: @@ -161,6 +179,26 @@ public: /** attach the radioInterface transmit FIFO */ void transmitFIFO(VectorFIFO *wFIFO) { mTransmitFIFO = wFIFO;} + /** Codes for channel combinations */ + typedef enum { + FILL, ///< Channel is transmitted, but unused + I, ///< TCH/FS + II, ///< TCH/HS, idle every other slot + III, ///< TCH/HS + IV, ///< FCCH+SCH+CCCH+BCCH, uplink RACH + V, ///< FCCH+SCH+CCCH+BCCH+SDCCH/4+SACCH/4, uplink RACH+SDCCH/4 + VI, ///< CCCH+BCCH, uplink RACH + VII, ///< SDCCH/8 + SACCH/8 + VIII, ///< TCH/F + FACCH/F + SACCH/M + IX, ///< TCH/F + SACCH/M + X, ///< TCH/FD + SACCH/MD + XI, ///< PBCCH+PCCCH+PDTCH+PACCH+PTCCH + XII, ///< PCCCH+PDTCH+PACCH+PTCCH + XIII, ///< PDTCH+PACCH+PTCCH + NONE, ///< Channel is inactive, default + LOOPBACK ///< similar go VII, used in loopback testing + } ChannelCombination; + protected: /** drive reception and demodulation of GSM bursts */ -- cgit v1.2.3