** Date Started: June 2000
**
** This is part of the CTSim program
-** Copyright (C) 1983-2000 Kevin Rosenberg
+** Copyright (c) 1983-2001 Kevin Rosenberg
**
-** $Id: filter.h,v 1.21 2000/11/28 14:54:07 kevin Exp $
+** $Id$
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License (version 2) as
#include "config.h"
#endif
#ifdef HAVE_FFTW
-#include <fftw.h>
-#include <rfftw.h>
+#include <fftw3.h>
#endif
static const int FILTER_ABS_BANDLIMIT; // filter times |x|
static const int FILTER_ABS_SINC;
static const int FILTER_ABS_G_HAMMING;
+ static const int FILTER_ABS_HANNING;
static const int FILTER_ABS_COSINE;
static const int FILTER_SHEPP;
static const int FILTER_BANDLIMIT;
static const int FILTER_SINC;
static const int FILTER_G_HAMMING;
+ static const int FILTER_HANNING;
static const int FILTER_COSINE;
static const int FILTER_TRIANGLE;
{ return m_adFilter; }
bool fail(void) const {return m_fail;}
- const string& failMessage(void) const {return m_failMessage;}
+ const std::string& failMessage(void) const {return m_failMessage;}
- const string& nameFilter(void) const { return m_nameFilter;}
- const string& nameDomain(void) const { return m_nameDomain;}
+ const std::string& nameFilter(void) const { return m_nameFilter;}
+ const std::string& nameDomain(void) const { return m_nameDomain;}
const int idFilter(void) const { return m_idFilter;}
const int idDomain(void) const { return m_idDomain;}
static void setNumIntegral(int nIntegral) {N_INTEGRAL = nIntegral;}
static const int getFilterCount() {return s_iFilterCount;}
- static const char** getFilterNameArray() {return s_aszFilterName;}
- static const char** getFilterTitleArray() {return s_aszFilterTitle;}
+ static const int getReconstructFilterCount() { return s_iReconstructFilterCount; }
+
+ static const char* const* getFilterNameArray() {return s_aszFilterName;}
+ static const char* const* getFilterTitleArray() {return s_aszFilterTitle;}
static int convertFilterNameToID (const char* const filterName);
static const char* convertFilterIDToName (const int idFilter);
static const char* convertFilterIDToTitle (const int idFilter);
static const int getDomainCount() {return s_iDomainCount;}
- static const char** getDomainNameArray() {return s_aszDomainName;}
- static const char** getDomainTitleArray() {return s_aszDomainTitle;}
+ static const char* const* getDomainNameArray() {return s_aszDomainName;}
+ static const char* const* getDomainTitleArray() {return s_aszDomainTitle;}
static int convertDomainNameToID (const char* const domainName);
static const char* convertDomainIDToName (const int idDomain);
static const char* convertDomainIDToTitle (const int idDomain);
+ static double sinc (double x)
+ { return (fabs(x) > F_EPSILON ? (sin (x) / x) : 1.0); }
+
+ static double sinc (double x, double mult)
+ { return (fabs(x) > F_EPSILON ? (sin (x * mult) / x) : 1.0); }
+
private:
int m_nFilterPoints;
double m_dBandwidth;
double m_dFilterMax;
double* m_adFilter;
- string m_nameFilter;
- string m_nameDomain;
+ std::string m_nameFilter;
+ std::string m_nameDomain;
int m_idFilter;
int m_idDomain;
bool m_fail;
- string m_failMessage;
+ std::string m_failMessage;
- static const char* s_aszFilterName[];
- static const char* s_aszFilterTitle[];
+ static const char* const s_aszFilterName[];
+ static const char* const s_aszFilterTitle[];
static const int s_iFilterCount;
- static const char* s_aszDomainName[];
- static const char* s_aszDomainTitle[];
+ static const int s_iReconstructFilterCount;
+ static const char* const s_aszDomainName[];
+ static const char* const s_aszDomainTitle[];
static const int s_iDomainCount;
static int N_INTEGRAL;
double spatialResponseAnalytic (double x) const;
double frequencyResponse (double u) const;
- static double sinc (double x, double mult)
- { return (fabs(x) > F_EPSILON ? (sin (x * mult) / x) : 1.0); }
static double integral_abscos (double u, double w)
{ return (fabs (u) > F_EPSILON ? (cos (u * w) - 1) / (u * u) + w / u * sin (u * w) : (w * w / 2)); }
};