diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2017-09-13 18:55:39 +0200 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2017-09-13 18:55:39 +0200 |
commit | 1ca5368f547c429bf0d86dac78162310e1d2b032 (patch) | |
tree | 6c6949b3ecf235ab18a6d21af6d3ad6105190d67 /src/MemlessPoly.h | |
parent | 4f9372c130960559a0bba13828a810eb57e30123 (diff) | |
download | dabmod-1ca5368f547c429bf0d86dac78162310e1d2b032.tar.gz dabmod-1ca5368f547c429bf0d86dac78162310e1d2b032.tar.bz2 dabmod-1ca5368f547c429bf0d86dac78162310e1d2b032.zip |
Add LUT predistorter
Diffstat (limited to 'src/MemlessPoly.h')
-rw-r--r-- | src/MemlessPoly.h | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/MemlessPoly.h b/src/MemlessPoly.h index 57c0924..612934f 100644 --- a/src/MemlessPoly.h +++ b/src/MemlessPoly.h @@ -49,6 +49,12 @@ typedef std::complex<float> complexf; +enum class dpd_type_t { + odd_only_poly, + lookup_table +}; + + class MemlessPoly : public PipelinedModCodec, public RemoteControllable { public: @@ -71,8 +77,16 @@ private: struct input_data_t { bool terminate = false; + dpd_type_t dpd_type; + + // Valid for polynomial types const float *coefs_am = nullptr; const float *coefs_pm = nullptr; + + // Valid for LUT + float lut_scalefactor = 0.0f; + const complexf *lut = nullptr; + const complexf *in = nullptr; size_t start = 0; size_t stop = 0; @@ -112,8 +126,16 @@ private: static void worker_thread(worker_t *workerdata); + bool m_dpd_settings_valid = false; + dpd_type_t m_dpd_type; std::vector<float> m_coefs_am; // AM/AM coefficients std::vector<float> m_coefs_pm; // AM/PM coefficients + + float m_lut_scalefactor; // Scale value applied before looking up in LUT + + static constexpr size_t lut_entries = 32; + std::array<complexf, lut_entries> m_lut; // Lookup table correction factors + std::string m_coefs_file; mutable std::mutex m_coefs_mutex; }; |