v2.0.0
Loading...
Searching...
No Matches
rt_filter.h
Go to the documentation of this file.
1//=============================================================================================================
26
27#ifndef RT_FILTER_RT_H
28#define RT_FILTER_RT_H
29
30//=============================================================================================================
31// INCLUDES
32//=============================================================================================================
33
34#include "../dsp_global.h"
35
36#include "../filterkernel.h"
37
38#include <fiff/fiff_info.h>
39#include <fiff/fiff_evoked.h>
40
41//=============================================================================================================
42// QT INCLUDES
43//=============================================================================================================
44
45#include <QSharedPointer>
46#include <QtConcurrent/QtConcurrent>
47
48//=============================================================================================================
49// EIGEN INCLUDES
50//=============================================================================================================
51
52#include <Eigen/Core>
53#include <unsupported/Eigen/FFT>
54
55//=============================================================================================================
56// FORWARD DECLARATIONS
57//=============================================================================================================
58
59namespace FIFFLIB {
60 class FiffRawData;
61}
62
63//=============================================================================================================
64// DEFINE NAMESPACE RTPROCESSINGLIB
65//=============================================================================================================
66
67namespace RTPROCESSINGLIB
68{
69
78
79//=========================================================================================================
97DSPSHARED_EXPORT bool filterFile(QIODevice& pIODevice,
98 QSharedPointer<FIFFLIB::FiffRawData> pFiffRawData,
99 int type,
100 double dCenterfreq,
101 double dBandwidth,
102 double dTransition,
103 double dSFreq,
104 int iOrder = 4096,
105 int designMethod = UTILSLIB::FilterKernel::m_designMethods.indexOf(UTILSLIB::FilterParameter("Cosine")),
106 const Eigen::RowVectorXi &vecPicks = Eigen::RowVectorXi(),
107 bool bUseThreads = true);
108
109//=========================================================================================================
122DSPSHARED_EXPORT bool filterFile(QIODevice& pIODevice,
123 QSharedPointer<FIFFLIB::FiffRawData> pFiffRawData,
124 const UTILSLIB::FilterKernel& filterKernel,
125 const Eigen::RowVectorXi &vecPicks = Eigen::RowVectorXi(),
126 bool bUseThreads = false);
127
128//=========================================================================================================
147DSPSHARED_EXPORT Eigen::MatrixXd filterData(const Eigen::MatrixXd& matData,
148 int type,
149 double dCenterfreq,
150 double dBandwidth,
151 double dTransition,
152 double dSFreq,
153 int iOrder = 1024,
154 int designMethod = UTILSLIB::FilterKernel::m_designMethods.indexOf(UTILSLIB::FilterParameter("Cosine")),
155 const Eigen::RowVectorXi &vecPicks = Eigen::RowVectorXi(),
156 bool bUseThreads = true,
157 bool bKeepOverhead = false);
158
159//=========================================================================================================
172DSPSHARED_EXPORT Eigen::MatrixXd filterData(const Eigen::MatrixXd& matData,
173 const UTILSLIB::FilterKernel& filterKernel,
174 const Eigen::RowVectorXi& vecPicks = Eigen::RowVectorXi(),
175 bool bUseThreads = true,
176 bool bKeepOverhead = false);
177
178//=========================================================================================================
190DSPSHARED_EXPORT Eigen::MatrixXd filterDataBlock(const Eigen::MatrixXd& matData,
191 const Eigen::RowVectorXi& vecPicks,
192 const UTILSLIB::FilterKernel& filterKernel,
193 bool bUseThreads = true);
194
195//=========================================================================================================
201DSPSHARED_EXPORT void filterChannel(FilterObject &channelDataTime);
202
203//=========================================================================================================
225 const Eigen::MatrixXi& matEvents,
226 float fTMinS,
227 float fTMaxS,
228 qint32 eventType,
229 bool bApplyBaseline,
230 float fTBaselineFromS,
231 float fTBaselineToS,
232 const QMap<QString,double>& mapReject,
233 const UTILSLIB::FilterKernel& filterKernel,
234 const QStringList &lExcludeChs = QStringList(),
235 const Eigen::RowVectorXi& vecPicks = Eigen::RowVectorXi());
236
237//=============================================================================================================
245{
246public:
247 typedef QSharedPointer<FilterOverlapAdd> SPtr;
248 typedef QSharedPointer<const FilterOverlapAdd> ConstSPtr;
249
250 //=========================================================================================================
269 Eigen::MatrixXd calculate(const Eigen::MatrixXd& matData,
270 int type,
271 double dCenterfreq,
272 double dBandwidth,
273 double dTransition,
274 double dSFreq,
275 int iOrder = 1024,
276 int designMethod = UTILSLIB::FilterKernel::m_designMethods.indexOf(UTILSLIB::FilterParameter("Cosine")),
277 const Eigen::RowVectorXi &vecPicks = Eigen::RowVectorXi(),
278 bool bFilterEnd = true,
279 bool bUseThreads = true,
280 bool bKeepOverhead = false);
281
282 //=========================================================================================================
295 Eigen::MatrixXd calculate(const Eigen::MatrixXd& matData,
296 const UTILSLIB::FilterKernel& filterKernel,
297 const Eigen::RowVectorXi& vecPicks = Eigen::RowVectorXi(),
298 bool bFilterEnd = true,
299 bool bUseThreads = true,
300 bool bKeepOverhead = false);
301
302 //=========================================================================================================
306 void reset();
307
308private:
309 Eigen::MatrixXd m_matOverlapBack;
310 Eigen::MatrixXd m_matOverlapFront;
311};
312
313//=============================================================================================================
314// INLINE DEFINITIONS
315//=============================================================================================================
316
317} // NAMESPACE
318
319#endif // RT_FILTER_RT_H
Full FIFF measurement metadata: everything from FIFFB_MEAS / FIFFB_MEAS_INFO needed to interpret a re...
Single averaged evoked response: time axis, samples, baseline, channel info and processing history.
Linear-phase FIR filter kernel with overlap-add FFT convolution back-end.
Export/import macros and namespace declaration for the DSP library.
#define DSPSHARED_EXPORT
Definition dsp_global.h:50
FIFF file I/O, in-memory data structures and high-level readers/writers.
DSPSHARED_EXPORT FIFFLIB::FiffEvoked computeFilteredAverage(const FIFFLIB::FiffRawData &raw, const Eigen::MatrixXi &matEvents, float fTMinS, float fTMaxS, qint32 eventType, bool bApplyBaseline, float fTBaselineFromS, float fTBaselineToS, const QMap< QString, double > &mapReject, const UTILSLIB::FilterKernel &filterKernel, const QStringList &lExcludeChs=QStringList(), const Eigen::RowVectorXi &vecPicks=Eigen::RowVectorXi())
DSPSHARED_EXPORT Eigen::MatrixXd filterData(const Eigen::MatrixXd &matData, int type, double dCenterfreq, double dBandwidth, double dTransition, double dSFreq, int iOrder=1024, int designMethod=UTILSLIB::FilterKernel::m_designMethods.indexOf(UTILSLIB::FilterParameter("Cosine")), const Eigen::RowVectorXi &vecPicks=Eigen::RowVectorXi(), bool bUseThreads=true, bool bKeepOverhead=false)
DSPSHARED_EXPORT Eigen::MatrixXd filterDataBlock(const Eigen::MatrixXd &matData, const Eigen::RowVectorXi &vecPicks, const UTILSLIB::FilterKernel &filterKernel, bool bUseThreads=true)
DSPSHARED_EXPORT void filterChannel(FilterObject &channelDataTime)
DSPSHARED_EXPORT bool filterFile(QIODevice &pIODevice, QSharedPointer< FIFFLIB::FiffRawData > pFiffRawData, int type, double dCenterfreq, double dBandwidth, double dTransition, double dSFreq, int iOrder=4096, int designMethod=UTILSLIB::FilterKernel::m_designMethods.indexOf(UTILSLIB::FilterParameter("Cosine")), const Eigen::RowVectorXi &vecPicks=Eigen::RowVectorXi(), bool bUseThreads=true)
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.
static QVector< FilterParameter > m_designMethods
Lightweight filter configuration holding kernel coefficients and overlap-add state for one channel.
Definition rt_filter.h:73
UTILSLIB::FilterKernel filterKernel
Definition rt_filter.h:74
Eigen::RowVectorXd vecData
Definition rt_filter.h:76
Applies FIR filtering via FFT-based overlap-add convolution for continuous data streams.
Definition rt_filter.h:245
QSharedPointer< const FilterOverlapAdd > ConstSPtr
Definition rt_filter.h:248
Eigen::MatrixXd calculate(const Eigen::MatrixXd &matData, const UTILSLIB::FilterKernel &filterKernel, const Eigen::RowVectorXi &vecPicks=Eigen::RowVectorXi(), bool bFilterEnd=true, bool bUseThreads=true, bool bKeepOverhead=false)
Eigen::MatrixXd calculate(const Eigen::MatrixXd &matData, int type, double dCenterfreq, double dBandwidth, double dTransition, double dSFreq, int iOrder=1024, int designMethod=UTILSLIB::FilterKernel::m_designMethods.indexOf(UTILSLIB::FilterParameter("Cosine")), const Eigen::RowVectorXi &vecPicks=Eigen::RowVectorXi(), bool bFilterEnd=true, bool bUseThreads=true, bool bKeepOverhead=false)
QSharedPointer< FilterOverlapAdd > SPtr
Definition rt_filter.h:247
Single averaged evoked response: time axis, data, baseline, channel info and averaging metadata.
Definition fiff_evoked.h:75