mcbts: Add multi-ARFCN radio support
Add new radio interface "radioInterfaceMulti" for multi-carrier
support.
Only USRP B200/B210 devices are supported because of sample
rate requirements (3.2 Msps).
Only 4 SPS operation Tx/RX is supported.
8-PSK is supported.
Other options may be added at a later time
Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
diff --git a/Transceiver52M/radioInterface.h b/Transceiver52M/radioInterface.h
index 1f225a2..b63cc4c 100644
--- a/Transceiver52M/radioInterface.h
+++ b/Transceiver52M/radioInterface.h
@@ -22,6 +22,8 @@
#include "radioClock.h"
#include "radioBuffer.h"
#include "Resampler.h"
+#include "Channelizer.h"
+#include "Synthesis.h"
static const unsigned gSlotLen = 148; ///< number of symbols per slot, not counting guard periods
@@ -101,7 +103,7 @@
RadioClock* getClock(void) { return &mClock;};
/** set transmit frequency */
- bool tuneTx(double freq, size_t chan = 0);
+ virtual bool tuneTx(double freq, size_t chan = 0);
/** set receive frequency */
virtual bool tuneRx(double freq, size_t chan = 0);
@@ -164,6 +166,34 @@
void close();
};
+class RadioInterfaceMulti : public RadioInterface {
+private:
+ bool pushBuffer();
+ void pullBuffer();
+
+ signalVector *outerSendBuffer;
+ signalVector *outerRecvBuffer;
+ std::vector<signalVector *> history;
+ std::vector<bool> active;
+
+ Resampler *dnsampler;
+ Resampler *upsampler;
+ Channelizer *channelizer;
+ Synthesis *synthesis;
+
+public:
+ RadioInterfaceMulti(RadioDevice* radio, size_t tx_sps,
+ size_t rx_sps, size_t chans = 1);
+ ~RadioInterfaceMulti();
+
+ bool init(int type);
+ void close();
+
+ bool tuneTx(double freq, size_t chan);
+ bool tuneRx(double freq, size_t chan);
+ double setRxGain(double dB, size_t chan);
+};
+
class RadioInterfaceDiversity : public RadioInterface {
public:
RadioInterfaceDiversity(RadioDevice* wRadio,