From fd4d2bb64fcbbce1392754af2df0c47186a1954a Mon Sep 17 00:00:00 2001 From: f4exb Date: Thu, 10 May 2018 11:47:13 +0200 Subject: [PATCH] Common static function to calculate device center frequency from all contributing parameters --- sdrbase/dsp/devicesamplesource.cpp | 43 ++++++++++++++++++++++++++++++ sdrbase/dsp/devicesamplesource.h | 14 ++++++++++ 2 files changed, 57 insertions(+) diff --git a/sdrbase/dsp/devicesamplesource.cpp b/sdrbase/dsp/devicesamplesource.cpp index 4295d2f3b..bc2e8a963 100644 --- a/sdrbase/dsp/devicesamplesource.cpp +++ b/sdrbase/dsp/devicesamplesource.cpp @@ -15,6 +15,7 @@ // along with this program. If not, see . // /////////////////////////////////////////////////////////////////////////////////// +#include #include DeviceSampleSource::DeviceSampleSource() : @@ -39,3 +40,45 @@ void DeviceSampleSource::handleInputMessages() } } } + +qint64 DeviceSampleSource::calculateDeviceCenterFrequency( + quint64 centerFrequency, + qint64 transverterDeltaFrequency, + int log2Decim, + fcPos_t fcPos, + quint32 devSampleRate, + bool transverterMode) +{ + qint64 deviceCenterFrequency = centerFrequency; + deviceCenterFrequency -= transverterMode ? transverterDeltaFrequency : 0; + deviceCenterFrequency = deviceCenterFrequency < 0 ? 0 : deviceCenterFrequency; + qint64 f_img = deviceCenterFrequency; + + if ((log2Decim == 0) || (fcPos == FC_POS_CENTER)) + { + f_img = deviceCenterFrequency; + } + else + { + if (fcPos == FC_POS_INFRA) + { + deviceCenterFrequency += (devSampleRate / 4); + f_img = deviceCenterFrequency + devSampleRate/2; + } + else if (fcPos == FC_POS_SUPRA) + { + deviceCenterFrequency -= (devSampleRate / 4); + f_img = deviceCenterFrequency - devSampleRate/2; + } + } + + qDebug() << "DeviceSampleSource::calculateDeviceCenterFrequency:" + << " desired center freq: " << centerFrequency << " Hz" + << " device center freq: " << deviceCenterFrequency << " Hz" + << " device sample rate: " << devSampleRate << "S/s" + << " Actual sample rate: " << devSampleRate/(1<