aboutsummaryrefslogtreecommitdiffstats
path: root/src/OfdmGenerator.h
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2017-08-19 11:05:01 +0200
committerMatthias P. Braendli <matthias.braendli@mpb.li>2017-09-28 13:36:02 +0200
commit75653763057bb9bf018dfde1a3cda8681c8b8e34 (patch)
treeabe3cbaf0e8e278167a61d8649561d3501f5f8dd /src/OfdmGenerator.h
parent3a0ff25128dd3bcfac38cf6a26e9bff9ed83a9f8 (diff)
downloaddabmod-75653763057bb9bf018dfde1a3cda8681c8b8e34.tar.gz
dabmod-75653763057bb9bf018dfde1a3cda8681c8b8e34.tar.bz2
dabmod-75653763057bb9bf018dfde1a3cda8681c8b8e34.zip
Add WIP CFR implementation to OfdmGenerator
Diffstat (limited to 'src/OfdmGenerator.h')
-rw-r--r--src/OfdmGenerator.h79
1 files changed, 51 insertions, 28 deletions
diff --git a/src/OfdmGenerator.h b/src/OfdmGenerator.h
index a8c3c19..9a6fa01 100644
--- a/src/OfdmGenerator.h
+++ b/src/OfdmGenerator.h
@@ -2,7 +2,7 @@
Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011 Her Majesty
the Queen in Right of Canada (Communications Research Center Canada)
- Copyright (C) 2016
+ Copyright (C) 2017
Matthias P. Braendli, matthias.braendli@mpb.li
http://opendigitalradio.org
@@ -32,38 +32,61 @@
#include "porting.h"
#include "ModPlugin.h"
-
+#include "RemoteControl.h"
#include "fftw3.h"
-
#include <sys/types.h>
+#include <vector>
+#include <complex>
+typedef std::complex<float> complexf;
-class OfdmGenerator : public ModCodec
+class OfdmGenerator : public ModCodec, public RemoteControllable
{
-public:
- OfdmGenerator(size_t nbSymbols, size_t nbCarriers, size_t spacing, bool inverse = true);
- virtual ~OfdmGenerator();
- OfdmGenerator(const OfdmGenerator&);
- OfdmGenerator& operator=(const OfdmGenerator&);
-
-
- int process(Buffer* const dataIn, Buffer* dataOut);
- const char* name() { return "OfdmGenerator"; }
-
-protected:
- fftwf_plan myFftPlan;
- fftwf_complex *myFftIn, *myFftOut;
- size_t myNbSymbols;
- size_t myNbCarriers;
- size_t mySpacing;
- unsigned myPosSrc;
- unsigned myPosDst;
- unsigned myPosSize;
- unsigned myNegSrc;
- unsigned myNegDst;
- unsigned myNegSize;
- unsigned myZeroDst;
- unsigned myZeroSize;
+ public:
+ OfdmGenerator(size_t nbSymbols,
+ size_t nbCarriers,
+ size_t spacing,
+ bool inverse = true);
+ virtual ~OfdmGenerator();
+ OfdmGenerator(const OfdmGenerator&) = delete;
+ OfdmGenerator& operator=(const OfdmGenerator&) = delete;
+
+ int process(Buffer* const dataIn, Buffer* dataOut) override;
+ const char* name() override { return "OfdmGenerator"; }
+
+ /* Functions for the remote control */
+ /* Base function to set parameters. */
+ virtual void set_parameter(
+ const std::string& parameter,
+ const std::string& value) override;
+
+ /* Getting a parameter always returns a string. */
+ virtual const std::string get_parameter(
+ const std::string& parameter) const override;
+
+ protected:
+ void cfr_one_iteration(Buffer *symbols, size_t symbol_ix);
+
+ fftwf_plan myFftPlan;
+ fftwf_complex *myFftIn, *myFftOut;
+ size_t myNbSymbols;
+ size_t myNbCarriers;
+ size_t mySpacing;
+ unsigned myPosSrc;
+ unsigned myPosDst;
+ unsigned myPosSize;
+ unsigned myNegSrc;
+ unsigned myNegDst;
+ unsigned myNegSize;
+ unsigned myZeroDst;
+ unsigned myZeroSize;
+
+ bool myCfr; // Whether to enable crest factor reduction
+ float myCfrClip;
+ float myCfrErrorClip;
+ fftwf_plan myCfrFft;
+ std::vector<complexf> myCfrPostClip;
+ std::vector<complexf> myCfrPostFft;
};