From 8a5781f7fae18044b4ffcb2b72c97844c8a63b42 Mon Sep 17 00:00:00 2001 From: Kurtis Heimerl Date: Sat, 26 Nov 2011 03:17:38 +0000 Subject: [PATCH] transceiver: rework digital gain settings The output of the modulator or resampler is scaled and converted from floating point to fixed point. The scaling factor is the leftover dB in RF attention (relative to max transmit power), which is handled prior to the integer conversion. This should work across all daughterboards and non-UHD installations. Signed-off-by: Thomas Tsou git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@2650 19bc5d8c-e614-43d4-8b26-e1612bc8e597 --- Transceiver52M/Transceiver.cpp | 2 +- Transceiver52M/radioInterface.cpp | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/Transceiver52M/Transceiver.cpp b/Transceiver52M/Transceiver.cpp index 07b2777..80e8aca 100644 --- a/Transceiver52M/Transceiver.cpp +++ b/Transceiver52M/Transceiver.cpp @@ -513,7 +513,7 @@ void Transceiver::driveControl() sprintf(response,"RSP SETPOWER 1 %d",dbPwr); else { mPower = dbPwr; - mRadioInterface->setPowerAttenuation(pow(10.0,dbPwr/10.0)); + mRadioInterface->setPowerAttenuation(dbPwr); sprintf(response,"RSP SETPOWER 0 %d",dbPwr); } } diff --git a/Transceiver52M/radioInterface.cpp b/Transceiver52M/radioInterface.cpp index e8eea6f..7e51fa4 100644 --- a/Transceiver52M/radioInterface.cpp +++ b/Transceiver52M/radioInterface.cpp @@ -101,15 +101,14 @@ double RadioInterface::fullScaleOutputValue(void) { } -void RadioInterface::setPowerAttenuation(double dBAtten) +void RadioInterface::setPowerAttenuation(double atten) { double HWatten = mRadio->setTxGain(mRadio->maxTxGain() - atten); - atten -= (-HWatten); + atten -= HWatten; if (atten < 1.0) powerScaling = 1.0; else - powerScaling = 1.0/sqrt(linearAtten); - LOG(INFO) << "setting HW gain to " << HWdBAtten << " and power scaling to " << powerScaling; + powerScaling = 1.0 / sqrt(pow(10, (atten / 10.0))); }