15 FILTER_ABS_BANDLIMIT, // filter times |x|
23 FILTER_METHOD_INVALID,
24 FILTER_METHOD_CONVOLUTION,
25 FILTER_METHOD_FOURIER,
27 FILTER_METHOD_FFT_ZEROPAD_2,
28 FILTER_METHOD_FFT_ZEROPAD_4,
29 FILTER_METHOD_FFT_ZEROPAD_6
38 static const char FILTER_ABS_BANDLIMIT_STR[]= "abs_bandlimit";
39 static const char FILTER_ABS_SINC_STR[]= "abs_sinc";
40 static const char FILTER_ABS_COS_STR[]= "abs_cos";
41 static const char FILTER_ABS_HAMMING_STR[]= "abs_hamming";
42 static const char FILTER_SHEPP_STR[]= "shepp";
43 static const char FILTER_BANDLIMIT_STR[]= "bandlimit";
44 static const char FILTER_SINC_STR[]= "sinc";
45 static const char FILTER_COS_STR[]= "cos";
46 static const char FILTER_HAMMING_STR[]= "hamming";
47 static const char FILTER_TRIANGLE_STR[]= "triangle";
49 static const char FILTER_METHOD_CONVOLUTION_STR[]= "convolution";
50 static const char FILTER_METHOD_FOURIER_STR[]= "fourier";
51 static const char FILTER_METHOD_FFT_STR[]= "fft";
52 static const char FILTER_METHOD_FFT_ZEROPAD_2_STR[]="fft_zeropad2";
53 static const char FILTER_METHOD_FFT_ZEROPAD_4_STR[]="fft_zeropad4";
54 static const char FILTER_METHOD_FFT_ZEROPAD_6_STR[]="fft_zeropad6";
56 static const char DOMAIN_FREQ_STR[]= "freq";
57 static const char DOMAIN_SPATIAL_STR[]= "spatial";
60 SignalFilter (const char* filterName, double bw, double xmin, double xmax, int n, double param, const char* domainName, const int numIntegral = 0);
62 SignalFilter (const FilterID filt_type, double bw, double xmin, double xmax, int n, double param, const DomainID domain, const int numIntegral = 0);
64 SignalFilter (const char* filterName, const char* domainName, double bw, double param, int numIntegral = 0);
68 double* getFilter (void) const
69 { return m_vecFilter; }
71 double convolve (const double f[], const double dx, const int n, const int np) const;
73 double convolve (const float f[], const double dx, const int n, const int np) const;
75 bool fail(void) const {return m_fail;}
76 const string& failMessage(void) const {return m_failMessage;}
78 const string& nameFilter(void) const { return m_nameFilter;}
79 const string& nameDomain(void) const { return m_nameDomain;}
80 const FilterID idFilter(void) const { return m_idFilter;}
81 const DomainID idDomain(void) const { return m_idDomain;}
83 double response (double x);
85 static double spatialResponse (FilterID fType, double bw, double x, double param, int nIntegral = 0);
87 static double frequencyResponse (FilterID fType, double bw, double u, double param);
89 static double spatialResponseCalc (FilterID fType, double bw, double x, double param, int n);
91 static double spatialResponseAnalytic (FilterID fType, double bw, double x, double param);
100 string m_failMessage;
102 string m_nameFilterMethod;
105 FilterMethodID m_idFilterMethod;
107 double m_filterParam;
110 static FilterID convertFilterNameToID (const char* filterName);
111 static const char* convertFilterIDToName (const FilterID filterID);
112 static const DomainID convertDomainNameToID (const char* domainName);
113 static const char* convertDomainIDToName (const DomainID domainID);
115 void init (const FilterID filt_type, double bw, double xmin, double xmax, int n, double param, const DomainID domain, const int numInt);
117 double spatialResponseCalc (double x, double param, int n) const;
119 double spatialResponseAnalytic (double x, double param) const;
121 double frequencyResponse (double u, double param) const;
123 static double sinc (double x, double mult)
124 { return (fabs(x) > F_EPSILON ? (sin (x * mult) / x) : 1.0); }
126 static double integral_abscos (double u, double w);