mirror of
https://github.com/f4exb/sdrangel.git
synced 2026-08-01 16:38:06 -04:00
Removed legacy FFT RRC filter
This commit is contained in:
@@ -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<Real>::Gain);
|
||||
m_rrcQ.create(m_settings.m_rrcRolloff, 5, SAMPLES_PER_SYMBOL, RootRaisedCosine<Real>::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);
|
||||
}
|
||||
|
||||
@@ -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<Real> m_rrcI; //!< Square root raised cosine filter for I samples
|
||||
RootRaisedCosine<Real> m_rrcQ; //!< Square root raised cosine filter for Q samples
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -52,7 +52,6 @@ public:
|
||||
void create_filter(const std::vector<std::pair<float, float>>& 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);
|
||||
|
||||
Reference in New Issue
Block a user