diff options
-rw-r--r-- | Transceiver52M/radioInterface.cpp | 27 | ||||
-rw-r--r-- | Transceiver52M/radioInterface.h | 5 |
2 files changed, 26 insertions, 6 deletions
diff --git a/Transceiver52M/radioInterface.cpp b/Transceiver52M/radioInterface.cpp index 3e654b1..1afa01b 100644 --- a/Transceiver52M/radioInterface.cpp +++ b/Transceiver52M/radioInterface.cpp @@ -84,6 +84,7 @@ RadioInterface::RadioInterface(RadioDevice *wRadio, samplesPerSymbol = wRadioOversampling; mClock.set(wStartTime); loadTest = false; + powerScaling = 1.0; } RadioInterface::~RadioInterface(void) { @@ -102,10 +103,21 @@ double RadioInterface::fullScaleOutputValue(void) { void RadioInterface::setPowerAttenuation(double atten) { - mRadio->setTxGain(mRadio->maxTxGain() - atten); + double rfAtten, digAtten; + + rfAtten = mRadio->setTxGain(mRadio->maxTxGain() - atten); + digAtten = atten - rfAtten; + + if (digAtten < 1.0) + powerScaling = 1.0; + else + powerScaling = 1.0/sqrt(pow(10, (digAtten/10.0))); } -short *RadioInterface::radioifyVector(signalVector &wVector, short *retVector, bool zeroOut) +short *RadioInterface::radioifyVector(signalVector &wVector, + short *retVector, + float scale, + bool zeroOut) { signalVector::iterator itr = wVector.begin(); short *shortItr = retVector; @@ -115,8 +127,13 @@ short *RadioInterface::radioifyVector(signalVector &wVector, short *retVector, b *shortItr++ = 0; itr++; } - } - else { + } else if (scale != 1.0) { + while (itr < wVector.end()) { + *shortItr++ = (short) (itr->real() * scale); + *shortItr++ = (short) (itr->imag() * scale); + itr++; + } + } else { while (itr < wVector.end()) { *shortItr++ = (short) (itr->real()); *shortItr++ = (short) (itr->imag()); @@ -237,7 +254,7 @@ void RadioInterface::driveTransmitRadio(signalVector &radioBurst, bool zeroBurst if (!mOn) return; - radioifyVector(radioBurst, sendBuffer+sendCursor, zeroBurst); + radioifyVector(radioBurst, sendBuffer+sendCursor, powerScaling, zeroBurst); sendCursor += (radioBurst.size()*2); diff --git a/Transceiver52M/radioInterface.h b/Transceiver52M/radioInterface.h index d19f88d..71273b3 100644 --- a/Transceiver52M/radioInterface.h +++ b/Transceiver52M/radioInterface.h @@ -157,7 +157,10 @@ private: signalVector *finalVec, *finalVec9; /** format samples to USRP */ - short *radioifyVector(signalVector &wVector, short *shortVector, bool zeroOut); + short *radioifyVector(signalVector &wVector, + short *shortVector, + float scale, + bool zeroOut); /** format samples from USRP */ void unRadioifyVector(short *shortVector, signalVector &wVector); |