** Date Started: Aug 1984
**
** This is part of the CTSim program
-** Copyright (C) 1983-2000 Kevin Rosenberg
+** Copyright (c) 1983-2000 Kevin Rosenberg
**
-** $Id: filter.cpp,v 1.32 2000/12/04 19:50:57 kevin Exp $
+** $Id: filter.cpp,v 1.38 2001/02/22 18:22:40 kevin Exp $
**
** 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
int SignalFilter::N_INTEGRAL=500; //static member
const int SignalFilter::FILTER_INVALID = -1 ;
-const int SignalFilter::FILTER_ABS_BANDLIMIT = 0; // filter times |x = |
+const int SignalFilter::FILTER_ABS_BANDLIMIT = 0; // filter times |x|
const int SignalFilter::FILTER_ABS_G_HAMMING = 1;
-const int SignalFilter::FILTER_ABS_COSINE = 2;
-const int SignalFilter::FILTER_ABS_SINC = 3;
-const int SignalFilter::FILTER_SHEPP = 4;
-const int SignalFilter::FILTER_BANDLIMIT = 5;
-const int SignalFilter::FILTER_SINC = 6;
-const int SignalFilter::FILTER_G_HAMMING = 7;
-const int SignalFilter::FILTER_COSINE = 8;
-const int SignalFilter::FILTER_TRIANGLE = 9;
-
-const char* SignalFilter::s_aszFilterName[] = {
+const int SignalFilter::FILTER_ABS_HANNING = 2;
+const int SignalFilter::FILTER_ABS_COSINE = 3;
+const int SignalFilter::FILTER_ABS_SINC = 4;
+const int SignalFilter::FILTER_SHEPP = 5;
+const int SignalFilter::FILTER_BANDLIMIT = 6;
+const int SignalFilter::FILTER_SINC = 7;
+const int SignalFilter::FILTER_G_HAMMING = 8;
+const int SignalFilter::FILTER_HANNING = 9;
+const int SignalFilter::FILTER_COSINE = 10;
+const int SignalFilter::FILTER_TRIANGLE = 11;
+
+const int SignalFilter::s_iReconstructFilterCount = 4;
+
+const char* const SignalFilter::s_aszFilterName[] = {
{"abs_bandlimit"},
{"abs_hamming"},
+ {"abs_hanning"},
{"abs_cosine"},
- {"abs_sinc"},
{"shepp"},
+ {"abs_sinc"},
{"bandlimit"},
{"sinc"},
{"hamming"},
+ {"hanning"},
{"cosine"},
{"triangle"},
};
-const char* SignalFilter::s_aszFilterTitle[] = {
+const char* const SignalFilter::s_aszFilterTitle[] = {
{"Abs(w) * Bandlimit"},
{"Abs(w) * Hamming"},
+ {"Abs(w) * Hanning"},
{"Abs(w) * Cosine"},
- {"Abs(w) * Sinc"},
{"Shepp"},
+ {"Abs(w) * Sinc"},
{"Bandlimit"},
{"Sinc"},
{"Hamming"},
+ {"Hanning"},
{"Cosine"},
{"Triangle"},
};
const int SignalFilter::DOMAIN_FREQUENCY = 0;
const int SignalFilter::DOMAIN_SPATIAL = 1;
-const char* SignalFilter::s_aszDomainName[] = {
+const char* const SignalFilter::s_aszDomainName[] = {
{"frequency"},
{"spatial"},
};
-const char* SignalFilter::s_aszDomainTitle[] = {
+const char* const SignalFilter::s_aszDomainTitle[] = {
{"Frequency"},
{"Spatial"},
};
q[i] = frequencyResponse (filterID, bw, z, param) * cos (TWOPI * z * x);
double y = 2 * integrateSimpson (zmin, zmax, q, n);
- delete q;\r
+ delete q;
return (y);
}
case FILTER_ABS_SINC:
q = au * bw * sinc (PI * bw * u, 1.);
break;
+ case FILTER_HANNING:
+ param = 0.54;
+ // follow through to G_HAMMING
case FILTER_G_HAMMING:
if (fabs(au) >= fabs(bw / 2) + F_EPSILON)
q = 0;
else
q = param + (1 - param) * cos (TWOPI * u / bw);
break;
+ case FILTER_ABS_HANNING:
+ param = 0.54;
+ // follow through to ABS_G_HAMMING
case FILTER_ABS_G_HAMMING:
if (fabs(au) >= fabs(bw / 2) + F_EPSILON)
q = 0;
case FILTER_TRIANGLE:
case FILTER_COSINE:
case FILTER_G_HAMMING:
+ case FILTER_HANNING:
case FILTER_ABS_BANDLIMIT:
case FILTER_ABS_COSINE:
case FILTER_ABS_G_HAMMING:
+ case FILTER_ABS_HANNING:
case FILTER_SHEPP:
case FILTER_SINC:
haveAnalytic = true;
case FILTER_COSINE:
q = sinc(b-u,w) + sinc(b+u,w);
break;
+ case FILTER_HANNING:
+ param = 0.54;
+ // follow through to G_HAMMING
case FILTER_G_HAMMING:
q = 2 * param * sin(u*w)/u + (1-param) * (sinc(b2-u, w) + sinc(b2+u, w));
break;
case FILTER_ABS_COSINE:
q = integral_abscos(b-u,w) + integral_abscos(b+u,w);
break;
+ case FILTER_ABS_HANNING:
+ param = 0.54;
+ // follow through to ABS_G_HAMMING
case FILTER_ABS_G_HAMMING:
q = 2 * param * integral_abscos(u,w) +
(1-param)*(integral_abscos(u-b2,w)+integral_abscos(u+b2,w));
}
-/* NAME
- * sinc Return sin(x)/x function
- *
- * SYNOPSIS
- * v = sinc (x, mult)
- * double v sinc value
- * double x, mult
- *
- * DESCRIPTION
- * v = sin(x * mult) / x;
- */
+// Functions that are inline in filter.h
+
+
+// sinc Return sin(x)/x function
+// v = sinc (x, mult)
+// Calculates sin(x * mult) / x;
+
+// integral_abscos Returns integral of u*cos(u)
+//
+// q = integral_abscos (u, w)
+// double q Integral value
+// double u Integration variable
+// double w Upper integration boundary
+// Returns the value of integral of u*cos(u)*dV for V = 0 to w
-/* NAME
- * integral_abscos Returns integral of u*cos(u)
- *
- * SYNOPSIS
- * q = integral_abscos (u, w)
- * double q Integral value
- * double u Integration variable
- * double w Upper integration boundary
- *
- * DESCRIPTION
- * Returns the value of integral of u*cos(u)*dV for V = 0 to w
- */