From b49d5c3898f4a6f03d7cb033508ba1416e30c6f0 Mon Sep 17 00:00:00 2001 From: andreas128 Date: Sun, 26 Mar 2017 13:28:02 +0200 Subject: Working pipeline --- src/DabModulator.cpp | 47 ++++++++++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 17 deletions(-) (limited to 'src/DabModulator.cpp') diff --git a/src/DabModulator.cpp b/src/DabModulator.cpp index c41b8fc..bd14396 100644 --- a/src/DabModulator.cpp +++ b/src/DabModulator.cpp @@ -47,6 +47,7 @@ #include "Resampler.h" #include "ConvEncoder.h" #include "FIRFilter.h" +#include "MemlessPoly.h" #include "TII.h" #include "PuncturingEncoder.h" #include "TimeInterleaver.h" @@ -215,6 +216,11 @@ int DabModulator::process(Buffer* dataOut) cifFilter = make_shared(myFilterTapsFilename); rcs.enrol(cifFilter.get()); } + + shared_ptr cifPoly; + cifPoly = make_shared("default"); + rcs.enrol(cifPoly.get()); + auto myOutput = make_shared(dataOut); shared_ptr cifRes; @@ -348,23 +354,30 @@ int DabModulator::process(Buffer* dataOut) myFlowgraph->connect(cifOfdm, cifGain); myFlowgraph->connect(cifGain, cifGuard); - if (cifFilter) { - myFlowgraph->connect(cifGuard, cifFilter); - if (cifRes) { - myFlowgraph->connect(cifFilter, cifRes); - myFlowgraph->connect(cifRes, myOutput); - } else { - myFlowgraph->connect(cifFilter, myOutput); - } - } - else { //no filtering - if (cifRes) { - myFlowgraph->connect(cifGuard, cifRes); - myFlowgraph->connect(cifRes, myOutput); - } else { - myFlowgraph->connect(cifGuard, myOutput); - } - + //if (cifFilter) { + // myFlowgraph->connect(cifGuard, cifFilter); + // if (cifRes) { + // myFlowgraph->connect(cifFilter, cifRes); + // myFlowgraph->connect(cifRes, myOutput); + // } else { + // myFlowgraph->connect(cifFilter, myOutput); + // } + //} + //else { //no filtering + // if (cifRes) { + // myFlowgraph->connect(cifGuard, cifRes); + // myFlowgraph->connect(cifRes, myOutput); + // } else { + // myFlowgraph->connect(cifGuard, myOutput); + // } + //} + if (cifRes) { + myFlowgraph->connect(cifGuard, cifRes); + myFlowgraph->connect(cifRes, cifPoly); + myFlowgraph->connect(cifPoly, myOutput); + } else { + myFlowgraph->connect(cifGuard, cifPoly); + myFlowgraph->connect(cifPoly, myOutput); } } -- cgit v1.2.3 From 89ac4f53d0a10d1c07980fae5ddeb8818e7b9733 Mon Sep 17 00:00:00 2001 From: andreas128 Date: Sat, 1 Apr 2017 12:13:01 +0100 Subject: Fix file reading --- src/ConfigParser.cpp | 6 ++++++ src/ConfigParser.h | 2 ++ src/DabMod.cpp | 6 ++++-- src/DabModulator.cpp | 26 +++++++++++++++++++------- src/DabModulator.h | 4 +++- src/MemlessPoly.cpp | 1 + src/MemlessPoly.h | 4 +++- 7 files changed, 38 insertions(+), 11 deletions(-) (limited to 'src/DabModulator.cpp') diff --git a/src/ConfigParser.cpp b/src/ConfigParser.cpp index 393f58a..b7649df 100644 --- a/src/ConfigParser.cpp +++ b/src/ConfigParser.cpp @@ -168,6 +168,12 @@ static void parse_configfile( pt.get("firfilter.filtertapsfile", "default"); } + // Poly coefficients: + if (pt.get("poly.enabled", 0) == 1) { + mod_settings.polyCoefFilename = + pt.get("poly.polycoeffile", "default"); + } + // Output options std::string output_selected; try { diff --git a/src/ConfigParser.h b/src/ConfigParser.h index 02b798a..fede801 100644 --- a/src/ConfigParser.h +++ b/src/ConfigParser.h @@ -74,6 +74,8 @@ struct mod_settings_t { std::string filterTapsFilename = ""; + std::string polyCoefFilename = ""; + #if defined(HAVE_OUTPUT_UHD) OutputUHDConfig outputuhd_conf; diff --git a/src/DabMod.cpp b/src/DabMod.cpp index 4e4cdab..adc4cf2 100644 --- a/src/DabMod.cpp +++ b/src/DabMod.cpp @@ -322,7 +322,8 @@ int launch_modulator(int argc, char* argv[]) mod_settings.digitalgain, mod_settings.normalise, mod_settings.gainmodeVariance, - mod_settings.filterTapsFilename); + mod_settings.filterTapsFilename, + mod_settings.polyCoefFilename); if (format_converter) { flowgraph.connect(modulator, format_converter); @@ -426,7 +427,8 @@ int launch_modulator(int argc, char* argv[]) mod_settings.digitalgain, mod_settings.normalise, mod_settings.gainmodeVariance, - mod_settings.filterTapsFilename); + mod_settings.filterTapsFilename, + mod_settings.polyCoefFilename); if (format_converter) { flowgraph.connect(modulator, format_converter); diff --git a/src/DabModulator.cpp b/src/DabModulator.cpp index bd14396..81257f4 100644 --- a/src/DabModulator.cpp +++ b/src/DabModulator.cpp @@ -62,7 +62,8 @@ DabModulator::DabModulator( unsigned dabMode, GainMode gainMode, float& digGain, float normalise, float gainmodeVariance, - const std::string& filterTapsFilename + const std::string& filterTapsFilename, + const std::string& polyCoefFilename ) : ModInput(), myOutputRate(outputRate), @@ -75,6 +76,7 @@ DabModulator::DabModulator( myEtiSource(etiSource), myFlowgraph(NULL), myFilterTapsFilename(filterTapsFilename), + myPolyCoefFilename(polyCoefFilename), myTiiConfig(tiiConfig) { PDEBUG("DabModulator::DabModulator(%u, %u, %u, %zu) @ %p\n", @@ -218,8 +220,12 @@ int DabModulator::process(Buffer* dataOut) } shared_ptr cifPoly; - cifPoly = make_shared("default"); - rcs.enrol(cifPoly.get()); + if (not myPolyCoefFilename.empty()) { + cifPoly = make_shared(myPolyCoefFilename); + std::cout << myPolyCoefFilename << "\n"; + std::cout << cifPoly->m_taps[0] << " " << cifPoly->m_taps[1] << " "<< cifPoly->m_taps[2] << " "<< cifPoly->m_taps[3] << " "<< cifPoly->m_taps[4] << " "<< cifPoly->m_taps[5] << " "<< cifPoly->m_taps[6] << " "<< cifPoly->m_taps[7] << "\n"; + rcs.enrol(cifPoly.get()); + } auto myOutput = make_shared(dataOut); @@ -371,13 +377,19 @@ int DabModulator::process(Buffer* dataOut) // myFlowgraph->connect(cifGuard, myOutput); // } //} + //if (cifRes) { + // myFlowgraph->connect(cifGuard, cifRes); + // myFlowgraph->connect(cifRes, cifPoly); + // myFlowgraph->connect(cifPoly, myOutput); + //} else { + // myFlowgraph->connect(cifGuard, cifPoly); + // myFlowgraph->connect(cifPoly, myOutput); + //} if (cifRes) { myFlowgraph->connect(cifGuard, cifRes); - myFlowgraph->connect(cifRes, cifPoly); - myFlowgraph->connect(cifPoly, myOutput); + myFlowgraph->connect(cifRes, myOutput); } else { - myFlowgraph->connect(cifGuard, cifPoly); - myFlowgraph->connect(cifPoly, myOutput); + myFlowgraph->connect(cifGuard, myOutput); } } diff --git a/src/DabModulator.h b/src/DabModulator.h index c9bdbe1..0c691dd 100644 --- a/src/DabModulator.h +++ b/src/DabModulator.h @@ -55,7 +55,8 @@ public: unsigned dabMode, GainMode gainMode, float& digGain, float normalise, float gainmodeVariance, - const std::string& filterTapsFilename); + const std::string& filterTapsFilename, + const std::string& polyCoefFilename); DabModulator(const DabModulator& other) = delete; DabModulator& operator=(const DabModulator& other) = delete; virtual ~DabModulator(); @@ -80,6 +81,7 @@ protected: Flowgraph* myFlowgraph; OutputMemory* myOutput; std::string myFilterTapsFilename; + std::string myPolyCoefFilename; tii_config_t& myTiiConfig; size_t myNbSymbols; diff --git a/src/MemlessPoly.cpp b/src/MemlessPoly.cpp index b4bd5d0..1faf338 100644 --- a/src/MemlessPoly.cpp +++ b/src/MemlessPoly.cpp @@ -84,6 +84,7 @@ void MemlessPoly::load_filter_taps(const std::string &tapsFile) { std::vector filter_taps; if (tapsFile == "default") { + std::cout << "MemlessPoly default\n"; std::copy(default_coefficients.begin(), default_coefficients.end(), std::back_inserter(filter_taps)); } diff --git a/src/MemlessPoly.h b/src/MemlessPoly.h index fe372d8..33ae202 100644 --- a/src/MemlessPoly.h +++ b/src/MemlessPoly.h @@ -63,6 +63,9 @@ public: virtual const std::string get_parameter( const std::string& parameter) const; +//TODO to protected + std::vector m_taps; + protected: int internal_process(Buffer* const dataIn, Buffer* dataOut); @@ -71,6 +74,5 @@ protected: std::string m_taps_file; mutable std::mutex m_taps_mutex; - std::vector m_taps; }; -- cgit v1.2.3 From 072c2e1277690fa6bd5016fdb69455fd28ba785e Mon Sep 17 00:00:00 2001 From: andreas128 Date: Thu, 6 Apr 2017 22:01:15 +0100 Subject: Fix print to stdout --- src/DabModulator.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'src/DabModulator.cpp') diff --git a/src/DabModulator.cpp b/src/DabModulator.cpp index 81257f4..757dd9a 100644 --- a/src/DabModulator.cpp +++ b/src/DabModulator.cpp @@ -206,7 +206,8 @@ int DabModulator::process(Buffer* dataOut) (1 + myNbSymbols), myNbCarriers, mySpacing); auto cifGain = make_shared( - mySpacing, myGainMode, myDigGain, myNormalise, myGainmodeVariance); + mySpacing, myGainMode, myDigGain, myNormalise, + myGainmodeVariance); rcs.enrol(cifGain.get()); @@ -222,8 +223,12 @@ int DabModulator::process(Buffer* dataOut) shared_ptr cifPoly; if (not myPolyCoefFilename.empty()) { cifPoly = make_shared(myPolyCoefFilename); - std::cout << myPolyCoefFilename << "\n"; - std::cout << cifPoly->m_taps[0] << " " << cifPoly->m_taps[1] << " "<< cifPoly->m_taps[2] << " "<< cifPoly->m_taps[3] << " "<< cifPoly->m_taps[4] << " "<< cifPoly->m_taps[5] << " "<< cifPoly->m_taps[6] << " "<< cifPoly->m_taps[7] << "\n"; + etiLog.level(debug) << myPolyCoefFilename << "\n"; + etiLog.level(debug) << cifPoly->m_coefs[0] << " " << + cifPoly->m_coefs[1] << " "<< cifPoly->m_coefs[2] << " "<< + cifPoly->m_coefs[3] << " "<< cifPoly->m_coefs[4] << " "<< + cifPoly->m_coefs[5] << " "<< cifPoly->m_coefs[6] << " "<< + cifPoly->m_coefs[7] << "\n"; rcs.enrol(cifPoly.get()); } @@ -318,7 +323,8 @@ int DabModulator::process(Buffer* dataOut) auto subchConv = make_shared(subchSizeIn); // Configuring puncturing encoder - auto subchPunc = make_shared(subchannel->framesizeCu()); + auto subchPunc = + make_shared(subchannel->framesizeCu()); for (const auto& rule : subchannel->get_rules()) { PDEBUG(" Adding rule:\n"); -- cgit v1.2.3 From f450abc563b5b0a8f2625d8d1c14f1f04adbd26d Mon Sep 17 00:00:00 2001 From: andreas128 Date: Thu, 6 Apr 2017 22:01:48 +0100 Subject: Add warning for incomplete flowgraph --- src/DabModulator.cpp | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) (limited to 'src/DabModulator.cpp') diff --git a/src/DabModulator.cpp b/src/DabModulator.cpp index 757dd9a..8e3af8a 100644 --- a/src/DabModulator.cpp +++ b/src/DabModulator.cpp @@ -366,6 +366,7 @@ int DabModulator::process(Buffer* dataOut) myFlowgraph->connect(cifOfdm, cifGain); myFlowgraph->connect(cifGain, cifGuard); +#warning "Flowgraph logic incomplete (skips FIRFilter)!" //if (cifFilter) { // myFlowgraph->connect(cifGuard, cifFilter); // if (cifRes) { @@ -383,19 +384,13 @@ int DabModulator::process(Buffer* dataOut) // myFlowgraph->connect(cifGuard, myOutput); // } //} - //if (cifRes) { - // myFlowgraph->connect(cifGuard, cifRes); - // myFlowgraph->connect(cifRes, cifPoly); - // myFlowgraph->connect(cifPoly, myOutput); - //} else { - // myFlowgraph->connect(cifGuard, cifPoly); - // myFlowgraph->connect(cifPoly, myOutput); - //} if (cifRes) { myFlowgraph->connect(cifGuard, cifRes); - myFlowgraph->connect(cifRes, myOutput); + myFlowgraph->connect(cifRes, cifPoly); + myFlowgraph->connect(cifPoly, myOutput); } else { - myFlowgraph->connect(cifGuard, myOutput); + myFlowgraph->connect(cifGuard, cifPoly); + myFlowgraph->connect(cifPoly, myOutput); } } -- cgit v1.2.3 From 64e77f042402b5f881fb99b28bd15fe343e51494 Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Fri, 12 May 2017 08:27:45 +0200 Subject: Initialise flowgraph correctly with FIRFilter --- src/DabModulator.cpp | 50 +++++++++++++++++++++++--------------------------- 1 file changed, 23 insertions(+), 27 deletions(-) (limited to 'src/DabModulator.cpp') diff --git a/src/DabModulator.cpp b/src/DabModulator.cpp index 8e3af8a..d425f04 100644 --- a/src/DabModulator.cpp +++ b/src/DabModulator.cpp @@ -360,42 +360,38 @@ int DabModulator::process(Buffer* dataOut) if (useCicEq) { myFlowgraph->connect(cifSig, cifCicEq); myFlowgraph->connect(cifCicEq, cifOfdm); - } else { + } + else { myFlowgraph->connect(cifSig, cifOfdm); } myFlowgraph->connect(cifOfdm, cifGain); myFlowgraph->connect(cifGain, cifGuard); -#warning "Flowgraph logic incomplete (skips FIRFilter)!" - //if (cifFilter) { - // myFlowgraph->connect(cifGuard, cifFilter); - // if (cifRes) { - // myFlowgraph->connect(cifFilter, cifRes); - // myFlowgraph->connect(cifRes, myOutput); - // } else { - // myFlowgraph->connect(cifFilter, myOutput); - // } - //} - //else { //no filtering - // if (cifRes) { - // myFlowgraph->connect(cifGuard, cifRes); - // myFlowgraph->connect(cifRes, myOutput); - // } else { - // myFlowgraph->connect(cifGuard, myOutput); - // } - //} - if (cifRes) { - myFlowgraph->connect(cifGuard, cifRes); - myFlowgraph->connect(cifRes, cifPoly); - myFlowgraph->connect(cifPoly, myOutput); - } else { - myFlowgraph->connect(cifGuard, cifPoly); - myFlowgraph->connect(cifPoly, myOutput); + if (cifFilter) { + myFlowgraph->connect(cifGuard, cifFilter); + if (cifRes) { + myFlowgraph->connect(cifFilter, cifRes); + myFlowgraph->connect(cifRes, cifPoly); + } + else { + myFlowgraph->connect(cifFilter, cifPoly); + } } + else { + if (cifRes) { + myFlowgraph->connect(cifGuard, cifRes); + myFlowgraph->connect(cifRes, cifPoly); + } + else { + myFlowgraph->connect(cifGuard, cifPoly); + } + } + + myFlowgraph->connect(cifPoly, myOutput); } //////////////////////////////////////////////////////////////////// - // Proccessing data + // Processing data //////////////////////////////////////////////////////////////////// return myFlowgraph->run(); } -- cgit v1.2.3 From 9bf9469ccdc037d26ccd69ac9e81e64d74fc7008 Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Fri, 12 May 2017 09:47:01 +0200 Subject: Handle absence of cifPoly in flowgraph setup --- src/DabModulator.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'src/DabModulator.cpp') diff --git a/src/DabModulator.cpp b/src/DabModulator.cpp index d425f04..4e0bc33 100644 --- a/src/DabModulator.cpp +++ b/src/DabModulator.cpp @@ -367,27 +367,33 @@ int DabModulator::process(Buffer* dataOut) myFlowgraph->connect(cifOfdm, cifGain); myFlowgraph->connect(cifGain, cifGuard); + auto cifOut = cifPoly ? + static_pointer_cast(cifPoly) : + static_pointer_cast(myOutput); + if (cifFilter) { myFlowgraph->connect(cifGuard, cifFilter); if (cifRes) { myFlowgraph->connect(cifFilter, cifRes); - myFlowgraph->connect(cifRes, cifPoly); + myFlowgraph->connect(cifRes, cifOut); } else { - myFlowgraph->connect(cifFilter, cifPoly); + myFlowgraph->connect(cifFilter, cifOut); } } else { if (cifRes) { myFlowgraph->connect(cifGuard, cifRes); - myFlowgraph->connect(cifRes, cifPoly); + myFlowgraph->connect(cifRes, cifOut); } else { - myFlowgraph->connect(cifGuard, cifPoly); + myFlowgraph->connect(cifGuard, cifOut); } } - myFlowgraph->connect(cifPoly, myOutput); + if (cifPoly) { + myFlowgraph->connect(cifPoly, myOutput); + } } //////////////////////////////////////////////////////////////////// -- cgit v1.2.3