From 2f2c387276cd65a7c2d7873a39525aaa823eb1f5 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 15 Oct 2023 13:50:59 +0200 Subject: [PATCH] Change order of sub-band matching in the Upchannelizer similarly to fix for #1846 --- sdrbase/dsp/upchannelizer.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/sdrbase/dsp/upchannelizer.cpp b/sdrbase/dsp/upchannelizer.cpp index 58dd301d9..52484672a 100644 --- a/sdrbase/dsp/upchannelizer.cpp +++ b/sdrbase/dsp/upchannelizer.cpp @@ -259,6 +259,19 @@ Real UpChannelizer::createFilterChain(Real sigStart, Real sigEnd, Real chanStart << " chan: [" << chanStart << ":" << chanEnd << "]" << " rot: " << rot; + // check if it fits into the center + // Was: if(signalContainsChannel(sigStart + rot + safetyMargin, sigStart + rot + sigBw / 2.0f - safetyMargin, chanStart, chanEnd)) { + if(signalContainsChannel(sigStart + rot, sigEnd - rot, chanStart, chanEnd)) + { + qDebug() << "UpChannelizer::createFilterChain: take center half (decimate by 2):" + << " [" << m_filterStages.size() << "]" + << " sig: [" << sigStart + rot << ":" << sigEnd - rot << "]"; + m_filterStages.push_back(new FilterStage(FilterStage::ModeCenter)); + m_stageSamples.push_back(s); + // Was: return createFilterChain(sigStart + rot, sigStart + sigBw / 2.0f + rot, chanStart, chanEnd); + return createFilterChain(sigStart + rot, sigEnd - rot, chanStart, chanEnd); + } + // check if it fits into the left half if(signalContainsChannel(sigStart, sigStart + sigBw / 2.0, chanStart, chanEnd)) { @@ -281,19 +294,6 @@ Real UpChannelizer::createFilterChain(Real sigStart, Real sigEnd, Real chanStart return createFilterChain(sigEnd - sigBw / 2.0f, sigEnd, chanStart, chanEnd); } - // check if it fits into the center - // Was: if(signalContainsChannel(sigStart + rot + safetyMargin, sigStart + rot + sigBw / 2.0f - safetyMargin, chanStart, chanEnd)) { - if(signalContainsChannel(sigStart + rot, sigEnd - rot, chanStart, chanEnd)) - { - qDebug() << "UpChannelizer::createFilterChain: take center half (decimate by 2):" - << " [" << m_filterStages.size() << "]" - << " sig: [" << sigStart + rot << ":" << sigEnd - rot << "]"; - m_filterStages.push_back(new FilterStage(FilterStage::ModeCenter)); - m_stageSamples.push_back(s); - // Was: return createFilterChain(sigStart + rot, sigStart + sigBw / 2.0f + rot, chanStart, chanEnd); - return createFilterChain(sigStart + rot, sigEnd - rot, chanStart, chanEnd); - } - Real ofs = ((chanEnd - chanStart) / 2.0 + chanStart) - ((sigEnd - sigStart) / 2.0 + sigStart); qDebug() << "UpChannelizer::createFilterChain: complete:"