From b6652ecfbc36ea44fdd4bf9f6390030c58ee7003 Mon Sep 17 00:00:00 2001 From: f4exb Date: Fri, 13 Feb 2026 09:08:50 +0100 Subject: [PATCH] Removed legacy FFT RRC filter --- .../demodinmarsat/inmarsatdemodsink.cpp | 15 ++--------- .../demodinmarsat/inmarsatdemodsink.h | 2 -- sdrbase/dsp/fftfilt.cpp | 27 ------------------- sdrbase/dsp/fftfilt.h | 1 - 4 files changed, 2 insertions(+), 43 deletions(-) diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp b/plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp index 7eac2f6ca..df5081b50 100644 --- a/plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp @@ -332,8 +332,6 @@ InmarsatDemodSink::InmarsatDemodSink(InmarsatDemod *stdCDemod) : { m_magsq = 0.0; - m_rrcFilter = new fftfilt(m_settings.m_rfBandwidth / (float) m_channelSampleRate, RRC_FILTER_SIZE); - m_rrcI.create(m_settings.m_rrcRolloff, 5, SAMPLES_PER_SYMBOL, RootRaisedCosine::Gain); m_rrcQ.create(m_settings.m_rrcRolloff, 5, SAMPLES_PER_SYMBOL, RootRaisedCosine::Gain); @@ -358,8 +356,6 @@ InmarsatDemodSink::InmarsatDemodSink(InmarsatDemod *stdCDemod) : InmarsatDemodSink::~InmarsatDemodSink() { - delete m_rrcFilter; - m_rrcFilter = nullptr; delete m_equalizer; m_equalizer = nullptr; } @@ -473,10 +469,8 @@ void InmarsatDemodSink::processOneSample(Complex &ci) // Send signals to scope that are updated for each invocation of this method sampleToScopeA(cScaled, magsq, agcZ, m_agc.getGain(), m_agc.getAverage(), cCFO); - // RRC Matched filter - fftfilt::cmplx *rrcFilterOut = nullptr; - int n_out = m_rrcFilter->runFilt(cCFO, &rrcFilterOut); - + // Bufferized RRC Matched filter + int n_out; m_rrcBuffer[m_rrcBufferIndex++] = cCFO; if (m_rrcBufferIndex == RRC_FILTER_SIZE/2) @@ -491,7 +485,6 @@ void InmarsatDemodSink::processOneSample(Complex &ci) for (int i = 0; i < n_out; i++) { - //Complex rrc = rrcFilterOut[i]; Complex rrc (m_rrcI.filter(m_rrcBuffer[i].real()), m_rrcQ.filter(m_rrcBuffer[i].imag())); // Symbol synchronizer @@ -704,10 +697,6 @@ void InmarsatDemodSink::applySettings(const InmarsatDemodSettings& settings, con m_costasLoop.setMinFreq(-freqMax); } - if (settingsKeys.contains("rfBandwidth") || settingsKeys.contains("rrcRolloff") || force) { - m_rrcFilter->create_rrc_filter(settings.m_rfBandwidth / (float) m_channelSampleRate, settings.m_rrcRolloff); - } - if (settingsKeys.contains("pllBandwidth") || force) { m_costasLoop.computeCoefficients(settings.m_pllBW); } diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodsink.h b/plugins/channelrx/demodinmarsat/inmarsatdemodsink.h index 6c38b0998..4389fa0ea 100644 --- a/plugins/channelrx/demodinmarsat/inmarsatdemodsink.h +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodsink.h @@ -25,7 +25,6 @@ #include "dsp/channelsamplesink.h" #include "dsp/nco.h" #include "dsp/interpolator.h" -#include "dsp/fftfilt.h" #include "dsp/fftengine.h" #include "dsp/fftwindow.h" #include "dsp/costasloop.h" @@ -213,7 +212,6 @@ private: bool m_locked; static const int RRC_FILTER_SIZE = 256; - fftfilt *m_rrcFilter; Complex m_rrcBuffer[RRC_FILTER_SIZE]; RootRaisedCosine m_rrcI; //!< Square root raised cosine filter for I samples RootRaisedCosine m_rrcQ; //!< Square root raised cosine filter for Q samples diff --git a/sdrbase/dsp/fftfilt.cpp b/sdrbase/dsp/fftfilt.cpp index 5293ee0f5..aa8123c76 100644 --- a/sdrbase/dsp/fftfilt.cpp +++ b/sdrbase/dsp/fftfilt.cpp @@ -420,32 +420,6 @@ void fftfilt::create_asym_filter(float fopp, float fin, FFTWindow::Function wf) } } -// This filter is constructed directly from frequency domain response. Run with runFilt. -void fftfilt::create_rrc_filter(float fb, float a) -{ - std::fill(filter, filter+flen, 0); - - for (int i = 0; i < flen; i++) { - filter[i] = frrc(fb, a, i, flen); - } - - // normalize the output filter for unity gain - float scale = 0, mag; - for (int i = 0; i < flen; i++) - { - mag = abs(filter[i]); - if (mag > scale) { - scale = mag; - } - } - if (scale != 0) - { - for (int i = 0; i < flen; i++) { - filter[i] /= scale; - } - } -} - // test bypass int fftfilt::noFilt(const cmplx & in, cmplx **out) { @@ -687,4 +661,3 @@ void sfft::fetch(float *result) *result = itr->bins.real() * itr->bins.real() + itr->bins.imag() * itr->bins.imag(); } - diff --git a/sdrbase/dsp/fftfilt.h b/sdrbase/dsp/fftfilt.h index 5cd062398..09a0901b5 100644 --- a/sdrbase/dsp/fftfilt.h +++ b/sdrbase/dsp/fftfilt.h @@ -52,7 +52,6 @@ public: void create_filter(const std::vector>& limits, bool pass = true); //!< Windowless version void create_dsb_filter(float f2, FFTWindow::Function wf = FFTWindow::Blackman); void create_asym_filter(float fopp, float fin, FFTWindow::Function wf = FFTWindow::Blackman); //!< two different filters for in band and opposite band - void create_rrc_filter(float fb, float a); //!< root raised cosine. fb is half the band pass int noFilt(const cmplx& in, cmplx **out); int runFilt(const cmplx& in, cmplx **out);