v2.0.0
Loading...
Searching...
No Matches
filterio.cpp
Go to the documentation of this file.
1//=============================================================================================================
12
13//=============================================================================================================
14// INCLUDES
15//=============================================================================================================
16
17#include "filterio.h"
18
19//=============================================================================================================
20// QT INCLUDES
21//=============================================================================================================
22
23#include <QFile>
24#include <QDebug>
25#include <QStringList>
26#include <QRegularExpression>
27
28//=============================================================================================================
29// USED NAMESPACES
30//=============================================================================================================
31
32using namespace UTILSLIB;
33using namespace Eigen;
34
35//=============================================================================================================
36// DEFINE MEMBER METHODS
37//=============================================================================================================
38
42
43//=============================================================================================================
44
45bool FilterIO::readFilter(QString path, FilterKernel &filter)
46{
47 //Open .txt file
48 if(!path.contains(".txt"))
49 return false;
50
51 QFile file(path);
52 if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
53 qDebug()<<"Error opening filter txt file for reading";
54 return false;
55 }
56
57 //Start reading from file
58 QTextStream in(&file);
59 QVector<double> coefficientsTemp;
60
61 while(!in.atEnd())
62 {
63 QString line = in.readLine();
64
65 QStringList fields = line.split(QRegularExpression("\\s+"));
66
67 //Delete last element if it is a blank character
68 if(fields.at(fields.size()-1) == "")
69 fields.removeLast();
70
71 if(line.contains("#")) //Filter meta information commented areas in file
72 {
73 //Read filter sFreq
74 if(line.contains("sFreq") && fields.size()==2)
75 filter.setSamplingFrequency(fields.at(1).toDouble());
76
77 //Read filter name
78 if(line.contains("name")) {
79 QString sFilterName;
80 for(int i=1; i<fields.size(); i++)
81 sFilterName.append(fields.at(i));
82 filter.setName(sFilterName);
83 }
84
85 //Read the filter order
86 if(line.contains("order") && fields.size()==2)
87 filter.setFilterOrder(fields.at(1).toInt());
88
89 //Read the filter type
90 if(line.contains("type") && fields.size()==2)
91 filter.setFilterType(FilterKernel::m_filterTypes.indexOf(FilterParameter(fields.at(1))));
92
93 //Read the filter LPFreq
94 if(line.contains("LPFreq") && fields.size()==2)
95 filter.setLowpassFreq(fields.at(1).toDouble());
96
97 //Read the filter HPFreq
98 if(line.contains("HPFreq") && fields.size()==2)
99 filter.setHighpassFreq(fields.at(1).toDouble());
100
101 //Read the filter CenterFreq
102 if(line.contains("CenterFreq") && fields.size()==2)
103 filter.setCenterFrequency(fields.at(1).toDouble());
104
105 //Read the filter DesignMethod
106 if(line.contains("DesignMethod") && fields.size()==2)
108
109 } else // Read filter coefficients
110 coefficientsTemp.push_back(fields.join("").toDouble());
111 }
112 // Check if reading was successful and correct
113 if(filter.getFilterOrder() != coefficientsTemp.size()) {
114 filter.setFilterOrder(coefficientsTemp.size());
115 }
116
117 RowVectorXd vecCoeff = RowVectorXd::Zero(coefficientsTemp.size());
118 for(int i=0; i < vecCoeff.cols(); i++) {
119 vecCoeff(i) = coefficientsTemp.at(i);
120 }
121 filter.setCoefficients(vecCoeff);
122
123 file.close();
124
125 return true;
126}
127
128//=============================================================================================================
129
130bool FilterIO::writeFilter(const QString &path, const FilterKernel &filter)
131{
132 // Open file dialog
133 if(!path.isEmpty())
134 {
135 QFile file(path);
136 if (!file.open(QIODevice::WriteOnly | QIODevice::Text)){
137 qDebug()<<"Error opening filter txt file for writing";
138 return false;
139 }
140
141 //Write coefficients to file
142 QTextStream out(&file);
143
144 out << "#sFreq " << filter.getSamplingFrequency() << "\n";
145 out << "#name " << filter.getName() << "\n";
146 out << "#type " << filter.getFilterType().getName() << "\n";
147 out << "#order " << filter.getFilterOrder() << "\n";
148 out << "#HPFreq " << filter.getHighpassFreq() << "\n";
149 out << "#LPFreq " << filter.getLowpassFreq() << "\n";
150 out << "#CenterFreq " << filter.getCenterFrequency() << "\n";
151 out << "#DesignMethod " << filter.getDesignMethod().getName() << "\n";
152
153 for(int i = 0 ; i<filter.getCoefficients().cols() ;i++)
154 out << filter.getCoefficients()(i) << "\n";
155
156 file.close();
157
158 return true;
159 }
160
161 qDebug()<<"Error Filter File path is empty";
162
163 return false;
164}
Plain-text serialisation of FilterKernel coefficient sets.
Shared utilities (I/O helpers, spectral analysis, layout management, warp algorithms).
static bool readFilter(QString path, FilterKernel &filter)
Definition filterio.cpp:45
static bool writeFilter(const QString &path, const FilterKernel &filter)
Definition filterio.cpp:130
Named filter-design parameter descriptor holding a human-readable name and description (e....
The FilterKernel class provides methods to create/design a FIR filter kernel.
void setSamplingFrequency(double dSFreq)
double getCenterFrequency() const
void setCenterFrequency(double dCenterFreq)
double getSamplingFrequency() const
void setHighpassFreq(double dHighpassFreq)
void setCoefficients(const Eigen::RowVectorXd &vecCoeff)
QString getName() const
static QVector< FilterParameter > m_designMethods
void setFilterOrder(int iOrder)
void setLowpassFreq(double dLowpassFreq)
static QVector< FilterParameter > m_filterTypes
void setName(const QString &sFilterName)
Eigen::RowVectorXd getCoefficients() const
double getLowpassFreq() const
void setFilterType(int iFilterType)
double getHighpassFreq() const
FilterParameter getDesignMethod() const
void setDesignMethod(int iDesignMethod)
FilterParameter getFilterType() const