+SignalFilter::SignalFilter (const char* szFilterName, double dFilterMinimum, double dFilterMaximum, int nFilterPoints, double dBandwidth, double dFilterParam, const char* szDomainName)
+ : m_adFilter(NULL), m_fail(false)
+{
+ m_idFilter = convertFilterNameToID (szFilterName);
+ if (m_idFilter == FILTER_INVALID) {
+ m_fail = true;
+ m_failMessage = "Invalid Filter name ";
+ m_failMessage += szFilterName;
+ return;
+ }
+ m_idDomain = convertDomainNameToID (szDomainName);
+ if (m_idDomain == DOMAIN_INVALID) {
+ m_fail = true;
+ m_failMessage = "Invalid domain name ";
+ m_failMessage += szDomainName;
+ return;
+ }
+ init (m_idFilter, dFilterMinimum, dFilterMaximum, nFilterPoints, dBandwidth, dFilterParam, m_idDomain);
+}
+
+SignalFilter::SignalFilter (const int idFilter, double dFilterMinimum, double dFilterMaximum, int nFilterPoints, double dBandwidth, double dFilterParam, const int idDomain)
+ : m_adFilter(NULL), m_fail(false)
+{
+ init (idFilter, dFilterMinimum, dFilterMaximum, nFilterPoints, dBandwidth, dFilterParam, idDomain);
+}
+
+SignalFilter::SignalFilter (const char* szFilterName, const char* szDomainName, double dBandwidth, double dFilterParam)
+ : m_adFilter(NULL), m_fail(false)
+{
+ m_nFilterPoints = 0;
+ m_dBandwidth = dBandwidth;
+ m_dFilterParam = dFilterParam;
+ m_idFilter = convertFilterNameToID (szFilterName);
+ if (m_idFilter == FILTER_INVALID) {
+ m_fail = true;
+ m_failMessage = "Invalid Filter name ";
+ m_failMessage += szFilterName;
+ return;
+ }
+ m_idDomain = convertDomainNameToID (szDomainName);
+ if (m_idDomain == DOMAIN_INVALID) {
+ m_fail = true;
+ m_failMessage = "Invalid domain name ";
+ m_failMessage += szDomainName;
+ return;
+ }
+}
+
+void
+SignalFilter::init (const int idFilter, double dFilterMinimum, double dFilterMaximum, int nFilterPoints, double dBandwidth, double dFilterParam, const int idDomain)
+{
+ m_idFilter = idFilter;
+ m_idDomain = idDomain;
+ if (m_idFilter == FILTER_INVALID || m_idDomain == DOMAIN_INVALID) {
+ m_fail = true;
+ return;
+ }
+ if (nFilterPoints < 2) {
+ m_fail = true;
+ m_failMessage = "Number of filter points ";
+ m_failMessage += nFilterPoints;
+ m_failMessage = " less than 2";
+ return;
+ }
+
+ m_nameFilter = convertFilterIDToName (m_idFilter);
+ m_nameDomain = convertDomainIDToName (m_idDomain);
+ m_nFilterPoints = nFilterPoints;
+ m_dFilterParam = dFilterParam;
+ m_dBandwidth = dBandwidth;
+ m_dFilterMin = dFilterMinimum;
+ m_dFilterMax = dFilterMaximum;
+
+ m_dFilterInc = (m_dFilterMax - m_dFilterMin) / (m_nFilterPoints - 1);
+ m_adFilter = new double [m_nFilterPoints];
+
+ if (m_idDomain == DOMAIN_FREQUENCY)
+ createFrequencyFilter (m_adFilter);
+ else if (m_idDomain == DOMAIN_SPATIAL)
+ createSpatialFilter (m_adFilter);
+}
+
+
+SignalFilter::~SignalFilter (void)
+{
+ delete [] m_adFilter;
+}
+
+void
+SignalFilter::createFrequencyFilter (double* adFilter) const