transceiver: simplify transmit power control
UHD will internally accept floats with a range of +/-1.0, which corresponds to a 16-bit signed integer range of apporximately +/- 32000. Set the default amplitude to .3, which is a safe value agaist saturation elsewhere in the transmit chain. The non-UHD maximum amplitude is unchanged at 13500. Remove digital gain control because it's unnecessary and causes extra load on enbedded systems. Signed-off-by: Thomas Tsou <ttsou@vt.edu> git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@2654 19bc5d8c-e614-43d4-8b26-e1612bc8e597
This commit is contained in:
parent
d4be074ea6
commit
7ac54b10d3
|
@ -401,7 +401,6 @@ SoftVector *Transceiver::pullRadioVector(GSM::Time &wTime,
|
|||
*DFEFeedback[timeslot]);
|
||||
}
|
||||
wTime = rxBurst->time();
|
||||
// FIXME: what is full scale for the USRP? we get more that 12 bits of resolution...
|
||||
RSSI = (int) floor(20.0*log10(rxFullScale/amplitude.abs()));
|
||||
LOG(DEBUG) << "RSSI: " << RSSI;
|
||||
timingOffset = (int) round(TOA*256.0/mSamplesPerSymbol);
|
||||
|
|
|
@ -38,12 +38,15 @@
|
|||
on the RF side of the timestamping point of the device.
|
||||
This value is generally empirically measured.
|
||||
|
||||
smpl_buf_sz - The receive sample buffer size in bytes.
|
||||
smpl_buf_sz - The receive sample buffer size in bytes.
|
||||
|
||||
tx_ampl - Transmit amplitude must be between 0 and 1.0
|
||||
*/
|
||||
const bool use_ext_ref = false;
|
||||
const double master_clk_rt = 52e6;
|
||||
const double rx_smpl_offset = .0000869;
|
||||
const size_t smpl_buf_sz = (1 << 20);
|
||||
const float tx_ampl = .3;
|
||||
|
||||
/** Timestamp conversion
|
||||
@param timestamp a UHD or OpenBTS timestamp
|
||||
|
@ -158,8 +161,8 @@ public:
|
|||
inline TIMESTAMP initialWriteTimestamp() { return 0; }
|
||||
inline TIMESTAMP initialReadTimestamp() { return 0; }
|
||||
|
||||
inline double fullScaleInputValue() { return 13500.0; }
|
||||
inline double fullScaleOutputValue() { return 9450.0; }
|
||||
inline double fullScaleInputValue() { return 32000 * tx_ampl; }
|
||||
inline double fullScaleOutputValue() { return 32000; }
|
||||
|
||||
double setRxGain(double db);
|
||||
double getRxGain(void) { return rx_gain; }
|
||||
|
|
|
@ -83,7 +83,6 @@ RadioInterface::RadioInterface(RadioDevice *wRadio,
|
|||
receiveOffset = wReceiveOffset;
|
||||
samplesPerSymbol = wRadioOversampling;
|
||||
mClock.set(wStartTime);
|
||||
powerScaling = 1.0;
|
||||
loadTest = false;
|
||||
}
|
||||
|
||||
|
@ -103,19 +102,11 @@ double RadioInterface::fullScaleOutputValue(void) {
|
|||
|
||||
void RadioInterface::setPowerAttenuation(double atten)
|
||||
{
|
||||
double HWatten = mRadio->setTxGain(mRadio->maxTxGain() - atten);
|
||||
atten -= HWatten;
|
||||
if (atten < 1.0)
|
||||
powerScaling = 1.0;
|
||||
else
|
||||
powerScaling = 1.0 / sqrt(pow(10, (atten / 10.0)));
|
||||
mRadio->setTxGain(mRadio->maxTxGain() - atten);
|
||||
}
|
||||
|
||||
|
||||
short *RadioInterface::radioifyVector(signalVector &wVector, short *retVector, double scale, bool zeroOut)
|
||||
short *RadioInterface::radioifyVector(signalVector &wVector, short *retVector, bool zeroOut)
|
||||
{
|
||||
|
||||
|
||||
signalVector::iterator itr = wVector.begin();
|
||||
short *shortItr = retVector;
|
||||
if (zeroOut) {
|
||||
|
@ -125,13 +116,6 @@ short *RadioInterface::radioifyVector(signalVector &wVector, short *retVector, d
|
|||
itr++;
|
||||
}
|
||||
}
|
||||
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());
|
||||
|
@ -141,7 +125,6 @@ short *RadioInterface::radioifyVector(signalVector &wVector, short *retVector, d
|
|||
}
|
||||
|
||||
return retVector;
|
||||
|
||||
}
|
||||
|
||||
void RadioInterface::unRadioifyVector(short *shortVector, signalVector& newVector)
|
||||
|
@ -254,7 +237,7 @@ void RadioInterface::driveTransmitRadio(signalVector &radioBurst, bool zeroBurst
|
|||
|
||||
if (!mOn) return;
|
||||
|
||||
radioifyVector(radioBurst, sendBuffer+sendCursor, powerScaling, zeroBurst);
|
||||
radioifyVector(radioBurst, sendBuffer+sendCursor, zeroBurst);
|
||||
|
||||
sendCursor += (radioBurst.size()*2);
|
||||
|
||||
|
|
|
@ -157,7 +157,7 @@ private:
|
|||
signalVector *finalVec, *finalVec9;
|
||||
|
||||
/** format samples to USRP */
|
||||
short *radioifyVector(signalVector &wVector, short *shortVector, double scale, bool zeroOut);
|
||||
short *radioifyVector(signalVector &wVector, short *shortVector, bool zeroOut);
|
||||
|
||||
/** format samples from USRP */
|
||||
void unRadioifyVector(short *shortVector, signalVector &wVector);
|
||||
|
|
Loading…
Reference in New Issue