MNE-CPP  0.1.9
A Framework for Electrophysiology
filter.h
Go to the documentation of this file.
1 //=============================================================================================================
36 #ifndef FILTER_RTPROCESSING_H
37 #define FILTER_RTPROCESSING_H
38 
39 //=============================================================================================================
40 // INCLUDES
41 //=============================================================================================================
42 
43 #include "rtprocessing_global.h"
44 
45 #include "helpers/filterkernel.h"
46 
47 #include <fiff/fiff_info.h>
48 
49 //=============================================================================================================
50 // QT INCLUDES
51 //=============================================================================================================
52 
53 #include <QSharedPointer>
54 #include <QtConcurrent/QtConcurrent>
55 
56 //=============================================================================================================
57 // EIGEN INCLUDES
58 //=============================================================================================================
59 
60 #include <Eigen/Core>
61 #include <unsupported/Eigen/FFT>
62 
63 //=============================================================================================================
64 // FORWARD DECLARATIONS
65 //=============================================================================================================
66 
67 namespace FIFFLIB {
68  class FiffRawData;
69 }
70 
71 //=============================================================================================================
72 // DEFINE NAMESPACE RTPROCESSINGLIB
73 //=============================================================================================================
74 
75 namespace RTPROCESSINGLIB
76 {
77 
78 typedef struct {
79  FilterKernel filterKernel;
80  int iRow;
81  Eigen::RowVectorXd vecData;
82 } FilterObject;
83 
84 //=========================================================================================================
102 RTPROCESINGSHARED_EXPORT bool filterFile(QIODevice& pIODevice,
103  QSharedPointer<FIFFLIB::FiffRawData> pFiffRawData,
104  int type,
105  double dCenterfreq,
106  double dBandwidth,
107  double dTransition,
108  double dSFreq,
109  int iOrder = 4096,
110  int designMethod = FilterKernel::m_designMethods.indexOf(FilterParameter("Cosine")),
111  const Eigen::RowVectorXi &vecPicks = Eigen::RowVectorXi(),
112  bool bUseThreads = true);
113 
114 //=========================================================================================================
127 RTPROCESINGSHARED_EXPORT bool filterFile(QIODevice& pIODevice,
128  QSharedPointer<FIFFLIB::FiffRawData> pFiffRawData,
129  const RTPROCESSINGLIB::FilterKernel& filterKernel,
130  const Eigen::RowVectorXi &vecPicks = Eigen::RowVectorXi(),
131  bool bUseThreads = false);
132 
133 //=========================================================================================================
152 RTPROCESINGSHARED_EXPORT Eigen::MatrixXd filterData(const Eigen::MatrixXd& matData,
153  int type,
154  double dCenterfreq,
155  double dBandwidth,
156  double dTransition,
157  double dSFreq,
158  int iOrder = 1024,
159  int designMethod = FilterKernel::m_designMethods.indexOf(FilterParameter("Cosine")),
160  const Eigen::RowVectorXi &vecPicks = Eigen::RowVectorXi(),
161  bool bUseThreads = true,
162  bool bKeepOverhead = false);
163 
164 //=========================================================================================================
177 RTPROCESINGSHARED_EXPORT Eigen::MatrixXd filterData(const Eigen::MatrixXd& mataData,
178  const RTPROCESSINGLIB::FilterKernel& filterKernel,
179  const Eigen::RowVectorXi& vecPicks = Eigen::RowVectorXi(),
180  bool bUseThreads = true,
181  bool bKeepOverhead = false);
182 
183 //=========================================================================================================
195 RTPROCESINGSHARED_EXPORT Eigen::MatrixXd filterDataBlock(const Eigen::MatrixXd& mataData,
196  const Eigen::RowVectorXi& vecPicks,
197  const RTPROCESSINGLIB::FilterKernel& filterKernel,
198  bool bUseThreads = true);
199 
200 //=========================================================================================================
207 
208 //=============================================================================================================
216 {
217 public:
218  typedef QSharedPointer<FilterOverlapAdd> SPtr;
219  typedef QSharedPointer<const FilterOverlapAdd> ConstSPtr;
221  //=========================================================================================================
240  Eigen::MatrixXd calculate(const Eigen::MatrixXd& matData,
241  int type,
242  double dCenterfreq,
243  double dBandwidth,
244  double dTransition,
245  double dSFreq,
246  int iOrder = 1024,
247  int designMethod = FilterKernel::m_designMethods.indexOf(FilterParameter("Cosine")),
248  const Eigen::RowVectorXi &vecPicks = Eigen::RowVectorXi(),
249  bool bFilterEnd = true,
250  bool bUseThreads = true,
251  bool bKeepOverhead = false);
252 
253  //=========================================================================================================
266  Eigen::MatrixXd calculate(const Eigen::MatrixXd& mataData,
267  const RTPROCESSINGLIB::FilterKernel& filterKernel,
268  const Eigen::RowVectorXi& vecPicks = Eigen::RowVectorXi(),
269  bool bFilterEnd = true,
270  bool bUseThreads = true,
271  bool bKeepOverhead = false);
272 
273  //=========================================================================================================
277  void reset();
278 
279 private:
280  Eigen::MatrixXd m_matOverlapBack;
281  Eigen::MatrixXd m_matOverlapFront;
282 };
283 
284 //=============================================================================================================
285 // INLINE DEFINITIONS
286 //=============================================================================================================
287 
288 } // NAMESPACE
289 
290 #endif // FILTER_RTPROCESSING_H
The FilterKernel class represents a filter object that generates the FIR filter coefficients using Pa...
QSharedPointer< FilterOverlapAdd > SPtr
Definition: filter.h:218
RTPROCESINGSHARED_EXPORT bool filterFile(QIODevice &pIODevice, QSharedPointer< FIFFLIB::FiffRawData > pFiffRawData, int type, double dCenterfreq, double dBandwidth, double dTransition, double dSFreq, int iOrder=4096, int designMethod=FilterKernel::m_designMethods.indexOf(FilterParameter("Cosine")), const Eigen::RowVectorXi &vecPicks=Eigen::RowVectorXi(), bool bUseThreads=true)
The FilterKernel class provides methods to create/design a FIR filter kernel.
Definition: filterkernel.h:132
#define RTPROCESINGSHARED_EXPORT
RTPROCESINGSHARED_EXPORT Eigen::MatrixXd filterDataBlock(const Eigen::MatrixXd &mataData, const Eigen::RowVectorXi &vecPicks, const RTPROCESSINGLIB::FilterKernel &filterKernel, bool bUseThreads=true)
Filtering with FFT convolution and the overlap add method for continous data streams.
Definition: filter.h:215
RTPROCESINGSHARED_EXPORT Eigen::MatrixXd filterData(const Eigen::MatrixXd &matData, int type, double dCenterfreq, double dBandwidth, double dTransition, double dSFreq, int iOrder=1024, int designMethod=FilterKernel::m_designMethods.indexOf(FilterParameter("Cosine")), const Eigen::RowVectorXi &vecPicks=Eigen::RowVectorXi(), bool bUseThreads=true, bool bKeepOverhead=false)
RTPROCESINGSHARED_EXPORT void filterChannel(FilterObject &channelDataTime)
Definition: filter.cpp:375
realtime library export/import macros.
The FilterParameter class.
Definition: filterkernel.h:83
QSharedPointer< const FilterOverlapAdd > ConstSPtr
Definition: filter.h:219
FiffInfo class declaration.