aboutsummaryrefslogtreecommitdiffstats
path: root/src/FIRFilter.cpp
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2015-09-18 11:53:03 +0200
committerMatthias P. Braendli <matthias.braendli@mpb.li>2015-09-18 11:53:03 +0200
commit415c6de26b164aad462c9051451cb0b324ac2ffc (patch)
tree5fb517c570c151613a95768aeb58bca14b44c557 /src/FIRFilter.cpp
parent19a8c5db77e29b5d8309e1c7589bc3fdc283efae (diff)
downloaddabmod-415c6de26b164aad462c9051451cb0b324ac2ffc.tar.gz
dabmod-415c6de26b164aad462c9051451cb0b324ac2ffc.tar.bz2
dabmod-415c6de26b164aad462c9051451cb0b324ac2ffc.zip
Keep FIR filtertaps after modulator restart
Diffstat (limited to 'src/FIRFilter.cpp')
-rw-r--r--src/FIRFilter.cpp17
1 files changed, 8 insertions, 9 deletions
diff --git a/src/FIRFilter.cpp b/src/FIRFilter.cpp
index 9ef49c5..16ddcf5 100644
--- a/src/FIRFilter.cpp
+++ b/src/FIRFilter.cpp
@@ -298,7 +298,7 @@ void FIRFilterWorker::process(struct FIRFilterWorkerData *fwd)
}
-FIRFilter::FIRFilter(std::string taps_file) :
+FIRFilter::FIRFilter(std::string& taps_file) :
ModCodec(ModFormat(sizeof(complexf)), ModFormat(sizeof(complexf))),
RemoteControllable("firfilter"),
myTapsFile(taps_file)
@@ -313,7 +313,7 @@ FIRFilter::FIRFilter(std::string taps_file) :
firwd.taps = new float[0];
- load_filter_taps();
+ load_filter_taps(myTapsFile);
#if __AVX__
fprintf(stderr, "FIRFilter: WARNING: using experimental AVX code !\n");
@@ -323,12 +323,11 @@ FIRFilter::FIRFilter(std::string taps_file) :
worker.start(&firwd);
}
-void
-FIRFilter::load_filter_taps()
+void FIRFilter::load_filter_taps(std::string tapsFile)
{
- std::ifstream taps_fstream(myTapsFile.c_str());
+ std::ifstream taps_fstream(tapsFile.c_str());
if(!taps_fstream) {
- fprintf(stderr, "FIRFilter: file %s could not be opened !\n", myTapsFile.c_str());
+ fprintf(stderr, "FIRFilter: file %s could not be opened !\n", tapsFile.c_str());
throw std::runtime_error("FIRFilter: Could not open file with taps! ");
}
int n_taps;
@@ -355,7 +354,7 @@ FIRFilter::load_filter_taps()
PDEBUG("FIRFilter: tap: %f\n", myFilter[n] );
if (taps_fstream.eof()) {
fprintf(stderr, "FIRFilter: file %s should contains %d taps, but EOF reached "\
- "after %d taps !\n", myTapsFile.c_str(), n_taps, n);
+ "after %d taps !\n", tapsFile.c_str(), n_taps, n);
delete[] myFilter;
throw std::runtime_error("FIRFilter: filtertaps file invalid ! ");
}
@@ -422,9 +421,9 @@ void FIRFilter::set_parameter(const string& parameter, const string& value)
throw ParameterError("Parameter 'ntaps' is read-only");
}
else if (parameter == "tapsfile") {
- myTapsFile = value;
try {
- load_filter_taps();
+ load_filter_taps(value);
+ myTapsFile = value;
}
catch (std::runtime_error &e) {
throw ParameterError(e.what());