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{
61class FiffRawData;
62}
63
64//=============================================================================================================
65// DEFINE NAMESPACE RTPROCESSINGLIB
66//=============================================================================================================
67
68namespace RTPROCESSINGLIB
69{
70
75{
77 int iRow;
78 Eigen::RowVectorXd vecData;
79};
80
81//=========================================================================================================
99DSPSHARED_EXPORT bool filterFile(QIODevice& pIODevice,
100 QSharedPointer<FIFFLIB::FiffRawData> pFiffRawData,
101 int type,
102 double dCenterfreq,
103 double dBandwidth,
104 double dTransition,
105 double dSFreq,
106 int iOrder = 4096,
107 int designMethod = UTILSLIB::FilterKernel::m_designMethods.indexOf(UTILSLIB::FilterParameter("Cosine")),
108 const Eigen::RowVectorXi& vecPicks = Eigen::RowVectorXi(),
109 bool bUseThreads = true);
110
111//=========================================================================================================
124DSPSHARED_EXPORT bool filterFile(QIODevice& pIODevice,
125 QSharedPointer<FIFFLIB::FiffRawData> pFiffRawData,
126 const UTILSLIB::FilterKernel& filterKernel,
127 const Eigen::RowVectorXi& vecPicks = Eigen::RowVectorXi(),
128 bool bUseThreads = false);
129
130//=========================================================================================================
149DSPSHARED_EXPORT Eigen::MatrixXd filterData(const Eigen::MatrixXd& matData,
150 int type,
151 double dCenterfreq,
152 double dBandwidth,
153 double dTransition,
154 double dSFreq,
155 int iOrder = 1024,
156 int designMethod = UTILSLIB::FilterKernel::m_designMethods.indexOf(UTILSLIB::FilterParameter("Cosine")),
157 const Eigen::RowVectorXi& vecPicks = Eigen::RowVectorXi(),
158 bool bUseThreads = true,
159 bool bKeepOverhead = false);
160
161//=========================================================================================================
174DSPSHARED_EXPORT Eigen::MatrixXd filterData(const Eigen::MatrixXd& matData,
175 const UTILSLIB::FilterKernel& filterKernel,
176 const Eigen::RowVectorXi& vecPicks = Eigen::RowVectorXi(),
177 bool bUseThreads = true,
178 bool bKeepOverhead = false);
179
180//=========================================================================================================
192DSPSHARED_EXPORT Eigen::MatrixXd filterDataBlock(const Eigen::MatrixXd& matData,
193 const Eigen::RowVectorXi& vecPicks,
194 const UTILSLIB::FilterKernel& filterKernel,
195 bool bUseThreads = true);
196
197//=========================================================================================================
203DSPSHARED_EXPORT void filterChannel(FilterObject& channelDataTime);
204
205//=========================================================================================================
227 const Eigen::MatrixXi& matEvents,
228 float fTMinS,
229 float fTMaxS,
230 qint32 eventType,
231 bool bApplyBaseline,
232 float fTBaselineFromS,
233 float fTBaselineToS,
234 const QMap<QString, double>& mapReject,
235 const UTILSLIB::FilterKernel& filterKernel,
236 const QStringList& lExcludeChs = QStringList(),
237 const Eigen::RowVectorXi& vecPicks = Eigen::RowVectorXi());
238
239//=============================================================================================================
249{
250public:
251 typedef QSharedPointer<FilterOverlapAdd> SPtr;
252 typedef QSharedPointer<const FilterOverlapAdd> ConstSPtr;
253
254 //=========================================================================================================
273 Eigen::MatrixXd calculate(const Eigen::MatrixXd& matData,
274 int type,
275 double dCenterfreq,
276 double dBandwidth,
277 double dTransition,
278 double dSFreq,
279 int iOrder = 1024,
280 int designMethod = UTILSLIB::FilterKernel::m_designMethods.indexOf(UTILSLIB::FilterParameter("Cosine")),
281 const Eigen::RowVectorXi& vecPicks = Eigen::RowVectorXi(),
282 bool bFilterEnd = true,
283 bool bUseThreads = true,
284 bool bKeepOverhead = false);
285
286 //=========================================================================================================
299 Eigen::MatrixXd calculate(const Eigen::MatrixXd& matData,
300 const UTILSLIB::FilterKernel& filterKernel,
301 const Eigen::RowVectorXi& vecPicks = Eigen::RowVectorXi(),
302 bool bFilterEnd = true,
303 bool bUseThreads = true,
304 bool bKeepOverhead = false);
305
306 //=========================================================================================================
310 void reset();
311
312private:
313 Eigen::MatrixXd m_matOverlapBack;
314 Eigen::MatrixXd m_matOverlapFront;
315};
316
317//=============================================================================================================
318// INLINE DEFINITIONS
319//=============================================================================================================
320
321} // NAMESPACE
322
323#endif // RT_FILTER_RT_H
Single averaged evoked response: time axis, samples, baseline, channel info and processing history.
Full FIFF measurement metadata: everything from FIFFB_MEAS / FIFFB_MEAS_INFO needed to interpret a re...
Export/import macros and namespace declaration for the DSP library.
#define DSPSHARED_EXPORT
Definition dsp_global.h:50
Linear-phase FIR filter kernel with overlap-add FFT convolution back-end.
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:75
UTILSLIB::FilterKernel filterKernel
Definition rt_filter.h:76
Eigen::RowVectorXd vecData
Definition rt_filter.h:78
Applies FIR filtering via FFT-based overlap-add convolution for continuous data streams.
Definition rt_filter.h:249
QSharedPointer< const FilterOverlapAdd > ConstSPtr
Definition rt_filter.h:252
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:251
Single averaged evoked response: time axis, data, baseline, channel info and averaging metadata.
Definition fiff_evoked.h:77
Continuous FIFF raw recording: FiffInfo plus a random-access directory of FIFF_DATA_BUFFER tags.