aboutsummaryrefslogtreecommitdiffstats
path: root/src/OfdmGenerator.h
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2024-10-26 16:30:19 +0200
committerMatthias P. Braendli <matthias.braendli@mpb.li>2024-10-26 16:30:19 +0200
commite836f903ae5e6b6916627142d47227a142879c04 (patch)
treed60c3d26ab2b95181820cf7fc591e69db215bc90 /src/OfdmGenerator.h
parent1d83a2b247f8e83bbce802a272ffa165bbc6333f (diff)
downloaddabmod-e836f903ae5e6b6916627142d47227a142879c04.tar.gz
dabmod-e836f903ae5e6b6916627142d47227a142879c04.tar.bz2
dabmod-e836f903ae5e6b6916627142d47227a142879c04.zip
Use FFT Accelerator on DEXTER
Diffstat (limited to 'src/OfdmGenerator.h')
-rw-r--r--src/OfdmGenerator.h48
1 files changed, 47 insertions, 1 deletions
diff --git a/src/OfdmGenerator.h b/src/OfdmGenerator.h
index 2e1aa63..b8ec702 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) 2023
+ Copyright (C) 2024
Matthias P. Braendli, matthias.braendli@mpb.li
http://opendigitalradio.org
@@ -140,3 +140,49 @@ class OfdmGeneratorFixed : public ModCodec
unsigned myZeroDst;
unsigned myZeroSize;
};
+
+#ifdef HAVE_DEXTER
+#include "iio.h"
+// The PrecisionWave DEXTER device contains an FFT accelerator in FPGA
+class OfdmGeneratorDEXTER : public ModCodec
+{
+ public:
+ OfdmGeneratorDEXTER(size_t nbSymbols,
+ size_t nbCarriers,
+ size_t spacing,
+ bool& enableCfr,
+ float& cfrClip,
+ float& cfrErrorClip,
+ bool inverse = true);
+ virtual ~OfdmGeneratorDEXTER();
+ OfdmGeneratorDEXTER(const OfdmGeneratorDEXTER&) = delete;
+ OfdmGeneratorDEXTER& operator=(const OfdmGeneratorDEXTER&) = delete;
+
+ int process(Buffer* const dataIn, Buffer* dataOut) override;
+ const char* name() override { return "OfdmGenerator"; }
+
+ private:
+ struct iio_context *m_ctx = nullptr;
+
+ // "in" and "out" are from the point of view of the FFT Accelerator block
+ struct iio_device *m_dev_in = nullptr;
+ struct iio_channel *m_channel_in = nullptr;
+ struct iio_buffer *m_buf_in = nullptr;
+
+ struct iio_device *m_dev_out = nullptr;
+ struct iio_channel *m_channel_out = nullptr;
+ struct iio_buffer *m_buf_out = nullptr;
+
+ const size_t myNbSymbols;
+ const size_t myNbCarriers;
+ const size_t mySpacing;
+ unsigned myPosSrc;
+ unsigned myPosDst;
+ unsigned myPosSize;
+ unsigned myNegSrc;
+ unsigned myNegDst;
+ unsigned myNegSize;
+ unsigned myZeroDst;
+ unsigned myZeroSize;
+};
+#endif // HAVE_DEXTER