** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: filter.cpp,v 1.26 2000/08/22 07:02:48 kevin Exp $
+** $Id: filter.cpp,v 1.28 2000/11/10 15:29:37 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
const int SignalFilter::FILTER_INVALID = -1 ;
const int SignalFilter::FILTER_ABS_BANDLIMIT = 0; // filter times |x = |
-const int SignalFilter::FILTER_ABS_SINC = 1;
-const int SignalFilter::FILTER_ABS_G_HAMMING = 2;
-const int SignalFilter::FILTER_ABS_COSINE = 3;
+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 char* SignalFilter::s_aszFilterName[] = {
{"abs_bandlimit"},
- {"abs_sinc"},
{"abs_hamming"},
{"abs_cosine"},
+ {"abs_sinc"},
{"shepp"},
{"bandlimit"},
{"sinc"},
const char* SignalFilter::s_aszFilterTitle[] = {
{"Abs(w) * Bandlimit"},
- {"Abs(w) * Sinc"},
{"Abs(w) * Hamming"},
{"Abs(w) * Cosine"},
+ {"Abs(w) * Sinc"},
{"Shepp"},
{"Bandlimit"},
{"Sinc"},
int filterID = FILTER_INVALID;
for (int i = 0; i < s_iFilterCount; i++)
- if (strcasecmp (filterName, s_aszFilterName[i]) == 0) {
+cc if (strcasecmp (filterName, s_aszFilterName[i]) == 0) {
filterID = i;
break;
}
switch (filterID) {
case FILTER_BANDLIMIT:
- if (fabs(au) > fabs(bw / 2) + F_EPSILON)
+ if (fabs(au) >= fabs(bw / 2) + F_EPSILON)
q = 0.;
else
q = 1;
break;
case FILTER_ABS_BANDLIMIT:
- if (fabs(au) > fabs(bw / 2) + F_EPSILON)
+ if (fabs(au) >= fabs(bw / 2) + F_EPSILON)
q = 0.;
else
q = au;
break;
case FILTER_TRIANGLE:
- if (fabs(au) > fabs(bw / 2) + F_EPSILON)
+ if (fabs(au) >= fabs(bw / 2) + F_EPSILON)
q = 0;
else
q = 1 - au / bw;
break;
case FILTER_COSINE:
- if (fabs(au) > fabs(bw / 2) + F_EPSILON)
+ if (fabs(au) >= fabs(bw / 2) + F_EPSILON)
q = 0;
else
q = cos(PI * u / bw);
break;
case FILTER_ABS_COSINE:
- if (fabs(au) > fabs(bw / 2) + F_EPSILON)
+ if (fabs(au) >= fabs(bw / 2) + F_EPSILON)
q = 0;
else
q = au * cos(PI * u / bw);
q = au * bw * sinc (PI * bw * u, 1.);
break;
case FILTER_G_HAMMING:
- if (fabs(au) > fabs(bw / 2) + F_EPSILON)
+ if (fabs(au) >= fabs(bw / 2) + F_EPSILON)
q = 0;
else
q = param + (1 - param) * cos (TWOPI * u / bw);
break;
case FILTER_ABS_G_HAMMING:
- if (fabs(au) > fabs(bw / 2) + F_EPSILON)
+ if (fabs(au) >= fabs(bw / 2) + F_EPSILON)
q = 0;
else
q = au * (param + (1 - param) * cos(TWOPI * u / bw));